quinta-feira, março 21, 2013

LCD Alfanumérico 2x16 - Parte 1

Um periférico muito útil para sistemas embarcados são os displays LCD alfanuméricos. Nesta curta série vamos focar nos displays de 2 linhas de 16 caracteres, que permitem apresentar mensagens curtas e, em conjunto com alguns botões ou um teclado, implementar interfaces simples com o operador.




Considerações Gerais

Existe uma grande variedade de displays LCD 2x16. Felizmente a maioria possui a mesma lógica de funcionamento (mas não necessariamente a mesma pinagem). Este padrão de facto é chamado HD44780. As informações a seguir se baseiam em datasheets encontrados na internet. Outra fonte importante é o datasheet do controlador HD44780; este componente (ou um compatível) é utilizado internamente ao módulo de display.

Um primeiro detalhe importante é que estes displays normalmente requerem alimentação de 5V (encontrei somente um modelo que funciona com 3V), o que complica um pouco aplicações portáteis e a conexão a microcontroladores que operam em tensão inferior, como o MSP430.

Um display LCD em si não produz luz, ele possui uma transparência controlada eletricamente. Os modelos mais simples usam a luz ambiente, outros possuem um iluminação trazeira - o backlight. Estamos aqui interessados somente na comunicação do LCD com o microcontrolador; o backlight é aceso simplesmente colocando a alimentação correta em dois pinos. Para economizar energia, é comum usar um pino do microcontrolador para ligar ou desligar esta alimentação.

O Protocolo do Hardware

A figura abaixo mostra a pinagem de um display típico. Atenção que existem variações na pinagem, consulte sempre o datasheet específico do modelo que você está usando.



A comunicação entre o LCD e o microcontrolador é do tipo "paralela", em que vários bits são transferidos simultaneamente. Esta comunicação envolve bytes, cada um com 8 bits. A forma mais direta de conexão é usar um sinal para cada bit, correspondendo aos pinos DB0 a DB7 do display. Para utilizar menos pinos de E/S do microcontrolador, o LCD possui um modo em que cada transferência de byte é quebrada em duas transferências de 4 bits (nibble); neste caso somente os pinos DB4 a DB7 são usados para os dados.

Os dados podem ser transferidos do microcontrolador para o LCD (escrita) ou no sentido contrário (leitura). O pino R/W determina a direção: alto indica leitura e baixo indica escrita.

Como veremos adiante, o controlador de LCD possui dois registradores, um de comando e outro de dados. O pino RS seleciona quem será acessado alto indica registrador de comando e baixo indica registrador de dados.

Por último, e mais importante, existe o pino E (Enable), que é quem comanda a execução de uma leitura ou escrita. Normalmente esta sinal está baixo e os pinos de dados estão desconectados (tri-state). Para fazer uma transferência de byte ou nibble, deve-se seguir os seguintes passos:

  1. Colocar os pinos RS e R/W nos níveis adequados à operação desejada.
  2. Aguardar no mínimo um certo tempo (tsu nas figuras abaixo).
  3. Mudar o sinal E do nível baixo para alto.
  4. Na escrita, colocar o pinos de dados nos níveis adequados e mantidos estáveis por um tempo mínimo (tdsu).
  5. Na leitura, os pinos de dados serão posicionados pelo LCD e esterão estáveis para leitura pelo microcontrolador após um certo tempo (td)
  6. Retornar o sinal E para o nível baixo, tomando o cuidado de garantir que ele permaneceu alto por um tempo mínimo (tw).
  7. Os pinos de dados poderão ser alterados após um tempo mínimo tdw. Os sinais RS e R/W poderão ser alterados após um tempo mínimo th.
  8. A execução da operação seguinte deve respeitar o tempo mínimo de ciclo (tc).

As figuras abaixo mostram graficamente os passos e os tempos:

Na operação por nibble, devem ser feitos dois ciclos para cada byte, o primeiro para os bits mais significativos e o segundo para os menos.

Para um controle completo do LCD, no modo 8 bits, são precisos 11 sinais de E/S. Usando a operação por nibble, reduzimos isto para 7 sinais de E/S. Em muitas aplicações não há necessidade de leitura, o sinal de R/W pode ser ligado diretamente ao terra e precisamos somente de 6 sinais de E/S. Para reduzir ainda mais pode-se usar um shift register para gerar os sinais de dados e RS; neste caso bastam 2 sinais para o shift register (dados e clock) e mais o sinal E, num total de 3 pinos de E/S.

Um último sinal elétrico a considerar é o ajuste de contraste (Vo na figura apresentada). Normalmente este pino é ligado ao pino central de um potenciometro ou trimpot de 10K entre Vcc e terra. Se o contraste estiver errado pode acontecer de todos os pontos ficarem aparentemente sempre acesos ou apagados, dando a impressão que o display não está funcionando. Ao testar uma montagem, mova o potenciometro para uma das pontas e vire devagar para a outra.

Nenhum comentário: