Mudanças entre as edições de "Display Nokia 5110"
(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.
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).
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:
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); }