- Controller LCD a matrice di punti 16x2 IC HD44780:
- Visualizzazione di un carattere personalizzato su LCD 16x2:
- Spiegazione di programmazione e funzionamento:
- Collegamenti e test del circuito:
Nel nostro precedente tutorial, abbiamo imparato come interfacciare un LCD 16 * 2 con un microcontrollore PIC. Ti consigliamo di esaminarlo prima di andare oltre, se sei un principiante nel microcontrollore PIC. In precedenza abbiamo anche appreso le basi del PIC utilizzando il programma lampeggiante a LED e i timer nel microcontrollore PIC. Puoi controllare qui tutti i tutorial sull'apprendimento dei microcontrollori PIC utilizzando il compilatore MPLABX e XC8.
In questo tutorial, rendiamolo più interessante creando i nostri caratteri personalizzati e visualizzandoli sul nostro schermo LCD utilizzando il microcontrollore PIC PIC16F877A. Inoltre ci sono alcuni caratteri personalizzati predefiniti per lo più utilizzati dati dallo stesso IC HD44780A, vedremo anche come possiamo usarli. Come spiegato nel nostro precedente tutorial, il nostro LCD ha un controller Hitachi HD44780 incorporato che ci aiuta a visualizzare i caratteri. Ogni carattere che mostriamo è già predefinito all'interno della ROM dell'IC HD44780. Impareremo a conoscere il controller LCD IC HD44780, prima di visualizzare il carattere sull'LCD.
Controller LCD a matrice di punti 16x2 IC HD44780:
Per visualizzare un carattere personalizzato, dobbiamo in qualche modo dire all'IC che aspetto avrà il carattere personalizzato. Per farlo dovremmo conoscere i Tre tipi di Memorie presenti all'interno dell'IC controller LCD HD44780:
Character Generator ROM (CGROM): è la memoria di sola lettura che, come detto in precedenza, contiene tutti gli schemi dei caratteri predefiniti al suo interno. Questa ROM varierà da ogni tipo di IC di interfaccia e alcuni potrebbero avere alcuni caratteri personalizzati predefiniti con loro.
Display Data RAM (DDRAM): questa è una memoria ad accesso casuale. Ogni volta che visualizziamo un carattere, il suo modello verrà recuperato da CGROM e trasferito alla DDRAM, quindi verrà posizionato sullo schermo. Per semplificare, DDRAM avrà i modelli di tutti i caratteri attualmente visualizzati sullo schermo LCD. In questo modo per ogni ciclo l'IC non ha bisogno di recuperare dati da CGROM e aiuta a ottenere una breve frequenza di aggiornamento
Generatore di caratteri RAM (CGRAM): anche questa è una memoria ad accesso casuale, quindi possiamo scrivere e leggere dati da essa. Come suggerisce il nome, questa memoria sarà quella che può essere utilizzata per generare il carattere personalizzato. Dobbiamo formare un modello per il carattere e scriverlo nel CGRAM, questo modello può essere letto e visualizzato sullo schermo quando richiesto.
Ora, poiché abbiamo una conoscenza di base dei tipi di memoria presenti nell'IC di interfaccia HD44780. Diamo uno sguardo alla sua scheda tecnica per capirne un po 'di più.
Come suggerisce la scheda tecnica, l'IC HD44780 ha fornito 8 posizioni per memorizzare i nostri modelli personalizzati in CGRAM, anche a destra possiamo vedere che ci sono alcuni caratteri predefiniti che possono essere visualizzati anche sul nostro schermo LCD. Vediamo come possiamo farlo.
Visualizzazione di un carattere personalizzato su LCD 16x2:
Per visualizzare un carattere personalizzato dobbiamo prima generare un modello per esso e quindi salvarlo nel CGRAM. Poiché abbiamo già le funzioni di libreria con noi, dovrebbe essere facile farlo con alcuni semplici comandi. Ecco la libreria per le funzioni LCD, ma qui abbiamo copiato e incollato tutte le funzioni della libreria nel programma stesso, quindi non è necessario includere questo file di intestazione nel nostro programma. Controlla anche questo articolo per il funzionamento dell'LCD di base e i suoi piedini.
Il primo passo è generare un motivo o il carattere personalizzato. Come sappiamo ogni carattere è una combinazione di 5 * 8 punti. Dobbiamo selezionare quale punto (pixel) dovrebbe andare in alto e quale rimanere in basso. Disegna semplicemente una casella come di seguito e ombreggia le regioni in base al tuo personaggio. Il mio personaggio qui è un uomo stilizzato (spero che sembri uno). Una volta ombreggiato, scrivi semplicemente il valore binario equivalente di ogni byte come mostrato di seguito.
Metti semplicemente un "1" sulla regione ombreggiata e uno "0" sulla regione non ombreggiata per ogni byte, e il nostro modello personalizzato è pronto. Allo stesso modo ho creato 8 codici di pattern personalizzati per i nostri 8 spazi di memoria che presentano il CGROM. Sono elencati nella tabella seguente.
S.NO: |
Carattere personalizzato |
Codice modello |
1 |
0b01110, 0b01110, 0b00100, 0b01110, 0b10101, 0b00100, 0b01010, 0b01010 |
|
2 |
0b00000, 0b00000, 0b01010, 0b00100, 0b00100, 0b10001, 0b01110, 0b00000 |
|
3 |
0b00100, 0b01110, 0b11111, 0b11111, 0b01110, 0b01110, 0b01010, 0b01010 |
|
4 |
0b01110, 0b10001, 0b10001, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
5 |
0b01110, 0b10000, 0b10000, 0b11111, 0b11011, 0b11011, 0b11111, 0b00000 |
|
6 |
0b00000, 0b10001, 0b01010, 0b10001, 0b00100, 0b01110, 0b10001, 0b00000 |
|
7 |
0b00000, 0b00000, 0b01010, 0b10101, 0b10001, 0b01110, 0b00100, 0b00000 |
|
8 |
0b11111, 0b11111, 0b10101, 0b11011, 0b11011, 0b11111, 0b10001, 0b11111 |
Nota: non è obbligatorio caricare tutti gli 8 spazi previsti nella CGRAM.
Spiegazione di programmazione e funzionamento:
Ora i nostri codici modello sono pronti, non ci resta che caricarli nella CGRAM dell'LCD e visualizzarli utilizzando il microcontrollore PIC. Per caricarli nel CGRAM possiamo formare un array di elementi 5 * 8 e caricare ogni byte utilizzando un ' ciclo for '. La matrice del codice del pattern è mostrata di seguito:
const unsigned short Custom_Char5x8 = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010, // Code for CGRAM memory space 1 0b00000,0b00000,0b01010,0b00100,0b00100,0b10001,0b01110,0 Code forb00000, Spazio di memoria CGRAM 2 0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010, // Codice per spazio di memoria CGRAM 3 0b01110,0b10001,0b10001,0b11111,0b11011,0b11011,0b11111,0b00000 memory, // space 4 0b01110,0b10000,0b10000,0b11111,0b11011,0b11011,0b11111,0b00000, // Codice per spazio di memoria CGRAM 5 0b00000,0b10001,0b01010,0b10001,0b00100,0b01110,0b10001,0b00000, // Codice per spazio di memoria CGRAM 6 0b00000,0b00000,0b01010,0b10101,0b10001,0b01110,0b00100,0b00000, // Codice per spazio di memoria CGRAM 7 0b11111,0b11111,0b10101,0b11011,0b11011,0b11111,0b10001,0b11111 // Codice per spazio di memoria CGRAM 8};
Ogni spazio di memoria viene caricato con il rispettivo schema di caratteri. Per caricare questo pattern nell'IC HD44780 è necessario fare riferimento alla scheda tecnica dell'HD44780, ma sono solo le righe di comando che possono essere utilizzate per impostare l'indirizzo del CGRAM
// *** Carica il carattere personalizzato in CGROM *** ////// Lcd_Cmd (0x04); // Imposta indirizzo CGRAM Lcd_Cmd (0x00); //.. imposta l'indirizzo CGRAM per (i = 0; i <= 63; i ++) Lcd_Print_Char (Custom_Char5x8); Lcd_Cmd (0); // Torna alla home Lcd_Cmd (2); //.. torna alla Home // *** Caricamento caratteri personalizzati completato *** //////
Qui, all'interno del " ciclo for", ogni valore binario viene caricato nel CGROM. Una volta caricato il motivo, è possibile visualizzare i caratteri personalizzati chiamando semplicemente la posizione del motivo utilizzando la funzione void Lcd_Print_Char (dati carattere) come mostrato di seguito.
Lcd_Print_Char (0); // Visualizza carattere personalizzato 0 Lcd_Print_Char (1); // Visualizza carattere personalizzato 1 Lcd_Print_Char (2); // Visualizza il carattere personalizzato 2 Lcd_Print_Char (3); // Visualizza carattere personalizzato 3 Lcd_Print_Char (4); // Visualizza il carattere personalizzato 4 Lcd_Print_Char (5); // Visualizza il carattere personalizzato 5 Lcd_Print_Char (6); // Visualizza il carattere personalizzato 6 Lcd_Print_Char (7); // Visualizza carattere personalizzato 7
Carattere speciale predefinito di stampa:
L'IC HD44780 ha alcuni caratteri speciali predefiniti memorizzati nella DDROM. Questi caratteri possono essere stampati direttamente sullo schermo facendo riferimento al suo valore binario nel foglio dati.
Ad esempio: il valore binario del carattere "ALPHA" è 0b11100000. Come ottenerlo può essere compreso dalla figura sottostante, allo stesso modo è possibile ottenere il valore per qualsiasi carattere speciale predefinito nell'IC.
Una volta che il valore binario è noto, il carattere corrispondente può essere stampato sullo schermo semplicemente utilizzando la funzione void Lcd_Print_Char (char data) come mostrato di seguito, Lcd_Print_Char (0b11100000); // valore binario di alfa dal foglio dati
Il codice completo di questo progetto è fornito di seguito nella sezione Codice, controlla anche la spiegazione video dettagliata alla fine di questo tutorial.
Collegamenti e test del circuito:
Questo progetto non ha alcun requisito hardware aggiuntivo, abbiamo semplicemente utilizzato le stesse connessioni del precedente tutorial sull'interfacciamento LCD e abbiamo utilizzato la stessa scheda che abbiamo creato nel Tutorial lampeggiante LED. Come sempre simuliamo il programma utilizzando Proteus per verificare il nostro output.
Una volta che la simulazione è in esecuzione come previsto, masterizziamo direttamente il codice nella nostra configurazione hardware. L' output del programma dovrebbe essere qualcosa del genere:
Ecco come puoi visualizzare qualsiasi carattere personalizzato su LCD 16x2 utilizzando il microcontrollore PIC con il compilatore MPLABX e XC8. Controlla anche la nostra serie completa di apprendimento per microcontrollori PIC qui.