In questo breve articolo illustreremo come interfacciare un display LCD a caratteri 2x16 Hitachi compatibile (l’interfaccia ideata da Hitachi è uno standard di fatto, tanto da essere adottata anche dalle altre case costruttrici) con un controllore PIC Microchip. Del tutto simile è l’interfacciamento di display a caratteri di altre dimensioni (1x16, 2x20, 4x16, 4x20, 2x40 e 4x40) e solo un po’ più complesso quello di LCD grafici (GLCD- Grafic Liquid Crystal Display) o di LCD touch screen.
Interfacciamento tra display LCD 2x16 ed un Controllore PIC Microchip
I dati (caratteri ASCII) e i comandi del display sono codici ad 8 bit; nonostante tutto gli LCD che integrano il controllore HD44780 o compatibile a bordo possono essere interfacciati sia con 8 linee dati (8 Bit-Mode) che con 4 linee dati (4-Bit Mode). La seconda modalità consente di lasciare liberi il maggior numero di pin possibili per il controllore o processore esterno che pilota il display. Ciò è reso possibile da un’operazione di multiplexing: il byte è scomposto in due gruppi di 4 bit ciascuno dei quali è trasmesso sul bus in istanti successivi di tempo (prima i quattro bit più significativi, quindi i quattro meno significativi). Alle linee del bus dati vanno aggiunte, in entrambe le modalità, tre line di controllo e l’alimentazione. Lo schema elettrico del circuito (figura 1) è legato alle specifiche funzioni delle linee dati e di controllo; il firmware è ovviamente stilato di conseguenza.
L’interfacciamento elettrico a 4 bit di figura è valido anche per display 1x16, 2x20, 4x20, 4x16 e 2x40 integranti lo stesso controller HD44780 o equivalente compatibile. L’interfacciamento a quattro bit necessita di 6 linee del controllore: quattro per la trasmissione dati/istruzioni e due di controllo; le altre linee normalmente impiegate nell’interfacciamento ad 8 bit sono collegate a massa (nell’interfacciamento ad 8-bit sono richiesti 11 linee: 3 di controllo ed 8 per il bus dati).
Il firmware
La stesura del firmware per pilotare un LCD si avvale, generalmente, di driver integrati nel compilatore o che l’utente programmatore inserisce esplicitamente nel file di progetto (come nel caso del compilatore CCS istallato ed integrato come plug-in nell’ambiente Mplab di Microchip). Inoltre il compilatore mette, generalmente, a disposizione una serie di funzioni di libreria per la gestione dello stesso LCD. Il programmatore deve pertanto preoccuparsi semplicemente di richiamare tali funzioni che permettono, con una sola istruzione di alto livello, di scrivere un testo a partire da una specifica posizione sul display, di eseguire uno shifting del testo stesso, di cancellare determinati caratteri, di pulire lo schermo e così via. Dopo aver realizzato il circuito, eseguita la stesura del firmware, compilato il sorgente e programmato il PIC (al seguente link un approfondimento del PIC16F) con il file .HEX ottenuto è possibile verificare la rispondenza del comportamento dell’LCD a quanto atteso. Se non è visualizzato nulla sul display, ma siamo certi che il circuito sia elettricamente corretto e che il PIC sia ben programmato è opportuno controllare la regolazione del contrasto agendo sull’apposito trimmer di regolazione (figura 1-pin 3-LCD). Riportiamo un esempio di firmware scritto in MikroC (figura 2) che mostra l’effetto di alcune delle funzioni integrate nel compilatore per il controllo degli LCD (schema elettrico: figura 1).
In tabella 1 è riportata la serie di funzioni di libreria per il controllo, in MikroC, di LCD mediante interfaccia a 4 bit.
I dati in tabella sono presi dall’Help del compilatore MikroC. Ricordiamo che la prima istruzione da inviare ad un LCD è sempre quella di inizializzazione: essa permette di configurare l’LCD nella modalità di interfacciamento a 4 bit oppure ad 8 bit. Quando l’LCD è inizializzato, il controller HD44780 pulisce automaticamente il display; indipendentemente da ciò è opportuno eseguire un’istruzione di Clear subito dopo l’inizializzazione, operazione a seguito della quale il cursore si posiziona, automaticamente, nella prima posizione della prima riga.
LCD_Test_FW40 Esempo di firmware MikroC per il controllo di LCD 2x16 Dimostrazione di funzionamento di alcune funzioni di libreria —————————————————————————- Configurazione hardware: Controller: PIC16F877 Board: EastPIC5 Oscillatore: HS, 08.0000 MHz Display: LCD2x16 (HD44780) Modalità di interfacciamento: 4bit SW: MikroC 6.0 Bus dati: Diaplsy (D7..D4) <-> PIC (RB7..RB4) Bus controllo: RS Display <-> RB2 PIC; E Display <-> RB3 PIC —————————————————————————- char *text = “Firmware N.40”; void main() { LCD_Init(&PORTB); //Inizializzazione Delay_ms(6000); LCD_Cmd(LCD_CLEAR); //Clear display Delay_ms(6000); LCD_Cmd(LCD_CURSOR_OFF); //Turn cursor off Delay_ms(6000); LCD_Out(1,2,text); //visualizza testo riga 1 colonna 2 Delay_ms(6000); LCD_Out(2,1,”ES.LCD MikroC FW”); //Visualizza str. r2, c1 Delay_ms(6000); LCD_Out(1,1,”Tips’n tricks”); //Visualizza str. r1, c1 Delay_ms(6000); LCD_Out(2,1,” by A.Giannico “”); //Visualizza str. r2, c1 } End
Listato 1 |
E’ sempre utile disporre di una libreria per la gestione di moduli LCD. In questo caso si parla di microcontrollori PIC ma il discorso può essere ampliato anche ad altri.
È possibile contattare l’autore dell’articolo?
Salve Antonio, gli articoli pubblicati a nome “redazione” sono articoli passati della rivista Firmware che trattano argomenti ancora attuali. Se hai bisogno di informazioni in merito a questo articolo puoi inserire la tua richiesta nei commenti e la nostra redazione ti fornirà un feedback.
La scelta del microcontrollore da usare mi pare offra diverse alternative. Per un progetto che deve avere dimensioni contenute e costo ridotto all’osso, vorrei sapere ad esempio tra famiglia PIC e Atmel qual’è la scelta che consigliereste.