Diagrama de blocos do controlador, destacando os registradores. |
Internamente o LCD possui duas pequenas memórias que armazenam os caracteres no display (endereços 0x00 a 0x0F para a primeira linha e 0x40 a 0x4F para a segunda) a definição de 8 caracteres programáveis (8 bytes para cada caracter, endereçados de 0x00 a 0x3F).
Estas memórias não são acessadas diretamente pelo microcontrolador Internamente ao controlador existem dois contadores de endereço, um para o display (DDRAM) e o outro para o gerador de caracteres (CGRAM).
Os Registradores
Toda a interação do microcontrolador com o controlador do display é feita através de dois registradores, um de instrução (somente de escrita) e outro de dado (de leitura e escrita).
Para escrever uma instrução no registrador correspondente, os sinais RS e R/W devem ser colocados em nível baixo. Quando o sinal R/W está em nível alto com RS em nível baixo, o pino DB7 indica se o controlador está ocupado (DB7 em nível alto) ou pronto para receber uma nova instrução (DB7 em nível baixo).
O registrador de dados é acessado colocando o sinal RS em nível alto. Se R/W também estiver em nível alto, o dado escrito pelo microcontrolador será escrito na memória DDRAM ou CGRAM (dependendo das instruções enviadas anteriormente). Se R/W estiver em nível baixo, o valor lido do registrador de dados virá da memória DDRAM ou CGRAM (dependendo das instruções enviadas anteriormente).
As Instruções
Clear Display (0x01)
Preenche a memória do display com espaços (0x20) e inicia o endereço DDRAM com zero. Desliga o deslocamento do display, fazendo o endereço 0 corresponder ao canto superior esquerdo do display. Seleciona o modo de incremento automático do endereço.
Return Home (0x02 ou 0x03)
Inicia o endereço DDRAM com zero. Desliga o deslocamento do display, fazendo o endereço 0 corresponder ao canto superior esquerdo do display.
Entry Mode Set (0x04 a 0x07)
O bit 1 (I/D) determina se o endereço da memória será automaticamente incrementado (valor 1) ou decrementado (valor 0) a cada leitura ou escrita.
O bit 0 da instrução controla o deslocamento do display. Se este bit for 1, o cursor ficará parado e o texto na linha será deslocado para a direta ou esquerda (conforme estiver ativo o incremento ou decremento automático).
Display On/Off Control (0x08 a 0x0F)
O bit 2 (D) determina se o display estará ligado (1) ou desligado (0).
O bit 1 (C) determina se será apresentado o cursor (bloco reverso na posição correspondente ao endereço selecionado da DDRAM). O valor 1 ativa o cursor e 0 o desativa.
O bit 0 (B) determina se o cursor pisca (1) ou não (0).
Cursor/Display Shift (0x10 a 0x1F)
Esta instrução permite deslocar o display ou o curosr para a direita ou esquerda. A movimentação do cursor implica no incremento ou decremento do endereço da memória.
O bit (S/C) seleciona se será deslocado o display (1) ou o cursor (0). O bit 2 (R/L) seleciona a direção: direita (1) ou esquerda (0).
Function Set (0x20 a 0x3F)
Esta instrução configura o display.
O bit 4 (DL) determina se a conexão ao microcontrolador usa 8 (valor 1) ou 4 (valor 0) bits.
O bit 3 (N) determina se o display tem duas (1) ou uma (0) linha.
O bit 2 (F) determina o tamanho dos caracteres: 5x7 (0) ou 5x10 (1).
No nosso caso vamos usar sempre DL=0, N=1 e F=0.
Set CGRAM Address (0x40 a 0x7F)
Define o valor do endereço da CGRAM (nos bits 5 a 0 da instrução). As leituras e escritas seguintes serão na CGRAM.
Set DDRAM Address (0x80 a 0xFF)
Define o valor do endereço da DDRAM (nos bits 6 a 0 da instrução). As leituras e escritas seguintes serão na DDRAM.
A tabela abaixo resume as instruções (clique para ampliar).
Iniciação do Controlador
Quando o controlador do LCD é alimentado passa por um ciclo interno de iniciação, que pode demorar até 10 milisegundos. Neste ciclo são executadas as instruções Clear Display, Function Set (8 bits, 1 linha, caracter 5x8), Display On/Off Control (display, cursor e pisca desligados) e Entry Mode Set (auto incremento sem deslocamento).
Na nossa iniciação vamos querer colocar o display no modo 4 bits e display de duas linhas, independente do estado anterior. Quando o controlador está configurado para 8 bits (por exemplo após um reset), só conseguimos escrever os 4 bits mais significativos, os demais são indeterminados. Se o controlador estiver configurado para operar com 4 bits, existe ainda a possibilidade de uma escrita ter sido interrompida entre as duas partes de uma instrução.
A solução é escrever três vezes 0011 no registrador de instruções, para garantir que o controlador estará no modo 8 bits independente do estado anterior. Escrevendo 0010 em seguida, o controlador estará no modo 4 bits, pronto para receber a primeira metade de uma instrução ou dado. Durante a etapa inicial (escrita dos três 0011), não é possível testar de forma confiável o sinal de ocupado.
Na próxima parte veremos um programa de teste usando um Arduino que nos permitirá testar as instruções de forma interativa.
Nenhum comentário:
Postar um comentário