Para estabelecer uma boa comunicação entre o mundo humano e o mundo das máquinas, as unidades de exibição desempenham um papel importante. E então eles são uma parte importante dos sistemas embarcados. As unidades de exibição - grandes ou pequenas, funcionam com o mesmo princípio básico. Além de unidades de exibição complexas, como telas gráficas e exibições 3D, é preciso saber trabalhar com telas simples como unidades de 16x1 e 16x2. A unidade de exibição 16x1 terá 16 caracteres e está em uma linha. O LCD 16x2 terá 32 caracteres no total 16in 1 r linha e outro 16 em 2 ndlinha. Aqui, deve-se entender que em cada caractere há 5x10 = 50 pixels, portanto, para exibir um caractere, todos os 50 pixels devem funcionar juntos. Mas não precisamos nos preocupar com isso porque há outro controlador (HD44780) na unidade de exibição que faz o trabalho de controlar os pixels. (você pode ver na unidade de LCD, é o olho roxo atrás).
Componentes necessários
Hardware:
Microcontrolador ATmega32
Fonte de alimentação (5v)
Programador AVR-ISP
JHD_162ALCD (LCD 16x2)
Capacitor 100uF.
Programas:
Atmel studio 6.1
Progisp ou magia flash
Diagrama de Circuito e Explicação
Conforme mostrado na interface do LCD com o circuito ATmega32, você pode ver aquele PORTA do ATMEGA32 conectado à porta de dados LCD. Aqui deve-se lembrar de desabilitar a comunicação JTAG no PORTC do ATMEGA alterando os bytes do fusível, caso se queira usar o PORTC como porta de comunicação normal. No LCD 16x2 existem 16 pinos ao todo, se houver luz de fundo, se não houver luz de fundo serão 14 pinos. Pode-se ligar ou deixar os pinos da luz de fundo. Agora, nos 14 pinos, há 8 pinos de dados (7-14 ou D0-D7), 2 pinos de fonte de alimentação (1 e 2 ou VSS e VDD ou gnd e + 5v), 3º pino para controle de contraste (VEE-controla a espessura dos caracteres mostrado), 3 pinos de controle (RS & RW & E)
No circuito acima para fazer a interface do LCD 16x2 com microcontrolador AVR, você pode observar que peguei apenas dois pinos de controle. Isso dá a flexibilidade para um melhor entendimento. O bit de contraste e READ / WRITE não são usados com freqüência, então eles podem ser colocados em curto com o terra. Isso coloca o LCD em maior contraste e modo de leitura. Só precisamos controlar os pinos ENABLE e RS para enviar caracteres e dados de acordo.
As conexões entre o microcontrolador ATmega32 e o LCD 16x2 são fornecidas abaixo:
PIN1 ou VSS - terra
PIN2 ou VDD ou VCC - alimentação de + 5v
PIN3 ou VEE - aterrado (oferece contraste máximo, melhor para um iniciante)
PIN4 ou RS (Seleção de Registro) - PD6 do microcontrolador
PIN5 ou RW (Leitura / Escrita) - terra (coloca o LCD em modo de leitura facilita a comunicação para o usuário)
PIN6 ou E (habilitar) - PD5 do microcontrolador
PIN7 ou D0 - PA0 do microcontrolador
PIN8 ou D1 - PA1
PIN9 ou D2 - PA2
PIN10 ou D3 - PA3
PIN11 ou D4 - PA4
PIN12 ou D5 - PA5
PIN13 ou D6 - PA6
PIN14 ou D7 - PA7
No circuito, você pode ver que usamos comunicação de 8 bits (D0-D7), no entanto, isso não é obrigatório e também podemos usar comunicação de 4 bits (D4-D7), mas com o programa de comunicação de 4 bits torna-se um pouco complexo para iniciantes, então decidimos Comunicação de 8 bits.
Portanto, pela mera observação da tabela acima, estamos conectando 10 pinos do LCD ao controlador, em que 8 pinos são pinos de dados e 2 pinos para controle.
Trabalhando
Agora, para começar, você deve conhecer as funções dos 10 pinos do LCD 16x2 (8 pinos de dados + 2 pinos de controle). Os 8 pinos de dados são para enviar dados ou comandos ao LCD. Em dois pinos de controle:
1. O pino RS (seleção de registro) informa ao LCD se estamos enviando dados ou comandos para ele.
Por exemplo:
Na tabela acima um para um valor de porta de dados (D7-D0) de "0b0010 1000 ou 0x28" diz ao LCD para exibir o símbolo "(". Na tabela dois, o mesmo valor de 0x28 diz ao LCD "você é um LCD de 5x7 pontos e se comportar como um ", então para o mesmo valor o usuário pode definir duas coisas, agora esta situação é neutralizada pelo pino de Seleção de registro, se o pino RS estiver definido como baixo, o LCD entende que estamos enviando o comando. Se definirmos o pino RS para alto, então O LCD entende que estamos enviando os dados. Em ambos os casos, o LCD respeita o valor da porta de dados de acordo com o valor do pino RS.
2. O pino E (ativar) serve simplesmente para informar “LED de indicação de energia de um PC”, este pino é definido como alto para informar ao LCD “para receber a porta de dados do formulário de dados do controlador”. Uma vez que este pino fica baixo após alto, o LCD processa os dados recebidos e mostra o resultado correspondente. Portanto, este pino é definido como alto antes de enviar dados e puxado para baixo após o envio de dados.
Depois de conectar o hardware, inicie o Atmel studio e inicie um novo projeto para escrever o programa, agora abra a tela de programação e comece a escrever o programa. O programa deve seguir conforme mostrado a seguir.
Primeiro, informamos ao controlador quais portas estamos usando para dados e controle do LCD. Em seguida, diga ao controlador quando enviar dados ou um comando de acordo, brincando com os pinos RS e E.
Breve explicação dos conceitos usados no programa:
1. E está configurado para alto (informando ao LCD para receber dados) e RS está configurado para baixo (informando ao LCD que estamos dando o comando)
2. Dando valor 0x01 à porta de dados como um comando para limpar a tela
3. E está configurado para alto (informando ao LCD para receber dados) e RS está configurado para alto (informando ao LCD que estamos fornecendo dados)
4. Pegando uma sequência de caracteres, enviando cada caractere em uma sequência, um por um.
5. E está definido como baixo (informa ao LCD que terminamos o envio de dados)
6. Após o último comando, o LCD encerra a comunicação e processa os dados e exibe a sequência de caracteres na tela.
Neste cenário, vamos enviar os personagens um após o outro. Os caracteres são fornecidos ao LCD por códigos ASCII (código padrão americano para intercâmbio de informações).
A tabela de códigos ASCII é mostrada acima. Aqui, para que o LCD mostre um caractere “@”, precisamos enviar um código hexadecimal “64”. Se enviarmos '0x62' para o LCD, ele mostrará o símbolo '>'. Assim, enviaremos os códigos apropriados ao LCD para exibir um nome.
A forma de comunicação entre o LCD e o microcontrolador ATmega32 AVR é melhor explicada passo a passo do código C abaixo,