Sei sulla pagina 1di 11

Appunti su Arduino: pilotare un display LCD | Michele Maffucci Pagina 1 di 11

CONTATTAMI - RSS
Social network: Twitter - Google+ - Facebook - YouTube - Flickr - LinkedIn - Slideshare - Edmodo

Michele Maffucci
my stories, life and work

Appunti su Arduino: pilotare un display LCD


Pubblicato il febbraio 17, 2012 da admin

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

Nella tabella allegata trovate le funzioni di ogni piedino.

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.

Funzione dei piedini

Pin 1: Vss collegato al GND


Pin 2: VDD collegato a +5V
Pin 3: V0 controllo del contrasto dei caratteri. In genere viene collegato ad un potenziometro o trimmer in
configurazione partitore di tensione in modo che possiate applicare sul Pin 3 una tensione che varia da 0 a +5V
e al variare della tensione varia il contrasto.
Pin 4: RS segnale di selezione registro per selezionare il registro nel quale registrare ci che appare sul
display oppure selezionare il registro di funzionamento in cui viene memorizzata di volta in volta listruzione
da eseguire per il funzionamento dellLCD
Pin 5: segnale Read/Write per selezionare la modalit di funzionamento: lettura/scrittura collegato a GND
Pin 6: segnale Enable (E) per abilitare la scrittura nei registri

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:

view plain copy to clipboard print ?

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

Non sono presenti articoli simili.

Questa voce stata pubblicata in arduino, i miei allievi. Contrassegna il permalink.

28 risposte a Appunti su Arduino: pilotare un display LCD

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);

ti torna o un mio abbaglio?


grazie ancora!
Rispondi

admin scrive:
maggio 4, 2012 alle 7:07 am

Ciao Alessandro.
Ma non gi cos?

Lunica differenza laggiunta del commento:

...
#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);
...

ho inteso male io?

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:

#include (simbolo minore) LiquidCrystal.h (simbolo maggiore)

// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

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

SALVE MI STO DOCUMENTANDO IN RELAZIONE AL PILOTAGGIO DEI DISPLAY


E MI CHIEDO SE ARDUINO PUO PILOTARE UN DISP 4 RIGHE 16 CARATTERI E SE SI, VORREI UN ESEMPIO PER
SCRIVERE DEI TESTI DIVERSI NELLE VARIE POSIZIONI UTILIZZANDO COME COMANDO DIVERSI PIN DI INPUT,
GRAZIE IN ANTICIPO
Rispondi

Paolo scrive:
luglio 25, 2012 alle 1:22 pm

nel codice ci sono problemi

#include e non #include


da eliminare!
Ora provo!
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 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.

La sintassi corretta : #include (simbolo minore) LiquidCrystal.h (simbolo maggiore).

Io sto usando Safari e Google Chrome sotto Mac e vedo tutto ok, fammi sapere cosa stai usando tu cos cerco di
capire.

Per copiare il codice fai click su: view plain e copia.

Fammi sapere.

Grazie per la segnalazione.


Rispondi

Albe scrive:
agosto 20, 2012 alle 4:54 pm

Quele la marca/modello del display lcd? Che tipo di lcd (Transflessivo)?


Vorrei sapere se quando si spegne la retroilluminazione il display si legge corettamente oppure necessaria la
retroilluminazione?
Rispondi

messi scrive:
gennaio 29, 2013 alle 3:32 pm

non mi carica il programma mi da errore : LiquidCrystal lcd (12,.);


mi dice che lcd non dichiarato per piacere aiutatemi ok???
Rispondi

admin scrive:
febbraio 15, 2013 alle 12:59 am

Ciao.

Lerrore dipende dal fatto che la dichiarazione stata fatta in questo modo:

#include < LiquidCrystal.h >

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.

E' un problema che ho con il plug-in di WordPress che viusalizza il codice.

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.

Si corretto ci che dici.


Saluti.
Rispondi

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.

Perdona il ritardo con cui ti rispondo.

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.

Quindi la scelta delluso di soli 4 pin puramente di risparmio.

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

il potenziometro di quanti OHM deve essere??? scusa la domanda ignorante


Rispondi

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

grazie per laiuto scusi il disturbo


grazie
Rispondi

Armando Manno scrive:


dicembre 19, 2013 alle 11:10 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

Fai cos, metti prima della prima scrittura lcd.print( );


Io di solito risolvo cos
Rispondi

Sebastiano scrive:
aprile 30, 2014 alle 8:43 pm

Ciao e grazie per gli utili consigli !


Ho un problema quasi incredibile (almeno per me )
Mi funziona tutto ma se tento di visualizzare il carattere O (maiuscolo o minuscolo) il display va in tilt (visualizza una serie
di caratteri strani o addirittura niente) !
Se tento di visualizzare la stringa ABCDEFGHIJKLMNPQ funziona, se invece la stringa ABCDEFGHIJKLMNOP non
funziona pi niente
Hai qualche idea in proposito ?

Grazie

Sebastiano
Rispondi

Gian Maria scrive:


dicembre 5, 2014 alle 2:07 pm

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

CONTATTAMI - RSS - COOKIE POLICY


Social network: Twitter - Google+ - Facebook - YouTube - Flickr - LinkedIn - Slideshare - Edmodo

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