Il display è la parte necessaria di qualsiasi macchina, sia che si tratti di un elettrodomestico o di una macchina industriale. Il display non solo mostra le opzioni di controllo per azionare la macchina, ma mostra anche lo stato e l'output dell'attività eseguita da quella macchina. Esistono molti tipi di display utilizzati nell'elettronica come display a 7 segmenti, display LCD 16x2, display touch screen TFT, display OLED ecc.
Il display LCD 16x2 è il modulo di visualizzazione più semplice e viene utilizzato anche in alcune piccole apparecchiature elettroniche come calcolatrici, misuratori digitali, ecc. Abbiamo realizzato molti progetti utilizzando LCD 16x2 inclusa l'interfaccia di base con altri microcontrollori:
- Interfacciamento LCD con microcontrollore 8051
- Interfacciamento LCD con il microcontrollore ATmega32
- Interfacciamento LCD con microcontrollore PIC
- Interfacciamento LCD 16x2 con Arduino
- Interfaccia LCD 16x2 con Raspberry Pi utilizzando Python
In questo tutorial vedremo come interfacciare un LCD 16x2 con il microcontrollore Atmega16 AVR e visualizzare un semplice messaggio di benvenuto.
Componenti richiesti
- Atmega16
- Modulo LCD 16x2
- Ponticelli
- Breadboard
Schema elettrico
Programmazione Atmega16 per display LCD 16x2
La programmazione non richiede alcuna libreria esterna. Qui Atmega16 è programmato utilizzando USBASP e Atmel Studio7.0. Il programma completo e il video di lavoro sono forniti alla fine del progetto, basta caricare il programma in Atmega16 e ruotare 10k POT per regolare la luminosità dell'LCD.Definisci inizialmente la frequenza della CPU e includi le librerie necessarie fornite con Atmel Studio Package, come per l'accesso ai pin IO e
Definisci i pin RS e EN dell'LCD nel programma. Gli RS Pins vengono utilizzati per selezionare i dati e il registro dei comandi. Il pin di abilitazione blocca i dati.
#define en PA3 #define rs PA2
Definire anche quale PORTA di Atmega16 verrà utilizzata per interfacciare LCD. Qui viene utilizzata la PORTA.
#define lcdDirection DDRA #define lcdPort PORTA
Il prossimo passo è costruire una funzione che accetterà un comando passando un parametro. Sono disponibili molti comandi LCD HEX. I comandi esadecimali vengono utilizzati per definire la funzione dell'LCD. Poiché stiamo utilizzando la modalità a 4 bit dell'LCD, il byte (8 bit) verrà inviato in due pacchetti. Un pacchetto sarà Upper Nibble (4 bit) e l'altro pacchetto sarà Lower Nibble (4 bit).
void lcdCommand (comandi char non firmati) { lcdPort = (lcdPort & 0x0F) - (comandi & 0xF0); lcdPort & = ~ (1 <
Il passo successivo sarebbe accettare i caratteri e agganciarli alla porta dell'LCD. I caratteri ricevuti vengono quindi inviati al display LCD nibble per nibble. La funzione prende il carattere utilizzando il parametro passa per e quindi prende il bocconcino superiore e inferiore. Il pin "rs" è impostato su alto per il registro dati e quindi viene inviato un impulso crescente per bloccare i dati. Allo stesso modo il nibble inferiore viene inviato modificando il valore di abilitazione e inviando l'impulso crescente per abilitazione.
void lcdChar (stringa di caratteri non firmata) { lcdPort = (lcdPort & 0x0F) - (string & 0xF0); lcdPort - = (1 <
Questa funzione converte semplicemente il carattere in stringa e può essere utilizzata nel programma in un secondo momento dove è necessario scrivere una stringa.
void lcdString (char * str) { int j; for (j = 0; str! = 0; j ++) { lcdChar (str); } }
Ora viene scritta una funzione solo per cancellare lo schermo. Devi solo inviare il comando 01 in HEX e quindi impostare il cursore sulla posizione iniziale.
void lcdClear () { lcdCommand (0x01); _delay_ms (2); lcdCommand (0x80); }
Ora nella funzione principale, il display LCD è inizializzato. Inizialmente impostare la direzione PORT per l'interfaccia LCD. Qui, la PORTA è impostata come OUTPUT quindi impostare FF.
lcdDirection = 0xFF; _delay_ms (20)
Quindi impostare il display LCD in modalità 4 bit inviando 02 in esadecimale. Invia anche 28 in esadecimale per impostarlo su 2 righe, 15x7 pixel di matrice in modalità 4 bit.
lcdCommand (0x02); lcdCommand (0x28);
I comandi 0c e 06 vengono utilizzati per controllare la posizione del cursore. E infine cancella lo schermo inviando 01 in esadecimale. Questo finirà l'inizializzazione dell'LCD.
lcdCommand (0x0c); lcdCommand (0x06); lcdCommand (0x01);
Dopo che l'inizializzazione è terminata, è sufficiente testare il display LCD inviando una stringa. Qui stiamo inviando una stringa " LCD interfacciamento " nel 1 ° fila.
lcdString ("Interfacciamento LCD");
Quindi sposta il cursore sulla riga successiva inviando il comando c0 in esadecimale. E infine su questa posizione, scrivi la stringa "With Atmega1 6".
lcdCommand (0xC0); lcdString ("Con Atmega16");
Questo termina il tutorial completo sull'interfacciamento di un LCD 16x2 con Atmega16. Si noti che se non si ottengono immagini o pixel, controllare il cablaggio in base al codice e allo schema del circuito o modificare il valore del POT collegato al pin V0 dell'LCD. Se hai dubbi o suggerimenti, puoi contattarci scrivendo al nostro forum o commentando qui sotto.