Display LCD comandato da PIC16F84Si tratta di uno dei primi progetti che ho realizzato quando ho cominciato ad utilizzare i microcontrollori, ma che ancora oggi uso molto spesso perchè in molte occasioni utilizzo i display. Il circuito e il firmware sono entrambi estremamente semplici, infatti lo schema circuitale è il seguente: La prima parte del codice è dedicata alle dichiarazioni, ossia viene indicato il modello del processore sul quale dovrà essere caricato il codice e la relativa libreria, vengono poi dichiarate delle costanti simboliche e successivamente riservato dello spazio per le variabili utilizzate dal programma. Appena dopo l'inizio del programma vero e proprio vengono impostate le funzioni dei singoli pin del microcontrollore, cioè se essi avranno la funzione di ingresso o di uscita. Poi c'è il ciclo principale, che non fa altro che scrivere all'infinito una stringa sul display. Ci sono poi alcune routine (o sottoprogrammi) che hanno delle specifiche funzioni quali inizializzare o pulire il display, inviargli comandi o dati, o produrre delay precisi per il corretto rispetto delle tempistiche di comando. Per l'alimentazione del circuito è necessaria una tensione stabilizzata di 5V (+/-10%) e di una tensione di circa -5V. Quest'ultima viene impiegata solamente per la regolazione del contrasto e può essere generata in vari modi (uno dei quali è impiegato ad esempio nella demoboard). Non tutti i display necessitano di una tensione negativa per la regolazione del contrasto e quindi, in quei casi, il punto contrassegnato con "-5V" potrà essere semplicemete connesso a massa. È importante utilizzare un quarzo da 4MHz perchè le tempistiche dei segnali sono calibrate in base alla durata dei cicli di clock. L'impiego di quarzi a frequenza maggiore è sconsigliabile, poiché il display potrebbe non riuscire a rilevare la procedura di inizializzazione e/o i caratteri da visualizzare. Se risultasse necessario aumentare la frequenza di clock si dovranno aumentare i ritardi inseriti per rispettare le tempistiche di comunicazione. Al contrario non dovrebbero esserci controindicazioni se si utilizzassero frequenze di clock inferiori a 4MHz. Nota sui display LCD compatibili con i miei progettiNon tutti i display LCD sono uguali! Quelli che uso io nei miei progetti (se non diversamente specificato) sono display LCD testuali, cioè che possono visualizzare solo caratteri alfanumerici (e pochi altri simboli). Ogni display è formato da una matrice di celle, ognuna delle quali può visualizzare un carattere. Esistono, ad esempio, display 1×8 (1 riga e 8 colonne), 1×16, 1×20, 2×16, 2×20, 4×16 eccetera. Questo tipo di display generalmente hanno al loro interno uno o più chip che si occupano di pilotare direttamente tutti i segmenti del display (tipicamente ogni carattere è formato da una matrice 5×8 di punti), la backplane e di ricevere in ingresso le informazioni riguardo ai caratteri da visualizzare e altre. I display che uso io montano un chip apposito, l'Hitachi HD44780 (oppure uno equivalente), il quale ha ormai costituito uno standard per i display alfanumerici. Dovrete perciò procurarvi un display compatibile con questo standard (io ne ho trovati a 5 euro nelle fiere di elettronica oppure in campo di recupero, ad esempio su alcune stampanti). Consiglio inoltre di prestare molta attenzione alla piedinatura dei display perchè non tutti utilizzano la stessa. In particolare alcuni presentano generalmente 16 pin anzichè 14, dove i 2 pin in più servono per poter collegare l'eventuale retroilluminazione. Siccome ho visto sia display con la retroilluminazione collegata ai pin 15 e 16, che display con retroilluminazione collegata ai pin 1 e 2, suggerisco di verificare accuratamente il collegamento. In ogni caso i 14 pin dedicati all'alimentazione e alla comunicazione rispettano sempre lo stesso ordine. Verificate dunque il reale pinout del vostro display e collegatelo in maniera opportuna. Siccome spesso ho faticato a trovare informazioni precise sullo standard di comunicazione adottato dal chip Hitachi, vi dò il link al datasheet dell'HD44780.
|