«

»

nov 04

Tutorial: Arduino scrive su un Lcd

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.

lcd 2x16

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:

Schema di collegamento Lcd e 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

Important!


Ti è stato utile questo articolo?
Sostienimi cliccando sugli sponsor, io potrò continuare ad acquistare materiale per scrivere articoli e aiutarti nei tuoi progetti.

Basta un solo click al giorno.

Be Sociable, Share!

35 comments

2 pings

  1. brisik

    interessante articolo solo che io ho un display piu grande e ha 20 pin come faccio

    1. Mauro Alfieri

      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

  2. Travis9011

    Hai mai provato a modificare variabili visualizzate su display tramite pulsanti e salvarle nella eeprom? Sarebbe molto interessante…

    1. Mauro Alfieri

      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

  3. LG

    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?

    1. Mauro Alfieri

      Ciao LG,
      mi puoi indicare il chip del tuo display?

      Mauro

  4. LG

    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

    1. Mauro Alfieri

      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

  5. LG

    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

    1. Mauro Alfieri

      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

  6. iw2eux

    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

  7. gpisto

    Ho appena collegato un ACM1602B della zetler seguendo lo schema indicato. tutto funziona alla perferzione. bisogna solo stare attenti alla numerazione della piedinatura.

    1. Mauro Alfieri

      Ottimo, se vuoi condividere la tua esperienza con altri appassionati inviami qualche foto/schema e due righe .. magari sul tuo progetto.

      Mauro

  8. Saverio

    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!!

    1. Mauro Alfieri

      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

  9. Daniel

    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

    1. Mauro Alfieri

      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

  10. Rambod

    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?

    1. Mauro Alfieri

      Ciao Rambod,
      sei fortunatissimo, domattina pubblico un tutorial proprio sull’LCD ACM1602B.

      Mauro

  11. Stefano

    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

    1. Mauro Alfieri

      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

  12. stefano

    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?…:)

    1. Mauro Alfieri

      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

  13. davide

    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

    1. Mauro Alfieri

      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

  14. BBf

    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.

    1. Mauro Alfieri

      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

  15. Giovanna

    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?

    1. Mauro Alfieri

      Ciao Giovanna,
      il display non lo conosco hai un link al datasheet che posso consultare?

      Mauro

      1. Giovanna

        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?

        1. Mauro Alfieri

          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

          1. mario

            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

          2. Mauro Alfieri

            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

  16. Alessandro

    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..

    1. Mauro Alfieri

      Ciao Alessandro,
      controlla i collegamenti dei pin, il 90% degli errori é dovuto ad un errato collegamento di RS,Enable,ecc…

      Mauro

  1. Mauro Alfieri » Blog Archive » Tutorial: Arduino scritte scorrevoli su Lcd

    [...] collegare il display ad Arduino come mostrato in questo articolo e ruota il cursore del potenziomentro fino a vedere i caratteri sullo [...]

  2. Tutorial: LCD ACM1602B con Arduino » Mauro Alfieri

    [...] World” dell’IDE Arduino, la descrizione dello sketch puoi leggerla in un mio precedente articolo, ecco [...]

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>