Display Nokia 5110

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar

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);
}