Mi sono arrivate alcune richieste in merito alla possibilità di scrivere su dispaly Lcd con Arduino, ho quindi iniziato qualche test in merito che oggi vorrei condividere con te. Come sempre consioglio di partire dal sito ufficiale Arduino per tutti i dubbi e gli approfondimenti.

Partiamo dalla scelta dell’Lcd: indipendentemente dal numero di caratteri e linee quello che più è importante è il tipo di processore e driver che il costruttore del tuo Lcd ha utilizzato, quello in figura è un display LCD 2×16 con driver Hitachi HD44780, è anche quello più utilizzato, ne ho trovati alcuni tra i componenti elettronici di recupero in mio possesso e tutti utilizzano il medesimo driver.
La prima cosa che ti interesserà sapere è come collegarlo, per questo è necessario distinguere i display di questo tipo in due categorie quelli a 14 contatti e quelli a 16 contatti,la differenza è che questi ultimi sono retroilluminati e la luminosità viene regolata agendo sul pin 15 e 16. Ecco la tabella dei collegamenti:
| Pin | Utilizzo |
| 1 | Vcc: +5v |
| 2 | Vss: GND – Massa |
| 3 | Vee: Contrasto |
| 4 | RS: indica il tipo di comando che inviamo, pin 12 di Arduino |
| 5 | R/W: indica all’lcd se deve scrivere o leggere – 0 scrivi 1 leggi |
| 6 | Enable (E): indica che i dati per la lettura, pin 11 di Arduino |
| 7 | DB0: linea dati 0, non usato |
| 8 | DB1: linea dati 1, non usato |
| 9 | DB2: linea dati 2, non usato |
| 10 | DB3: linea dati 3, non usato |
| 11 | DB4: linea dati 4 collegato al pin 5 di Arduino |
| 12 | DB5: linea dati 5 collegato al pin 4 di Arduino |
| 13 | DB6: linea dati 6 collegato al pin 3 di Arduino |
| 14 | DB7: linea dati 7 collegato al pin 2 di Arduino |
| 15 | Led+: terminale positivo per la retroilluminazione |
| 16 | Led-: terminale negativo per la retroilluminazione |
Avrai notato che i pin 7,8,9 e 10 sono indicati come non collegati, i dispaly di questo tipo posson essere pilotati con 4 o 8 bit, solitamente essi sono pilotati con 4 bit risparmiando pin di Arduino da destinare ad altri scopi, la differenza tra una modalità e l’altra è la velocità di trasferimento dell’informazione al display, non trovandoti in ambienti critici la modalità a 4 bit è sufficente ed ha il vantaggio appena descritto.
Ed ecco lo schema di collegamento classico dell’LCD al tuo Arduino:
Il potenziometro collegato al pin 3 dell’Lcd è di 10K e ti permette di regolare il contrasto del display, provandolo vedrai che ruotando il potenziometro da un estremo all’altro scompariranno i caratteri o saranno coperti dai punti, troppo evidenti, del display.
In questo collegamento non sono utilizzati i pin 15 e 16, non dovresti aver prblema a collegarli con un potenziometro da 10K anch’essi per regolare l’intensità della retroilluminazione.
Vediamo lo sketch, partiamo con il primo, classico e molto semplice “Hello Word” che trovi anche tra gli esempi del sito e dell’Ide. Il funzionamento è molto semplice perchè la comunità di sviluppo Arduino ha tra i suoi membri appassionati con voglia di condividere le proprie idee che hanno scritto e rilasciato sotto licenza Cretive Common la libreria LiquidCrystal.
Ed ecco lo sketch:
#include <LiquidCrystal.h>
// initialize the library with
// the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row,
// since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}
linea 1: includi la libreria LiquidCrystal.h che semplifica tutte le operazioni di scrittura sul display;
linea 5: inizializza l’oggetto lcd passandogli i pin a cui il display è collegato sul tuo Arduino, nel caso illustrato al pin 12 di Arduino è connesso il pin 4 del display (RS) al pin 11 di Arduino il pin 6 del display ed ai pin 2,3,4 e 5 sono connessi i pin lcd 14,13,12 e 11 come da schema;
linea 7: la funzione setup di Arduino serve a settare tutti i parametri di startup dello sketch;
linea 9: inizializzi il display vero e proprio indicando al metodo begin il numero di caratteri e righe, nell’esempio 16 cratteri e 2 righe, se sbagli i parametri otterai delle anomalie nella gestione come ad esempio inserendo 8 e 1 non potrai mai scrivere oltre l’ottavo carattere e mai sulla seconda riga;
linea 11: scrivi “hello, world!” sul display, come vedi è molto semplice, basta utilizzare il metodo print della classe liquidCrystal. La frase sarà scritta partendo dal primo carattere della prima riga del display;
linea 14: la funzione loop di Arduino è quella ciclicamente ripetuta dal processore drante tutto il ciclo di funzionamento dello sketch;
linea 18: sposta il cursore alla posizione carattere 0 della seconda riga (1) ricorda ch per Arduino la prima riga del display è la 0 e la seconda di consegueza è la 1;
linea 20: utilizzando nuovamente il metodo print puoi scrivere nella nuova posizione ciò che vuoi, nell’esempio ad ogni ciclo dello sketch viene aggiornato il valore in millisecondi/1000 dalla partenza dello sketch stesso, la prima riga non viene mai modificata.
Nei prossimi articoli ti mostrerò altri interessanti esempi di utilizzo dei display Lcd.
Buon lavoro







35 comments
2 pings
brisik
3 dicembre 2011 a 15:43 (UTC 2) Link to this comment
interessante articolo solo che io ho un display piu grande e ha 20 pin come faccio
Mauro Alfieri
5 dicembre 2011 a 18:48 (UTC 2) Link to this comment
Ciao Brisik,
che tipo di display possiedi? e che integrato utilizza ?
Se mi fornisci queste specifiche posso cercare di capire il problema e magarti darti qualche suggeriemnto utile a tutti.
Ciao
Mauro
Travis9011
2 gennaio 2012 a 04:04 (UTC 2) Link to this comment
Hai mai provato a modificare variabili visualizzate su display tramite pulsanti e salvarle nella eeprom? Sarebbe molto interessante…
Mauro Alfieri
2 gennaio 2012 a 12:18 (UTC 2) Link to this comment
Bellissima idea, che ne pensi di svilupparla, io posso pubblicare i tuo risultati una volta pronti e insieme ad altri appassionati di Arduino troveremo sicuramente un buon progetto da realizzare.
Ciao
LG
25 marzo 2012 a 18:15 (UTC 2) Link to this comment
Ciao a tutti! Ho inziato da pochi giorni a dilettarmi con Arduino, ho provato a montare il progetto da voi proposto però mi sono imbattuto in un inconveniente: il mio display 16×2 è un Zettler ACM1602B (http://www.zettlerelectronics.com/pdfs/lcds/ACM1602B.pdf) e ha una configurazione dei pin diversa da quella che voi presentate, sono riuscito a far variare l’illuminazione tramite il potenziometro ma non riesco a stampare caratteri! Qualcuno mi sa aiutare?
Mauro Alfieri
25 marzo 2012 a 20:40 (UTC 2) Link to this comment
Ciao LG,
mi puoi indicare il chip del tuo display?
Mauro
LG
25 marzo 2012 a 21:06 (UTC 2) Link to this comment
Mi cogli un pò impreparato anche perchè il display era contenuto in un kit Arduino quindi non so bene che specifiche abbia se non quelle del link che ho messo nell’ultimo post e il fatto che utilizza il controller HD44780 (se può essere di rilievo) purtroppo non sò altro anche perchè come avevo detto ho iniziato da poco con Arduino e non ho ancora dimistichezza purtroppo
Mauro Alfieri
25 marzo 2012 a 22:25 (UTC 2) Link to this comment
Ottimo, l’informazione di cui avevo bisogno è proprio quella che mi dai: HD44780.
Quindi tornando alla tua richiesta iniziale, ho osservato nuovamente il link che mi hai inviato è la piedinatura è compatibile con quell mostrata nella figura, c’è una differenza con l’elenco dei pin del mio LCD, riguarda i pin 1 e 2 che sono invertiti, il tuo deve rispettare il disegno, il pin 1 dell’LCD è massa, il pin 2 dell’LCD è la Massa ( GND )
Se ci sono cose che non ho compreso scrivimi cosa si verifica.
Mauro
LG
26 marzo 2012 a 19:07 (UTC 2) Link to this comment
Grazie della risposta, si i pin che hai indicato sono effettivamente invertiti però oltre a questo ho notato anche che i pin nel modello da te usato sono posti sulla parte superiore del display, nel mio caso sono sulla parte inferiore, inoltre (se non mi sbaglio) ciascun pin credo sia “simmetrico” rispetto al tuo display ma anche ricollegando tutto seguendo il datasheet del mio display con la configurazione che hai proposto tu non riesco a stampare nulla se non quadretti neri, ora sto facendo altre prove per vedere di risolvere il problema. Colgo l’occasione per complimentarmi del lavoro che svolgi per il tuo ben curato blog
Mauro Alfieri
27 marzo 2012 a 14:22 (UTC 2) Link to this comment
La posizione non è fondamentale, io non possiedo il display che vedi in figura, quella è solo una rappresentazione grafica, il mio ha i pin su due file da 8 laterali, ma poco importa.
Vicino ad un pin dovresti leggere il numero 1 o il 16, se hai individuato quelli per la retroilluminazione sei già a posto.
Mi dici che vedi quadratini neri, hai provato a ruotare il potenziometro per ridurre il contrasto? magari non è quello in ogni caso saprai se il potenziometro è connesso in modo corretto o meno.
Attendo il risultato delle tue prove.
Ciao
iw2eux
24 aprile 2012 a 17:33 (UTC 2) Link to this comment
Ho lo stesso problema di LG, anche io con un ACM1602B, l’LCD ha questi pin + – 1 2 3 4 5 6 7 8 9 10 11 12 13 14. Mi si illumina di scuro solo una riga, nessun carattere viene stampato e il potenziometro funziona.
Avete consigli ?
Grazie Luciano
gpisto
11 maggio 2012 a 14:39 (UTC 2) Link to this comment
Ho appena collegato un ACM1602B della zetler seguendo lo schema indicato. tutto funziona alla perferzione. bisogna solo stare attenti alla numerazione della piedinatura.
Mauro Alfieri
11 maggio 2012 a 19:03 (UTC 2) Link to this comment
Ottimo, se vuoi condividere la tua esperienza con altri appassionati inviami qualche foto/schema e due righe .. magari sul tuo progetto.
Mauro
Saverio
5 giugno 2012 a 19:31 (UTC 2) Link to this comment
Salve,ho iniziato da poco a lavorare con arduino, come alcuni sopra, anche io ho problemi collegare il modello ACM1602B della zettler electronic, il mio LCD addirittura non si accende e non capisco come mai, avendo rispettato lo schema e avendo fatto le dovute inversioni! Qualcuno potrebbe aiutarmi magari allegando una foto? è possibile che il mio display sia uscito difettoso? grazie in anticipo!!
Mauro Alfieri
5 giugno 2012 a 20:22 (UTC 2) Link to this comment
Guardando il datasheet: http://www.azdisplays.com/PDF/acm1602b.pdf il collegamento è identico a quello mostrato nell’articolo a meno dei primi due pin:
il pin 1 è la massa ( GND ) ed il pin 2 è il positivo ( +5v ); tutti gli altri collegamenti sono identici.
I pin 15 e 16 servono alla retroilluminazione dove 15 è – e 16 è +;
Spero di poter essere stato di aiuto a te ed anche ad altri, purtroppo non possedendo questo tipo di display non posso fare esperimenti, se qualcuno abita vicino a Milano e volesse prestarmene uno per i test potrei fornirVi maggiori dettagli.
Mauro
Daniel
14 giugno 2012 a 17:28 (UTC 2) Link to this comment
Ciao, sto facendo alcune prove con Arduino Leonardo + motor shield r3 + LCD: si verifica che lo schermo va in tilt (scritte a caso, lampeggia, si oscura…). Mi pare di capire che il problema riguardi i pin, alcuni dei quali utilizzati sia dalla shield e sia da LCD. Ho provato ad assegnare alcuni pin liberi all’LCD: la cosa migliora ma non sono sicuro del risultato. I pin si possono assegnare liberamente per l’LCD o bisogna per forza rispettare l’impostazione “LiquidCrystal lcd(12, 11, 5, 4, 3, 2);”? Ci sono alternative? Se il problema sono i pin, si può usare un’altro tipo di schermo? Quello che ho adesso è come quello del tuo articolo… grazie per l’aiuto
Mauro Alfieri
14 giugno 2012 a 20:04 (UTC 2) Link to this comment
Ciao Daniel penso tu abbia colto nel segno.
I comportamenti anomali sono certamente dovuti all’uso di quei pin da parte della shield, io ho utilizzato nei miei artivoli sul dolly una motor shield Fe che ti permette di variare i pin usati dalla shield con dei jumper.
In ogni caso proprio quando inizializzi la classe LCD i pin che specifici sono quelli che vuoi usare, puoi cambiarli come a te viene più comodo.
Leggi i miei articoli sul Dolly ed LCD, ne usciranno a breve altri, sicuramente ti chiarirammo molto le idee per il tuo progetto.
Mauro
Rambod
14 giugno 2012 a 23:36 (UTC 2) Link to this comment
Ciao,
io ho un LCD ACM1602B della ZETTLER, ho collegato tutto seguendo gli schemi dei miei pin sull’LCD correttamente, riesco solamente a controllare l’illuminazione, e mentre vario l’illuminazione vedo dei quadretti neri che appaiono e scompaiono! Ma mai nulla di concreto! Qualcuno può darmi una mano?
Mauro Alfieri
14 giugno 2012 a 23:56 (UTC 2) Link to this comment
Ciao Rambod,
sei fortunatissimo, domattina pubblico un tutorial proprio sull’LCD ACM1602B.
Mauro
Stefano
27 gennaio 2013 a 10:05 (UTC 2) Link to this comment
Salve e ciao, mi chiamo stefano e sono un neofita purissimo (per quanto le mie reminiscenze scolastiche di elettrotecnica siano alquanto arruginite). Ovviamente mi è arrivato da poco un Arduino kit discretamente fornito. Un paio di aiutini per favore: volevo provare ad accendere il mio lcd 16×2 (displaytech 162b l’unica dicitura che son riuscito a scovare). Nello schema usi un potenziometro..che ovviamente non ho (ne ho uno slider ma non so come collegarlo), posso fare anche senza?? Secondo problemino: nel kit ho solo jumper intestati ai capi con connettore maschio, come faccio a “dividere” il filo?? (chiedo scusa per le mie espressioni arcaiche) mi spiego meglio: il fil nero che esce dal potenziometro nel tuo sketch qui sopra si divide uno in arduino e uno per l’ lcd, come posso risolvere con i miei jumper?? Ho quasi paura che dovrò fare un ulteriore acquisto di materiale SOB
Grazie
Stefano
Mauro Alfieri
28 gennaio 2013 a 07:49 (UTC 2) Link to this comment
Ciao Stefano,
ti iuto volentieri, mi indici quale kit arduino hai acquistato? Così controllo la lista dei materiali presenti.
Per LCD, se é un kit ufficiale, l’importante é la piedi natura del display che deve essere nel kit.
Lo slider é un potenziometro a tutti gli effetti ha 3 pin: 1 va al +5v, 1 va al Gnd e il centrale, quello che varia resistenza variando la leva va all’LCD.
Per sdoppiare i cavi usa un breadboard.
Mauro
stefano
28 gennaio 2013 a 15:56 (UTC 2) Link to this comment
Ciao Mauro,
Possiedo un lcd “phico d-0 94v-0″ 16X1 . Il mio poblema persiste nel fatto che riesco a visualizzare solo i primi otto caratteri mentre gli altri nemmeno si accendono con gli usuali quadretti neri. Avendo già cambiato il parametro “lcd.begin” non camiba nulla . Mi puoi aiutare?…:)
Mauro Alfieri
29 gennaio 2013 a 07:41 (UTC 2) Link to this comment
Ciao Stefano, non conosco il tuo LCD, prova a verificare nel datasheet che sia pilotabile con soli 4 bit ( 4 fili ) e come debbano essere collegati.
Mauro
davide
22 febbraio 2013 a 20:29 (UTC 2) Link to this comment
ciao mauro, secondo te questo lcd può funzionare a 4 bit?
MTC-20201X
perche mi si accende solo la prima riga e non scrive niente.
grazie ciao
Mauro Alfieri
22 febbraio 2013 a 21:40 (UTC 2) Link to this comment
Ciao Davide,
ho cercato in internet il produttore e penso di avelo trovato, dal datasheet (http://www.microtipsusa.com/pdfs/products/Character/NMTC-S20201XRGHS.pdf) semrea che possa lavorare sia a 4 sia a 8 bit.
Probabilmente le istruzioni inviate al display non sono quelle compatibili con l’LCD della libreria LiquidCrystal di arduino, devi cercare una libreria per quel chip.
Mauro
BBf
23 febbraio 2013 a 14:44 (UTC 2) Link to this comment
Ciao a tutti! Ho inziato da pochi giorni a dilettarmi con Arduino,il mio display è Display LCD 16×2 – RGB – Positivo comprato qui. http://www.robot-italy.com/it/lcd-display-16×2-rgb-positivo.html
Ho già collegato il dispositivo al mio arduino uno utilizzando un potenziometro come nel esempio qui in alto funziona solo che vorrei sapere di preciso come collegare gli altri piedini per avere la luce blu con lettere bianche??.
ecco a voi il mio datasheet
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/LCD/Monochrome/ADM1602K-FS%28RGB%29-FBW.pdf
se non riuscite a visualizzarlo potete trovarlo sul sito dal quale o comprato il display con link scritto in precedenza. inoltre se e posssibile sarebbe meglio avere uno schema elettrico o di montaggio come quello she ce gia sopra con l’aggiunta di questa informazione. Grazie in anticipo a chi risponde.
Mauro Alfieri
25 febbraio 2013 a 11:14 (UTC 2) Link to this comment
Ciao Luigi,
leggendo sul sito da cui hai acquistato ho trovato:
Note: The backlight is controlled by pins 18, 17, and 16.
E nel datasheet riporta il 15 come catodo della retroilluminazione e 16,17,18 come anodo dell’RGB.
Se hai difficoltà a pilotarli ti consiglio di chiedere al sito da cui hai acquistato se esiste un modo per pilotare facilmente i pin.
Sembra un buon prodotto, non l’ho mai provato e quindi non so darti più aiuto.
Mauro
Giovanna
29 marzo 2013 a 20:06 (UTC 2) Link to this comment
Ciao,
io ho un LCD BMX-01 E226252 , ho collegato tutto seguendo gli schemi dei pin. Pur controllando con il multimetro che ci sia continuità nel circuito riesco a visualizzare dei quadratini neri solo andando a premere sul display. Fattò ciò riesco anche a controllare l’illuminazione,ma mai nessun carattere. Qualcuno mi può aiutare?
Mauro Alfieri
30 marzo 2013 a 09:01 (UTC 2) Link to this comment
Ciao Giovanna,
il display non lo conosco hai un link al datasheet che posso consultare?
Mauro
Giovanna
31 marzo 2013 a 00:23 (UTC 2) Link to this comment
Purtroppo non sono riuscita a trovare il datasheet in rete..la cosa strana è che per vedere almeno i quadratini neri devo fare pressione sul lato sinistro del display..potrebbe essere danneggiato?
Mauro Alfieri
1 aprile 2013 a 09:31 (UTC 2) Link to this comment
Ciao Giovanna,
la pressione sul display evidenzia i quadratini perché comprimi i cristalli dell’LCD, probabilmente lo hai alimentato in modo non corretto o il contrasto é impostato male.
Senza Datasheet é difficile collegare un display in modo corretto e procedere per prove successive potrebbe danneggiare il display.
Ho trovato in rete questo:
http://www.ece.msstate.edu/classes/ece4723/dissect/040293027582/productA.html
C’è un Data Sheet di un display che dovrebbe essere simile al tuo, controlla che ti coincidano i pin.
Mauro
mario
12 aprile 2013 a 10:37 (UTC 2) Link to this comment
Salve, ho lo stesso display di Giovanna e la stesso problema di mancanza di un Datasheet. Il link indicato nella risposta precedente mi è stato utile per capire innanzitutto che l’alimentazione va data a 3.3V e non a 5V. Ora ho il seguente problema: con la configurazione in figura e lo sketch mostrato sopra il display si illumina, la regolazione del contrasto col potenziometro funziona ma l’unica cosa visualizzata è una riga di quadratini neri. Forse il display non supporta la comunicazione su 4 bit? Qualcuno mi può aiutare? Grazie
Mauro Alfieri
12 aprile 2013 a 11:44 (UTC 2) Link to this comment
Ciao Mario,
dal datasheet sembra che questo display supporti senza problemi i 4bit.
Da esperienza potrebbe essere dovuto ad un inversione sui pin enable, rs, r/w oppure un collegamento errato sui D4-D7.
Mauro
Alessandro
28 aprile 2013 a 18:34 (UTC 2) Link to this comment
Ciao! sto iniziando a fare le prime prove con Arduino, ho provato ad installare un Display LCD; ho riscontrato lo stesso problema di molti..ovvero funziona l’illuminazione, la retroilluminazione ma non riesco ad vedere i caratteri..ho cercato su internet il displey che ho (ADM1602K-NSW-FBS/Z), credo sia questo il datasheet https://www.sparkfun.com/datasheets/LCD/ADM1602K-NSW-FBS-3.3v.pdf, solo che non riesco ancora a farlo funzionare..perchè non capisco cosa debba fare..
Mauro Alfieri
29 aprile 2013 a 07:59 (UTC 2) Link to this comment
Ciao Alessandro,
controlla i collegamenti dei pin, il 90% degli errori é dovuto ad un errato collegamento di RS,Enable,ecc…
Mauro
Mauro Alfieri » Blog Archive » Tutorial: Arduino scritte scorrevoli su Lcd
9 novembre 2011 a 22:42 (UTC 2) Link to this comment
[...] collegare il display ad Arduino come mostrato in questo articolo e ruota il cursore del potenziomentro fino a vedere i caratteri sullo [...]
Tutorial: LCD ACM1602B con Arduino » Mauro Alfieri
15 giugno 2012 a 08:55 (UTC 2) Link to this comment
[...] World” dell’IDE Arduino, la descrizione dello sketch puoi leggerla in un mio precedente articolo, ecco [...]