Mudanças entre as edições de "Display Nokia 5110"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
 
(5 revisões intermediárias por um outro usuário não estão sendo mostradas)
Linha 3: Linha 3:
 
O ponto de partida para os testes foi um exemplo do [http://www.arduino.cc/playground/Code/PCD8544 Arduino Playground].
 
O ponto de partida para os testes foi um exemplo do [http://www.arduino.cc/playground/Code/PCD8544 Arduino Playground].
   
  +
[[Arquivo:Nokia5110.jpg]]
   
 
==Descrição do Funcionamento do Display==
 
==Descrição do Funcionamento do Display==
Linha 26: Linha 27:
 
Os comandos abaixo independem do modo:
 
Os comandos abaixo independem do modo:
   
  +
{| class="wikitable"
NOP 0 0 0 0 0 0 0 0
 
  +
|-
Function Set 0 0 1 0 0 PD V H
 
  +
! Comando
  +
! Codificação
  +
|-
  +
| NOP
  +
| 0 0 0 0 0 0 0 0
  +
|-
  +
| Function Set
  +
| 0 0 1 0 0 PD V H
  +
|}
   
PD: 1 controlador desligado (Power down), 0 controlador ativo
+
PD: 1 controlador desligado (Power down), 0 controlador ativo<br />
V: 1 endereçamento vertical, 0 endereçamento horizontal
+
V: 1 endereçamento vertical, 0 endereçamento horizontal<br />
H: 1 conjunto estendido, 0 conjunto básico
+
H: 1 conjunto estendido, 0 conjunto básico<br />
   
 
Os comandos do conjunto básico são:
 
Os comandos do conjunto básico são:
   
  +
{| class="wikitable"
Display Control 0 0 0 0 1 D 0 E
 
  +
|-
Set Y Address 0 1 0 0 0 y y y
 
  +
! Comando
Set X Address 1 x x x x x x x
 
  +
! Codificação
  +
|-
  +
| Display Control
  +
| 0 0 0 0 1 D 0 E
  +
|-
  +
| Set Y Address
  +
| 0 1 0 0 0 y y y
  +
|-
  +
| Set X Address
  +
| 1 x x x x x x x
  +
|}
   
DE: 00 display apagado, 01 todos elementos acesos, 10 modo normal, 11 reverso
+
DE: 00 display apagado, 01 todos elementos acesos, 10 modo normal, 11 reverso<br />
yyy: endereço Y (0 a 5)
+
yyy: endereço Y (0 a 5)<br />
xxxxxxx: endereço X (0 a 83)
+
xxxxxxx: endereço X (0 a 83)<br />
   
 
Os comandos do conjunto estendido são usados para configuração:
 
Os comandos do conjunto estendido são usados para configuração:
   
  +
{| class="wikitable"
Temperature control 0 0 0 0 0 1 t t
 
  +
|-
Bias system 0 0 0 1 0 b b b
 
  +
! Comando
Set Vop (contraste) 1 v v v v v v v
 
  +
! Codificação
  +
|-
  +
| Temperature control
  +
| 0 0 0 0 0 1 t t
  +
|-
  +
| Bias system
  +
| 0 0 0 1 0 b b b
  +
|-
  +
| Set Vop (contraste)
  +
| 1 v v v v v v v
  +
|}
   
 
==Conexão do Display ao Arduino==
 
==Conexão do Display ao Arduino==
Linha 53: Linha 85:
 
A conexão está descrita no início do programa exemplo:
 
A conexão está descrita no início do programa exemplo:
   
  +
{| class="wikitable"
Display Arduino
 
  +
|-
1 - VCC +5V
 
  +
! Display
2 - GND GND
 
  +
! Arduino
3 - SCE DIGITAL 7
 
  +
|-
4 - RST DIGITAL 6
 
  +
| 1 - VCC
5 - O/C DIGITAL 5
 
  +
| +5V
6 - DIN DIGITAL 4
 
  +
|-
7 - SCLK DIGITAL 3
 
  +
|2 - GND
  +
|GND
  +
|-
  +
|3 - SCE
  +
|DIGITAL 7
  +
|-
  +
|4 - RST
  +
|DIGITAL 6
  +
|-
  +
|5 - O/C
  +
|DIGITAL 5
  +
|-
  +
|6 - DIN
  +
|DIGITAL 4
  +
|-
  +
|7 - SCLK
  +
|DIGITAL 3
  +
|}
   
 
==Adaptação do Exemplo==
 
==Adaptação do Exemplo==
   
  +
É necessário alterar a iniciação do display na rotina LcdInitialise do exemplo no Arduino playground:
  +
  +
<pre>
  +
void LcdInitialise(void)
  +
{
  +
pinMode(PIN_SCE, OUTPUT);
  +
pinMode(PIN_RESET, OUTPUT);
  +
pinMode(PIN_DC, OUTPUT);
  +
pinMode(PIN_SDIN, OUTPUT);
  +
pinMode(PIN_SCLK, OUTPUT);
  +
digitalWrite(PIN_RESET, LOW);
  +
digitalWrite(PIN_RESET, HIGH);
  +
// LcdWrite(LCD_C, 0x0C);
  +
LcdWrite( LCD_C, 0x21 ); // LCD Extended Commands.
  +
LcdWrite( LCD_C, 0xaf ); // Set LCD Vop (Contrast).
  +
LcdWrite( LCD_C, 0x04 ); // Set Temp coefficent.
  +
LcdWrite( LCD_C, 0x14 ); // LCD bias mode 1:48.
  +
LcdWrite( LCD_C, 0x20 ); // LCD Basic Commands.
  +
LcdWrite( LCD_C, 0x0c ); // LCD in normal mode. 0x0d for inverse
  +
}
  +
</pre>
   
 
==Posicionamento do Cursor==
 
==Posicionamento do Cursor==
  +
  +
No exemplo do Arduino Playground o texto é escrito sequencialmente. A rotina abaixo permite posicionar em uma determinada linha e coluna, considerando que a matriz de caracteres utilizada no exemplo é de 7x8 pontos.
  +
  +
<pre>
  +
void LcdString(char *characters, int lin, int col)
  +
{
  +
LcdWrite( LCD_C, 0x40 + lin); // endereço Y
  +
LcdWrite( LCD_C, 0x80 + col*7); // endereço X
  +
LcdString(characters);
  +
}
  +
</pre>
  +
  +
[[Categoria:Projetos]]

Edição atual tal como às 04h49min de 11 de agosto de 2013

O display Nokia 5110 é um display LCD monocromático com 84x48 pontos, com uma interface serial. O modelo testado foi adquirido na Sparkfun e está montado em uma placa que permite usar conector padrão de .1".

O ponto de partida para os testes foi um exemplo do Arduino Playground.

Nokia5110.jpg

Descrição do Funcionamento do Display

Informações detalhadas podem ser vistas no datasheet.

Comunicação Serial

Na comunicação o display pode receber comandos ou dados, o que é selecionado pelo sinal D/C (0 é comando, 1 é dado). O sinal SCE deve ser colocado em 0 para iniciar a recepção e os 8 bits de dados devem ser enviados serialmente através de SDIN, pulsando SCLK para cada bit. Ao final SCE deve ser retornado ao nível 1. O sinal D/C é verificado no último bit de dados (no código de exemplo ele é posicionado antes de baixar SCE).

Nokia Serial.png

Memória da Tela

Internamente ao controlador existe uma memória que armazena o conteúdo da tela. Cada ponto da tela corresponde a um bit nesta memória. Os bytes estão organizados "na vertical": cada byte controla 8 pontos em 8 linhas da mesma coluna. Desta forma a memória é uma matriz de 6 linhas de 84 bytes:

Nokia Memoria.png

Comandos

A interpretação dos comandos depende de um modo interno do controlador: conjunto básico (H=0) e conjunto estendido (H=1).

Os comandos abaixo independem do modo:

Comando Codificação
NOP 0 0 0 0 0 0 0 0
Function Set 0 0 1 0 0 PD V H

PD: 1 controlador desligado (Power down), 0 controlador ativo
V: 1 endereçamento vertical, 0 endereçamento horizontal
H: 1 conjunto estendido, 0 conjunto básico

Os comandos do conjunto básico são:

Comando Codificação
Display Control 0 0 0 0 1 D 0 E
Set Y Address 0 1 0 0 0 y y y
Set X Address 1 x x x x x x x

DE: 00 display apagado, 01 todos elementos acesos, 10 modo normal, 11 reverso
yyy: endereço Y (0 a 5)
xxxxxxx: endereço X (0 a 83)

Os comandos do conjunto estendido são usados para configuração:

Comando Codificação
Temperature control 0 0 0 0 0 1 t t
Bias system 0 0 0 1 0 b b b
Set Vop (contraste) 1 v v v v v v v

Conexão do Display ao Arduino

A conexão está descrita no início do programa exemplo:

Display Arduino
1 - VCC +5V
2 - GND GND
3 - SCE DIGITAL 7
4 - RST DIGITAL 6
5 - O/C DIGITAL 5
6 - DIN DIGITAL 4
7 - SCLK DIGITAL 3

Adaptação do Exemplo

É necessário alterar a iniciação do display na rotina LcdInitialise do exemplo no Arduino playground:

void LcdInitialise(void)
{
  pinMode(PIN_SCE, OUTPUT);
  pinMode(PIN_RESET, OUTPUT);
  pinMode(PIN_DC, OUTPUT);
  pinMode(PIN_SDIN, OUTPUT);
  pinMode(PIN_SCLK, OUTPUT);
  digitalWrite(PIN_RESET, LOW);
  digitalWrite(PIN_RESET, HIGH);
//  LcdWrite(LCD_C, 0x0C);
  LcdWrite( LCD_C, 0x21 ); // LCD Extended Commands.
  LcdWrite( LCD_C, 0xaf ); // Set LCD Vop (Contrast).
  LcdWrite( LCD_C, 0x04 ); // Set Temp coefficent.
  LcdWrite( LCD_C, 0x14 ); // LCD bias mode 1:48.
  LcdWrite( LCD_C, 0x20 ); // LCD Basic Commands.
  LcdWrite( LCD_C, 0x0c ); // LCD in normal mode. 0x0d for inverse
}

Posicionamento do Cursor

No exemplo do Arduino Playground o texto é escrito sequencialmente. A rotina abaixo permite posicionar em uma determinada linha e coluna, considerando que a matriz de caracteres utilizada no exemplo é de 7x8 pontos.

void LcdString(char *characters, int lin, int col)
{
  LcdWrite( LCD_C, 0x40 + lin);  // endereço Y
  LcdWrite( LCD_C, 0x80 + col*7);  // endereço X
  LcdString(characters);
}