O display é a parte necessária de qualquer máquina, seja eletrodomésticos ou máquinas industriais. O display não apenas mostra as opções de controle para operar a máquina, mas também mostra o status e a saída da tarefa executada por aquela máquina. Existem muitos tipos de visores usados em eletrônicos, como visor de 7 segmentos, visor LCD de 16x2, visor de tela de toque TFT, visor OLED, etc.
O display LCD 16x2 é o módulo de display mais básico e também usado em alguns pequenos equipamentos eletrônicos como calculadora, medidor digital, etc. Fizemos muitos projetos usando o LCD 16x2, incluindo a interface básica com outros microcontroladores:
- Interface de LCD com microcontrolador 8051
- Interface de LCD com microcontrolador ATmega32
- Interface LCD com microcontrolador PIC
- Interface de LCD 16x2 com Arduino
- Interface de LCD 16x2 com Raspberry Pi usando Python
Neste tutorial, veremos como fazer a interface de um LCD 16x2 com o microcontrolador Atmega16 AVR e exibir uma mensagem de boas-vindas simples.
Componentes necessários
- Atmega16
- Módulo LCD 16x2
- Jumpers
- Tábua de pão
Diagrama de circuito
Programando Atmega16 para display LCD 16x2
A programação não requer nenhuma biblioteca externa. Aqui, o Atmega16 é programado usando USBASP e Atmel Studio7.0. O Programa Completo e o Vídeo de Trabalho são fornecidos no final do projeto, basta fazer o upload do programa no Atmega16 e girar 10k POT para ajustar o brilho do LCD.Defina inicialmente a frequência da CPU e inclua as bibliotecas necessárias que vêm com o Atmel Studio Package, como para acessar os pinos IO e
Defina os pinos RS e EN do LCD no programa. Os pinos RS são usados para selecionar os dados e o registro de comando. O pino de ativação bloqueia os dados.
#define en PA3 #define rs PA2
Defina também qual PORTA do Atmega16 será usada para fazer a interface do LCD. Aqui, o PORTA é usado.
#define lcdDirection DDRA #define lcdPort PORTA
O próximo passo é construir uma função que aceitará um comando passando um parâmetro. Existem muitos comandos LCD HEX. Os comandos hexadecimais são usados para definir a função do LCD. Como estamos usando o modo de LCD de 4 bits, o byte (8 bits) será enviado em dois pacotes. Um dos pacotes será Upper Nibble (4 bits) e o outro pacote será Lower Nibble (4 bits).
void lcdCommand (comandos sem sinal) { lcdPort = (lcdPort & 0x0F) - (comandos & 0xF0); Porta lcd & = ~ (1 <
O próximo passo seria aceitar os personagens e prendê-los à porta do LCD. Os caracteres recebidos são então enviados para o LCD nibble by nibble. A Função pega o caractere usando passagem por parâmetro e então pega o nibble superior e inferior. O pino 'rs' é definido como alto para o registro de dados e, em seguida, um pulso ascendente é enviado para reter os dados. Da mesma forma, o nibble inferior é enviado ao alterar o valor de habilitar e enviar o pulso crescente para habilitar.
void lcdChar (string sem sinal) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); Porta lcd - = (1 <
Esta função apenas converte o caractere em string e pode ser usada posteriormente no programa onde a escrita de string é necessária.
void lcdString (char * str) { int j; para (j = 0; str! = 0; j ++) { lcdChar (str); } }
Agora, uma função é escrita apenas para limpar a tela. Você só precisa enviar o comando 01 em HEX e então colocar o cursor na posição inicial.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Agora, na função principal, o LCD é inicializado. Defina inicialmente a direção da PORTA para o LCD fazer a interface. Aqui, a PORTA é definida como OUTPUT, então defina FF.
lcdDirection = 0xFF; _delay_ms (20)
Em seguida, defina o LCD no modo de 4 bits enviando 02 em hexadecimal. Envie também 28 em hexadecimal para defini-lo em pixels de matriz de 2 linhas e 15x7 no modo de 4 bits.
lcdCommand (0x02); lcdCommand (0x28);
Os comandos 0c e 06 são usados para controlar a posição do cursor. E finalmente limpe a tela enviando 01 em hexadecimal. Isso encerrará a inicialização do LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Após o término da inicialização, apenas teste o LCD enviando uma string. Aqui estamos enviando uma String " LCD Interface " no 1 st linha.
lcdString ("Interface de LCD");
Em seguida, mova o cursor para a próxima linha enviando o comando c0 em hexadecimal. E finalmente nesta posição, escreva a string "Com Atmega1 6".
lcdCommand (0xC0); lcdString ("Com Atmega16");
Isso conclui o tutorial completo sobre a interface de um LCD 16x2 com o Atmega16. Observe que se você não obtiver nenhuma imagem ou pixels, verifique sua fiação de acordo com o código e o diagrama de circuito ou altere o valor do POT conectado ao pino V0 do LCD. Se você tiver alguma dúvida ou sugestão, pode entrar em contato conosco escrevendo para o nosso fórum ou comente abaixo.