Per stabilire una buona comunicazione tra il mondo umano e il mondo delle macchine, le unità di visualizzazione svolgono un ruolo importante. E quindi sono una parte importante dei sistemi embedded. Le unità di visualizzazione, grandi o piccole, funzionano secondo lo stesso principio di base. Oltre a unità di visualizzazione complesse come display grafici e dispay 3D, è necessario sapere come lavorare con display semplici come unità 16x1 e 16x2. Il display 16x1 avrà 16 caratteri e sarà su una riga. Il display LCD 16x2 avrà 32 caratteri in totale 16in 1 ° linea e un altro 16 a 2 °linea. Qui bisogna capire che in ogni carattere ci sono 5x10 = 50 pixel quindi per visualizzare un carattere tutti i 50 pixel devono lavorare insieme. Ma non dobbiamo preoccuparci di questo perché c'è un altro controller (HD44780) nell'unità di visualizzazione che svolge il compito di controllare i pixel. (puoi vederlo nell'unità LCD, è l'occhio nero sul retro).
Componenti richiesti
Hardware:
Microcontrollore ATmega32
Alimentazione (5v)
Programmatore AVR-ISP
JHD_162ALCD (LCD 16x2)
Condensatore 100uF.
Software:
Atmel studio 6.1
Progisp o magia flash
Schema del circuito e spiegazione
Come mostrato nell'interfaccia LCD con il circuito ATmega32, puoi vedere che PORTA di ATMEGA32 è connesso alla porta dati LCD. Qui bisogna ricordarsi di disabilitare la comunicazione JTAG nel PORTC di ATMEGA modificando i fuse bytes, se si vuole usare il PORTC come una normale porta di comunicazione. Nel 16x2 LCD ci sono 16 pin in tutto, se c'è una retroilluminazione, se non c'è retroilluminazione ci saranno 14 pin. Si può alimentare o lasciare i perni della retroilluminazione. Ora nei 14 pin ci sono 8 pin dati (7-14 o D0-D7), 2 pin di alimentazione (1 & 2 o VSS & VDD o gnd & + 5v), 3 ° pin per il controllo del contrasto (VEE-controlla quanto dovrebbero essere spessi i caratteri mostrato), 3 pin di controllo (RS & RW & E)
Nel circuito sopra per interfacciare LCD 16x2 con microcontrollore AVR, puoi osservare che ho preso solo due pin di controllo. Questo dà la flessibilità di una migliore comprensione. Il bit di contrasto e READ / WRITE non sono usati spesso, quindi possono essere cortocircuitati a massa. Questo mette l'LCD nel più alto contrasto e modalità di lettura. Abbiamo solo bisogno di controllare i pin ENABLE e RS per inviare caratteri e dati di conseguenza.
Di seguito sono riportati i collegamenti tra il microcontrollore ATmega32 e il display LCD 16x2:
PIN1 o VSS - massa
PIN2 o VDD o VCC - alimentazione + 5v
PIN3 o VEE - terra (offre il massimo contrasto migliore per un principiante)
PIN4 o RS (selezione registro) - PD6 del microcontrollore
PIN5 o RW (lettura / scrittura) - massa (mette l'LCD in modalità di lettura facilita la comunicazione per l'utente)
PIN6 o E (Abilita) - PD5 del microcontrollore
PIN7 o D0 - PA0 del microcontrollore
PIN8 o D1 - PA1
PIN9 o D2 - PA2
PIN10 o D3 - PA3
PIN11 o D4 - PA4
PIN12 o D5 - PA5
PIN13 o D6 - PA6
PIN14 o D7 - PA7
Nel circuito puoi vedere che abbiamo usato la comunicazione a 8 bit (D0-D7) tuttavia questo non è obbligatorio e possiamo anche usare la comunicazione a 4 bit (D4-D7) ma con il programma di comunicazione a 4 bit diventa un po 'complesso per i principianti, quindi siamo andati con Comunicazione a 8 bit.
Quindi dalla semplice osservazione dalla tabella sopra stiamo collegando 10 pin dell'LCD al controller in cui 8 pin sono pin dati e 2 pin per il controllo.
Lavorando
Ora per iniziare devi conoscere le funzioni dei 10 pin dell'LCD 16x2 (8 pin dati + 2 pin di controllo). Gli 8 pin dati servono per inviare dati o comandi all'LCD. In due pin di controllo:
1. Il pin RS (Selezione registro) serve a dire all'LCD se gli stiamo inviando dati o comandi.
Per esempio:
Nella tabella sopra uno per un valore della porta dati (D7-D0) di "0b0010 1000 o 0x28" indica all'LCD di visualizzare il simbolo "(". Nella tabella due lo stesso valore di 0x28 indica all'LCD "sei un LCD 5x7 punti e comportarsi come uno ", quindi per lo stesso valore l'utente può definire due cose, ora questa situazione è neutralizzata dal pin di selezione del registro, se il pin RS è impostato basso, LCD capisce che stiamo inviando il comando. Se impostiamo il pin RS su alto allora L'LCD capisce che stiamo inviando i dati, quindi in entrambi i casi l'LCD rispetta il valore della porta dati in base al valore del pin RS.
2. Il pin E (Enable) serve semplicemente per indicare "LED di indicazione dell'alimentazione di un PC", questo pin è impostato su alto per indicare all'LCD "di ricevere la porta dati dal modulo di controllo". Una volta che questo pin diventa basso dopo alto, il display LCD elabora i dati ricevuti e mostra il risultato corrispondente. Quindi questo pin è impostato su alto prima di inviare i dati e abbassato a terra dopo l'invio dei dati.
Ora dopo aver collegato l'hardware, avvia Atmel studio e avvia un nuovo progetto per scrivere il programma, ora apri la schermata di programmazione e avvia il programma di scrittura. Il programma deve seguire come mostrato di seguito.
Per prima cosa diciamo al controller quali porte stiamo utilizzando per i dati e il controllo dell'LCD. Quindi comunica al controller quando inviare i dati o un comando di conseguenza giocando con i pin RS ed E.
Breve spiegazione dei concetti utilizzati nel programma:
1. E è impostato su alto (indica a LCD di ricevere dati) e RS è impostato su basso (indica a LCD che stiamo dando il comando)
2. Assegnare il valore 0x01 alla porta dati come comando per cancellare lo schermo
3. E è impostato su alto (indica a LCD di ricevere dati) e RS è impostato su alto (indica a LCD che stiamo fornendo dati)
4. Prendendo una stringa di caratteri inviando ogni carattere in una stringa uno per uno.
5. E è impostato su un valore basso (indica a LCD che abbiamo finito di inviare i dati)
6. Dopo l'ultimo comando, il display LCD termina la comunicazione, elabora i dati e visualizza la stringa di caratteri sullo schermo.
In questo scenario invieremo i personaggi uno dopo l'altro. I caratteri sono forniti all'LCD da codici ASCII (codice standard americano per l'interscambio di informazioni).
La tabella dei codici ASCII è mostrata sopra. Qui affinché il display LCD mostri un carattere "@", è necessario inviare un codice esadecimale "64". Se inviamo "0x62" al display LCD, verrà visualizzato il simbolo ">". In questo modo, invieremo i codici appropriati all'LCD per visualizzare un nome.
La modalità di comunicazione tra LCD e microcontrollore AVR ATmega32 è meglio spiegata passo dopo passo del codice C in basso,