Neste artigo será apresentado o funcionamento de um dos periféricos mais populares, o Display LCD da Hitachi, modelo HD44780. Esse dispositivo devolve ao usuário um feedback visual das rotinas programadas. Um exemplo de aplicação é o relógio digital, nele há telas para mudar hora, data e selecionar alarmes, tudo isso é possível por meio do display, o qual permite navegar entre cada funcionalidade.
Vamos explorar alguns recursos e configurações deste dispositivo (escrita de dados e modo de operação), a fim de compreender como a bibliotecas externas (por exemplo, LiquidCrystal.h) operam na plataforma Arduino. Outro objetivo ao escolher este tipo de display foi pelo baixo nível de complexidade tanto em software quanto em hardware, visto que para utilizá-lo é necessário apenas algumas GPIOs disponíveis na placa Franzininho WiFi.
Ao final do artigo estaremos preparados para operar e desenvolver projetos utilizando o display com uma biblioteca própria, além de dominar técnicas e recursos da linguagem C.
Recursos Necessários
Os materiais necessários para realizar esse exemplo são:
- Placa Franzininho WiFi;
- Protoboard;
- Display LCD 16×2 (Hitachi HD44780 LCD);
- Cabos Jumpers (Macho – Macho);
- Trimpot 10k ohm
- Computador com Arduino IDE instalado e configurado.
Esquemático
Na montagem do projeto é necessário organização ao reproduzir o circuito em protoboard, sempre observando com cuidado as conexões e a sequência de pinos entre o Franzininho WiFi e o Display LCD (Figura 1). No pino definido com R/W deve-se ter um cuidado especial, pois quando colocado no GND o circuito habilita o display no modo escrita dados, porém deixaremos para falar mais sobre na próxima sessão.
Abaixo segue a montagem proposta para nosso exemplo com o LCD 16×2.
Desenvolvimento de aplicação com LCD
O Controlador Hitachi HD44780 LCD é um display alfanumérico de Cristal Líquido, comumente comercializado como display LCD, o qual possui variações de tamanho no mercado (16×2, 20×2 ou 20×4) e com diferentes propostas de aplicações. O modelo utilizado neste artigo é o 16 x 2 (dezesseis colunas por duas linhas) com impressão de textos monocromáticos, com luz de fundo (backlight) ajustável podendo ser ou azul ou verde. Outra característica deste dispositivo está na identificação de diferentes padrões de caracteres como: ASCII, mandarim (Chinês) e Kana. Com tantos recursos em um único dispositivo é importante entender seu funcionamento e como comunicar-se por comandos usando os microcontroladores.
O display LCD pode operar em dois modos: 8 bits ou 4 bits, no modo oito bits utilizam-se os pinos numerados de DB0 a DB7, o qual estão dispostos do menos significativo ao mais significativo, ou seja, os oito bits correspondentes ao modo de operação são os oito pinos físicos do hardware que funcionam em conjunto com os pinos de controle (EN e RS). Uma desvantagem deste modo é a exigência de 10 GPIOs da placa, em contrapartida, a velocidade de envio de dados demanda apenas um ciclo, ou seja, a mudança entre nível lógico baixo para nível lógico alto ou transição por borda de subida no pino definido como Enable. Já no modo quatro bits os pinos utilizados são definidos de DB4 a DB7 formam uma topologia mais enxuta e adaptável às placas de desenvolvimento que não possuem tantos pinos a disposição como, por exemplo, a placa Franzininho DIY. Por outro lado, neste modo exige-se dois ciclos para a escrita de dados e comandos.
Após definir e entender a configuração do hardware (modo 4 bits) podemos partir para o processo de inicialização do dispositivo e escrita de dados, em outras palavras definir os trens de bits ordenados para realizar um comando ou impressão de caracteres na tela. Para melhor compreensão observamos as recomendações do fabricante e seguiremos o fluxograma proposto (Figura 3). Logo em seguida deixaremos de maneira mais explícita o passo a passo de configuração.
- Aguarda-se em torno de 45 milissegundos ao ligar o dispositivo
- Envia-se três vezes o comando 0x03 (LCD_Inicializar) no intervalo de 4.1 milissegundos, 4.1 milissegundos e 150 milissegundos
- Envia comando de cursor para home
- Aguarda mais 1 milissegundo
- Envia três comandos (Limpar Tela, Configurar Modo 4 bits)
- Pronto, display inicializado e configurado
Conhecendo a sequência de passos, os procedimentos necessários para comunicação entre o display e a placa Franzininho WiFi, agora compreenderemos como os dados serão dispostos dentro da nossa aplicação e quais os responsáveis pelo controle de fluxo. Além dos quatros pinos conectados à nossa placa, há mais dois pinos de controle (Enable e RS). Estes têm o objetivo de fazer o chaveamento (Figura 4) entre os comandos, por exemplo, limpar tela, cursor em home, e as impressões de caracteres na tela. Caso deseje explorar mais a fundo outras funcionalidades pode encontrar mais informações acessando as referências.
Código
O código exemplo desenvolvido possui uma estrutura simples e direta. Para instalar a biblioteca na IDE do Arduino, deve-se acessar Ferramentas (Tools) > Gerenciar Bibliotecas. Será aberta uma janela (Figura 5) que irá carregar os índices e atualizado algumas bibliotecas já presentes. Ao finalizar, insira no campo de texto o nome Franzininho e logo será carregado a biblioteca para instalação (Figura 6) e clique em instalar.
Após a instalação, acesse Arquivos > Exemplos > Franzininho_LiquidCrystal > HelloFranzininhoWiFi.
Segue abaixo o código exemplo comentado anteriormente. Caso ainda não tenha configurado o Arduino IDE no seu computador ou tenha dúvidas sobre as ferramentas, acesse o tutorial de instalação na documentação da Franzininho.
/*
* Autor : Halysson Jr
* Data: 08/10/21
* Programa: Auxiliar no conhecimento teórico sobre
o funcionamento do display LCD 16x2. Nesse projeto
vamos apresentar os comandos básicos para escrever os
dados no display sem necessitar de uma biblioteca
externa
*/
/* Arquivo de cabeçalho para a inclusão do*/
#include "Franzininho_LiquidCrystal.h"
/* Construtor -> ( db4 , db5 , db6 , db7 , rs , en ) */
Franzininho_LiquidCrystal FranzininhoWifi (0,1,2,3,5,4);
void setup() {
FranzininhoWifi.LCD_Iniciar();
FranzininhoWifi.LCD_Comando(LCD_Clear);
FranzininhoWifi.LCD_Saida_String(1,2, "FRANZININHO");
FranzininhoWifi.LCD_Saida_String(2,5, "WIFI");
delay (1000);
}
void loop() {
}Resultados Finais
Após realizar a inclusão da biblioteca, a próxima etapa é a compilação do código e envio para a placa Franzininho WiFi. Segue a imagem abaixo de como deve ser a saída de dados na IDE do Arduino (Figura 8).
O resultado do projeto deve ser semelhante à Figura 9, caso não ocorra revise as conexões e as GPIOs e ajuste o contraste para ser visível a leitura dos caracteres. Sugerimos fortemente que altere o código para interagir com outros periféricos ou criar interfaces de controles.
Agradecimento
Deixo o agradecimento ao Fábio Souza, Diana Santos e a toda comunidade Franzininho pelo suporte e incentivo constante.
Referências
Acessado em: https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
Acessado em: https://dqsoft.blogspot.com/2013/03/lcd-alfanumerico-2×16-parte-2.html
Acessado em: https://embarcados.com.br/modulo-de-display-lcd/




