Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
CONTATTAMI - RSS
Social network: Twitter - Google+ - Facebook - YouTube - Flickr - LinkedIn - Slideshare - Edmodo
Michele Maffucci
my stories, life and work
In questi giorni sto realizzando con alcuni allievi della mia classe 5 un misuratore di temperatura che utilizza un
display LCD 162 (16 colonne e 2 righe) compatibile con i driver dellHitachi HD44780. Poich la quantit di
collegamenti elevata ho deciso di realizzare questo post per non dimenticare ed avere traccia per le future
realizzazioni in classe, in modo che possa essere di riferimento per gli allievi.
Per qualsiasi dettaglio fate riferimento al tutorial che trovate sul sito Arduino.cc: LiquidCrystal Hello World!
Per poter pilotare il display avete necessit di utilizzare la libreria LiquidCrystal.h che vi permette di comunicare
in modalit 4 bit o 8 bit, questo vuol dire che per la trasmissione dati possono essere utilizzate 4 o 8 linee di
controllo a queste si aggiungono le due linee di controllo: Register Select (RS) e Enable (E) e alla linea opzionale
Read/Write (RW).
In classe ho utilizzato la modalit a 4 bit, la stessa del tutorial sul sito Arduino, ci comporta lutilizzo di 6 uscite
digitali sulla scheda Arduino.
Disponiamo di una serie di display economici: Xiamen GDM 1602K (seguite il link per prelevare il datasheet).
Dallimmagine tratta dal datasheet, notate che il display dotato di 16 pin e la numerazione parte da sinistra.
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 2 di 11
Ricordate che la piedinatura di questi display comune alla maggior parte degli LCD 16 x 2 standard Hitachi
HD44780, ma potreste trovare qualche variazione tipicamente accade per i pin 15 e 16 che potrebbero essere al
posto dei pin 1 e 2 (non il caso di questo display).
In ogni caso come potete vedere dalle fotografie (sopra) il display reca sul lato piste, una legenda con il riferimento
piedino -> funzione quindi, non potete sbagliarvi.
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 3 di 11
Pin 7 al Pin 14: linee dati che si inviano o si ricebono dai registri del display. Un valore HIGH (H) indica
scrittura (WRITE) del bit nel registro del display, un valore LOW (L) indica un valore letto (READ) da un
registro.
Pin 15: A (Anodo) piedino a cui collegare una tensione positiva (nel caso del display descritto +4,2V) che
serve per la retroilluminazione del display.
Pin 16: K (Catodo) piedino da collegare a GND per consentire la retroilluminazione.
I collegamenti realizzati sono identici a quelli che trovate sul tutorial: LiquidCrystal Hello World! dove al
posto del potenziometro abbiamo utilizzato un trimmer:
Codice:
01. /*usodeldisplayLCD16x2standardHitachiHD44780
02.
03. Circuito:
04. *pinRScollegatoalpindigitale12
05. *pinE(Enable)collegatoalpindigitale11
06. *pinD4collegatoalpindigitale5
07. *pinD5collegatoalpindigitale4
08. *pinD6collegatoalpindigitale3
09. *pinD7collegatoalpindigitale2
10. *pinR/WcollegatoalGND
11. *pin1epin4collegatiaGND
12. *pin2collegatoa+Vcc
13. *centraledelpotenziometro/trimmerda10KOhmcollegatoalpin3del'LCD
14. *pinSXpotenziometro/trimmercollegatoa+Vcc
15. *pinDXpotenziometro/trimmercollegatoaGND
16. *ipinSXeDXdelpotenziometro/trimmerpossonoessereinterscambiati
17. */
18.
19. //includerelalibreria:
20. #include<LiquidCrystal.h>
21.
22. /*
23. Vienecreatal'istanzadell'oggettoLiquidCrystalchiamatalcdincui
24. sonoindicatiipindell'LCDcollegatialleuscitedigitalidiArduino
25. */
26. LiquidCrystallcd(12,11,5,4,3,2);
27.
28. voidsetup(){
29. //impostiamoilnumerodicolonneedilnumerodirighedilcd
30. lcd.begin(16,2);
31. //Visualizzoilmessaggiosuldisplay
32. lcd.print("Salvemondo!");
33. }
34.
35. voidloop(){
36. //posizionailcursoreincolonna0elinea1
37. //(nota:lalinea1elasecondalinea,poichsicontaincominciandoda0):
38. lcd.setCursor(0,1);
39. //stampailnumerodisecondidall'ultimoreset
40. lcd.print(millis()/1000);
41. }
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 4 di 11
Nel caso in cui colleghiamo il Pin 15 a +5V e il Pin 16 a GND abbiamo la retroilluminazione:
Articoli simili:
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 5 di 11
Alessio scrive:
marzo 20, 2012 alle 2:59 pm
Bella spiegazione, e dato che ho Luigino con un termistore per leggere la Temperatura mi piacerebbe sapere cosa si deve
cambiare nel codice per la visualizzazione dei dati sul display. Grazie.
Rispondi
alessandro scrive:
maggio 3, 2012 alle 11:05 pm
ciao!
interessante come applicazione! appena mi arriva il display provo!
una osservazione, compilando e testando sui simulatori ho dovuto modificare le prime due righe come segue, anche nel wiki
sembra si faccia cos:
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
admin scrive:
maggio 4, 2012 alle 7:07 am
Ciao Alessandro.
Ma non gi cos?
...
#include
/*
Viene creata l'istanza dell'oggetto LiquidCrystal chiamata lcd in cui
sono indicati i pin dell'LCD collegati alle uscite digitali di Arduino
*/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
...
Fammi sapere.
Saluti.
Rispondi
alessandro scrive:
maggio 4, 2012 alle 9:09 am
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 6 di 11
Ciao!
un probabile refuso della piattaforma che usi per il blog infatti ho riportato anche io pari pari lo stesso
errore
il richiamo alla libreria il seguente:
manca infatti la dicitura LiquidCrystal.h allinterno dei simboli minore e maggiore. anche facendo un copia
incolla questo pezzo della riga non viene copiato
probabilmente il blog lo interpreta come un qualche tipo di comando riservato o commento non
visualizzabile
Rispondi
admin scrive:
maggio 4, 2012 alle 10:05 am
Si hai ragione tu ho verificato adesso WordPress si ostina a non scrivermi largomento dellinclude,
perdonate cerco di sistemare.
Rispondi
admin scrive:
maggio 4, 2012 alle 10:15 am
Si ho verificato il plug-in Google Syntax Highlighter for WordPress che mi crea qualche problemino ora dovrebbe vedersi
#include <liquidcrystal.h> noto che allinterno delle parentesi angolari non vengono accettate le maiuscole e il testo non
compare in questo modo: <LiquidCrystal.h>.
Il problema legato allinterpretazione dei codici escape delle parentesi angolari.
Scusatemi ancora vedo di trovare nel breve una soluzione.
Grazie per la segnalazione, se trovate altri errori di visualizzazione fatemi sapere che correggo.
Saluti.
Rispondi
MAURIZIO scrive:
maggio 14, 2012 alle 8:54 pm
Paolo scrive:
luglio 25, 2012 alle 1:22 pm
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 7 di 11
admin scrive:
luglio 25, 2012 alle 1:42 pm
Ciao Paolo.
Dai uno sguardo ai commenti. Ho notato che in certe occasioni che il plug-in Google Syntax Highlighter for
WordPress ho qualche problemino.
Io sto usando Safari e Google Chrome sotto Mac e vedo tutto ok, fammi sapere cosa stai usando tu cos cerco di
capire.
Fammi sapere.
Albe scrive:
agosto 20, 2012 alle 4:54 pm
messi scrive:
gennaio 29, 2013 alle 3:32 pm
admin scrive:
febbraio 15, 2013 alle 12:59 am
Ciao.
Lerrore dipende dal fatto che la dichiarazione stata fatta in questo modo:
con gli spazi tra la parentesi angolare < e la L e tra la h e la parentesi angolare >
Se nel tuo sketch togli gli spazi tutto funziona.
Scusami tanto.
Saluti.
Rispondi
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 8 di 11
Gabriele scrive:
febbraio 19, 2013 alle 4:24 pm
Grazie mi e stato molto utile poiche con altri tutotial non capivo perche non si vedesse nulla, poi ho letto questo:
Nel caso in cui colleghiamo il Pin 15 a +5V e il Pin 16 a GND abbiamo la retroilluminazione:
GRAZIE!
Rispondi
admin scrive:
febbraio 25, 2013 alle 9:13 am
Ciao Gabriele.
mario scrive:
aprile 10, 2013 alle 11:00 pm
salve, volevo sapere da cosa dipende il numero di data bus line utilizzati. nei vari tutorial trovati in giro (compreso questo) ne
vengono usati sempre 4. Perch?
Rispondi
admin scrive:
aprile 16, 2013 alle 11:05 am
Ciao Mario.
Negli esempi che trovi on-line, come giustamente hai notato, non trovi collegati i pin che vanno
dal 7 al 10.
Il display pu essere collegato usando 4 o 8 pin per il trasferimento dati. Collegando solamente 4 pin lasciamo liberi 4
pin di Arduino per altri scopi. Utilizzando 8 pin le prestazioni migliorano, ma non cos tanto da giustificare la perdita
di 4 pin in pi su Arduino.
Ricorda che lintero dato costituito da 8 bit e se la modalit che hai scelto trasferimento a 4 bit, saranno utilizzati
solo i pin dal DB7 al DB4 e quindi dovrai effettuare due trasferimenti. Se ad esempio devi inviare il dato 10011101,
verr inviato prima 1001 e poi 1101.
Ciao.
Rispondi
antonio scrive:
settembre 27, 2013 alle 10:07 pm
admin scrive:
settembre 29, 2013 alle 10:15 am
Ciao Antonio.
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 9 di 11
Va bene un potenziometro da 10KOhm. Se usi un potenziometro con valore superiore (ad es. da 47KOhm) funziona
ugualmente, solo che per arrivare alla piena luminosit non arriverai a piena rotazione del potenziometro.
Saluti.
Rispondi
antonio scrive:
settembre 29, 2013 alle 4:48 pm
Ciao michele
Sono nuovo
Ma se uno volesse pilotare 2 lcd con lo stesso atmega328 i punti in comune sono le alimentazioni , la retroilluminazione i vari
segnali ad eccezione delpin 4 che dovrebbe abilitare la scrittura sul lcd giusto ?
E poi dichiarare i due lcd
Lcd1.begin.
Lcd.begin.
Potrebbe funzionare?
E corretto
Rispondi
Paolo scrive:
dicembre 22, 2013 alle 9:31 pm
Ottima spiegazione.
Hai esperienza con arduino uno ed il Display Nokia 5110. Io ho uno acquistato un display da SparkFun e non riesco a farlo
funzionare in nessun modo.
Ho provato ad seguire le indicazioni sul sito che riporta anche lo schema elettrico
e un programma per farlo funzionare,ma senza risultati.
Molti suggeriscono di usare lo schema sul sito di Adafruit, ma nonostante luso delle librerie adafruit , non sono riuscito a
concludere niente.
Aggiungo che riesco ad istallare le librerie, che devono essere rinominate per poter esser richiamate da ide di arduino, ma
non serve a niente.
Non riesco a capire perch il display non funziona .
Potresti aiutarmi?
Grazie
Paolo
Rispondi
Marco scrive:
aprile 23, 2014 alle 12:14 am
Ciao, voglio farti i complimenti per il blog, il tuo lavoro e la tua bravura nello spiegare i vari argomenti, grazie a te sono
riuscito a imparare ad utilizare questa stupenda piattaforma, grazie, voglio chiederti un informazione riguardo il controllo
dello schermo lcd, nel mio progetto sullo scermo nella prima linea viene scritto in che menu sono cambiandolo tramite un
pulsante e qui si presentato il problema che un nome del menu pi corto di altri e quindi non viene riscritto tutto lo
scermo e rimangono gli ultimi caratterei della scritta prima, ho risolto mettendo degli spazi nella scritta pi corta in modo
che vanno a riscrivere le lettere degli altri menu, per nella seconda riga ci sono dei valori numerici che cambiano da menu a
menu e che aumentano e diminuiscono , tipo in un menu ho 4000 e in quello dopo ho 180, ma essendo che uso una cifra in
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 10 di 11
meno lultimo 0 non sparisce e visivamente ho 1800 e non 180, come posso fare ad ovviare al problema? il valore a 4000 pu
scendere anche sotto 999 quindi andando a perdere un numero che non viene riscritto.
Spero in una tua risposta con una soluzione al mio problema.
Rispondi
FeedTheMario scrive:
gennaio 12, 2015 alle 5:13 pm
Sebastiano scrive:
aprile 30, 2014 alle 8:43 pm
Grazie
Sebastiano
Rispondi
Avviene la stessa cosa anche a me. Qualcuno sa perch la lettera O mette in crisi il display?
Rispondi
Angelo scrive:
aprile 30, 2014 alle 11:42 pm
Ciao a tutti,
io ho eseguito tutti i collegamenti tranne la retroilluminazione. Configurazione a 4 bit.
Con il potenziometro riesco a regolare il contrasto, per ho un problema.
Non riesco a stampare sul LCD. Mi rimangono sempre e solo i rettangoli neri, con contrasto variabile.
Lo stesso codice stampa sia su seriale che su lcd.
Su seriale funziona ma su lcd no.
Il codice quello standard di questo tutorial solo con laggiunta della stampa in seriale.
Cosa sbaglio?
Rispondi
Angelo scrive:
maggio 1, 2014 alle 9:15 am
Ho risolto il mio problema. Il pin R/W(5), che la guida consiglia di collegarlo a massa, lho collegato ad un pin
digitale e lo faccio gestire allarduino,
LiquidCrystallcd(12,10,11,7,6,5,4);
//LiquidCrystal(rs,rw,enable,d4,d5,d6,d7)
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017
Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 11 di 11
Ora per ho un problema, i caratteri sono tutti strani, tipo $|+(poi quadrato nero) e si ripete.
Da cosa potrebbe dipendere?
Rispondi
Davide scrive:
ottobre 19, 2014 alle 11:13 am
ciao!
prima di tutto ti volevo ringraziare molto per i tutorial che fai perch mi aiutano sempre davvero tanto! vorrei farti una
domanda..
io ho avuto qualche problemino a saldare i contatti sul display e forse lho pure rovinato perch ora visualizza solo quadrati
neri.. ma nelle tue foto vedevo che hai collegato il display e la breadboard in modo diverso, inserisci i cavi direttamente nel
display! mi spieghi per favore cosa usi?
Grazie mille
Rispondi
Quest'opera distribuita con licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0 Italia
Michele Maffucci
Motore utilizzato WordPress.
http://www.maffucci.it/2012/02/17/appunti-su-arduino-pilotare-un-display-lcd/ 20/03/2017