1. A breve aggiorneremo la piattaforma di Reboot per risolvere alcuni problemi con i plug-in, quindi chiediamo ancora un po' di pazienza, Lo staff di Reboot

Guida Arduino + LCD HD44780

Discussione in 'Arduino tutorial' iniziata da StandardBus, 20 Mag 2016.

  1. StandardBus

    StandardBus Staff Alan Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    4.092
    Like ricevuti:
    5.298
    [​IMG]

    Anche se un LCD non è indispensabile nel nostro progetto, averne uno che rimane acceso e ci fornisce le più inutili informazioni al mondo è semplicemente fantastico. Perchè? Beh, perchè siamo stati noi a farlo funzionare, e siamo sempre noi che abbiamo deciso cosa fargli comparire sopra.

    Gli LCD basati su chip Hitachi HD 44780 sono dei display monocromatici molto semplici da pilotare, e richiedono al massimo due resistenze, oltre ai fili, per metterlo in funzione tramite Arduino.
    Hanno due righe su ognuna delle quali potremo stampare fino a 16 caratteri, ma nulla ci impedisce di tentare di far scorrere più testo :kissingsmiling:
    Gli LCD di questo tipo sono in giro dal 1998, per questo possono essere trovati anche all'interno di vecchi dispositivi elettronici, anche sotto forme differenti rispetto a quella che vedete in queste foto. Di solito sono riconoscibili per via dei 16 pin che mettono a disposizione.

    [Datasheet Hitachi HD 44780]

    Cosa ci serve

    Tutti i link riportati in questo elenco conducono su Amazon. Acquistando qualsiasi cosa su Amazon dopo aver cliccato su questi link, Amazon riconoscerà a Reboot una piccola percentuale della spesa, utile a sostenere il sito e a spingere l'autore a scrivere altri tutorial come questo.
    NB: il prezzo dei prodotti rimane invariato, sia cliccando sul link che non cliccandoci sopra


    Preparazione dell'IDE

    1. Scarica ed installa l'ultima versione dell'Arduino IDE ufficiale per il tuo sistema operativo dal sito Arduino.cc, a questo link. Sconsiglio di utilizzare l'IDE che viene distribuito tramite il sito Arduino.org, in quanto non ufficiale. Diversi utenti hanno riscontrato anche problemi nell'utilizzo dell'IDE di Arduino.org.
    2. Collega Arduino al tuo PC via USB
    3. Apri il programma Arduino dall'icona che si sarà creata sul desktop
    4. Seleziona "Strumenti":arrowright:"Scheda:":arrowright: e seleziona il tuo modello di Arduino

      [​IMG]
    5. Seleziona la porta COM su cui è presente l'Arduino da "Strumenti" :arrowright: "Porta:" in genere l'IDE è in grado di dirti su quale porta è collegata una scheda basata su Arduino.
    6. Ora sei pronto per iniziare a programmare sull'Arduino.
    Programmazione di Arduino

    1. Collega Arduino al PC tramite USB
    2. Apri l'Arduino IDE, cancella il codice di esempio che è già presente nella finestra e copia al suo interno questo codice:
      Codice:
      #include <LiquidCrystal.h>     // include la libreria che permette di controllare il display
      [/LIST]
      
      LiquidCrystal lcd(12, 11, 5, 4, 3, 2);     // inizializza la libreria e fornisce i pin su cui è collegato il display
      
      void setup() {
        lcd.begin(16, 2);  // Imposta il numero di colonne e righe disponibili sullo schermo 
        lcd.print("www.reboot.ms");  // Indica il messaggio da scrivere sullo schermo
      }
      
      void loop() {
          lcd.display(); // Attiva il display e scrive il messaggio a schermo
      }
    3. Invia il programma su Arduino premendo sul tasto "Carica" [​IMG]
    4. Ora si passa al montaggio dei componenti.
    Assemblaggio

    Ho individuato diverse tipologie di LCD HD 44780 a 16x2 caratteri, ma all'interno di questo tutorial terrò in considerazione soltanto quelli con display blu e verde.

    • [​IMG]
      Il display blu è veramente bello. È il futuro degli LCD su Arduino. Balle a parte, lo preferisco di gran lunga a quello verde.

      Schema di collegamento:
      [​IMG]
      Ho cercato di semplificare lo schema il più possibile. Dove il filo termina in un pallino verde, significa che è collegato al terminale in quell'area.

      R1 = 220 Ω, resistenza per la regolazione della corrente sul LED della retroilluminazione. Se i fili LED A e LED K non sono collegati, il display funziona senza retroilluminazione
      R2 = 3.3 KΩ, resistenza per la regolazione del contrasto del display. Se la resistenza ha un valore troppo basso, il display resta impostato sul valore alto di contrasto, e sarà difficile leggerlo.

      Regolazione del contrasto:
      Alcuni tutorial consigliano di inserire un potenziometro da 10 KΩ al posto della resistenza R2, in modo da poter regolare a piacimento il contrasto del display.
      Visto che comunque il display deve rimanere leggibile, ho provato a misurare i valori di resistenza a diversi gradi di contrasto:
      1. Oltre gli 8 KΩ il display è illeggibile
      2. Usando una resistenza da 5,70 KΩ la scritta resta scura, ma leggibile: testo nero su sfondo blu
      3. Usando una resistenza da 3,3 KΩ il risultato è ottimale: la scritta è nitida ed il testo risulta bianco su sfondo blu
      4. Man mano che ci si avvicina agli 0Ω tutti i "pixel" si attivano e restano bianchi. Il testo diventa illeggibile
      [​IMG]
    • [​IMG]
      Il classico LCD, Nokia 3310 style. Fa molto retro e dovrebbe essere facilmente reperibile anche nei mercatini di elettronica.
      Schema di collegamento:
      [​IMG]
      Ho cercato di semplificare lo schema il più possibile. Dove il filo termina in un pallino verde, significa che è collegato al terminale in quell'area.

      R1 = 22 Ω, resistenza per la regolazione della corrente sul LED della retroilluminazione. Se i fili LED A e LED K non sono collegati, il display funziona senza retroilluminazione

      Regolazione del contrasto:
      Alcuni tutorial consigliano di inserire un potenziometro da 10 KΩ al posto del filo grigio, in modo da poter regolare a piacimento il contrasto del display.
      Visto che comunque il display deve rimanere leggibile, ho provato a misurare i valori di resistenza a diversi gradi di contrasto:
      1. Oltre i 9 KΩ il display è illeggibile
      2. Man mano che ci si avvicina agli zero Ω il testo diventa nitido. Utilizzando un filo come mostrato nello schema permette di avere la soluzione ottimale


    Ora pasticciate pure cambiando il testo da mostrare a schermo. Nei prossimi tutorial tratterò anche le altre funzioni della libreria LiquidCrystal.h
     
    #1
    Ultima modifica: 9 Nov 2016
    A zoomx, federico, student e 3 altri utenti piace questo elemento.
  2. RyujiAndy

    RyujiAndy Staff ᗧ͇̿ · · ᗣ͇̿ᗣ͇̿ᗣ͇̿ᗣ͇̿ Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    558
    Like ricevuti:
    390
    Se si volesse utilizzare il seriale di comunicazione con il pc:
    Codice:
    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
    void setup() {
      lcd.begin(16, 2);
      lcd.print("www.reboot.ms");
      Serial.begin(9600);
    }
    
    void loop() {
      if(Serial.available()){
        lcd.setCursor(0, 1);
        lcd.print("                ");
        delay(100);
        lcd.setCursor(0, 1);
        while(Serial.available() > 0){
          lcd.write(Serial.read());
        }
      }
    }
    
     
    #2
    Ultima modifica: 20 Mag 2016
    A StandardBus piace questo elemento.
  3. StandardBus

    StandardBus Staff Alan Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    4.092
    Like ricevuti:
    5.298
    Per usare il codice di ryuji è necessario aprire nel nell'ide arduino "Strumenti":arrowright:"Monitor seriale".
    A questo punto sarà possibile scrivere qualsiasi messaggio, e dopo aver premuto "invia" comparirà a schermo del display.

    [​IMG]
     
    #3
  4. RyujiAndy

    RyujiAndy Staff ᗧ͇̿ · · ᗣ͇̿ᗣ͇̿ᗣ͇̿ᗣ͇̿ Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    558
    Like ricevuti:
    390
    Bene l'ho scritto senza provare su arduino
     
    #4
  5. kalice123

    kalice123 Livello 3

    Iscritto:
    17 Gen 2016
    Messaggi:
    40
    Like ricevuti:
    3
    Domanda: Il display lcd in questione ha le stesse specifiche tecniche del TM202QDCU6 ?
     
    #5
  6. StandardBus

    StandardBus Staff Alan Staff

    Iscritto:
    15 Dic 2014
    Messaggi:
    4.092
    Like ricevuti:
    5.298
    non credo kalice123, il TM202QDCU6 è un modulo a 8 pin con 20 caratteri stampabili su due righe, mentre quelli basati su HD44780 hanno 16pin.
    Non riesco a trovare da nessuna parte il datasheet di quel display.
    Ho trovato una foto però: i 4 pin centrali sembrano essere per il passaggio dati (più sottili). Con un tester si potrebbe trovare anche i due pin di alimentazione.
    TM202QDCU6.jpg
    Oserei dire che GND non può essere altro che il secondo pin da destra.
     
    #6
  7. kalice123

    kalice123 Livello 3

    Iscritto:
    17 Gen 2016
    Messaggi:
    40
    Like ricevuti:
    3
    questo modulo si accende ma non mi da nessun carattere a video, oserei dire che sia rotto, ma non avendo datasheet non posso testare se dipende dall'lcd o dalla board al quale è connesso.
     
    #7
  8. diman64

    diman64 Livello 1

    Iscritto:
    21 Mar 2017
    Messaggi:
    2
    Like ricevuti:
    3
    Ciao a tutti e il mio primo post e spero possa essere utile a qualcuno.
    Io da un pò invece di utilizzare la connessione a 4 fili per interfacciare gli LCD sia a 16x2 che 20x4 ecc... utilizzo la comunicazione I2C con modulo apposito come indicato nella foto ed utilizzando la libreria LiquidCrystal_I2C.h e comunicare solo con due fili su SDA e SCL ed ovviamente alimentazione 5V.
    Come indicato nella foto bisona conoscere l'indirizzo si start comunicazione dell'lcd ma in linea di massima la maggior parte di questi LCD utilizza indirizzo 0x27 per I2C.

    Come inizializzare la comunicazione e settare il nostro codice per arduino, nelle precedenti versioni i settaggi erano i seguenti:

    #include <LiquidCrystal.h>

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

    void setup() {
    lcd.begin(16, 2);
    lcd.print("www.reboot.ms");
    Serial.begin(9600);
    }

    void loop() {
    if(Serial.available()){
    lcd.setCursor(0, 1);
    lcd.print(" ");
    delay(100);
    lcd.setCursor(0, 1);
    while(Serial.available() > 0){
    lcd.write(Serial.read());
    }
    }
    }

    noi invece dobbiamo cambiare alcune cose per la I2C di seguito il codice da utilizzare e per dubbi confrontare con il precedente:
    Codice:
    #include <LiquidCrystal_I2C.h>
    
    // Connessioni:
    // SDA (I2C pin ) to Arduino pin A4
    // SCL (I2C pin) to Arduino pin A5
    //Per gli altri arduino collegare direttamente SDA > SDA e SCL > SCL
    
    / Imposto indirizzo LCD a 0x27 per 20 caratteri e 4 line display
    // Imposto i pin comunicazione chip I2C usato per le connessioni a LCD:
    //                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Imposto indirizzi I2C a LCD
    
    void setup() {
      Serial.begin(9600);
      sensors.begin();
      lcd.begin(20,4);      // inizializzo lcd per 20 caratteri e 4 linee, accendo la backlight
      lcd.clear();         // inizio con screen scuro
      lcd.setCursor(0, 0);
      lcd.print(" HELLO WORLD ");
      lcd.setCursor(0, 1);
      lcd.print(" BUONGIORNO ");
      lcd.setCursor(0, 2);
      lcd.print(" A TUTTI DA ");
      lcd.setCursor(0, 3);
      lcd.print(" DIMAN64 ");
    
    void loop() {
      //INSERIRE IL VOSTRO CODICE
    }
    
    Come vedete niente di complicato e molto semplice e non per ultimo abbiamo quattro ingressi/uscite da D2 a D5 liberi da utilizzare a nostro piacimento.

    un saluto
    diman64

    Settaggio dell'indirizzo del modulo I2C x LCD.JPG
     
    #8
    A zoomx, cdante100 e StandardBus piace questo elemento.
  9. zoomx

    zoomx Livello 19

    Iscritto:
    12 Set 2015
    Messaggi:
    892
    Like ricevuti:
    339
    Oppure dal contrasto errato. Magari prova a inclinare l'LCD per vedere se si intravedono caratteri.

    @diman64
    ho visto un sacco di volte quella board in vendita su eBay ma fino adesso non ho utilizzato gran che i moduli LCD 16x2. Grazie per la condivisione della tua esperienza!
     
    #9
  10. diman64

    diman64 Livello 1

    Iscritto:
    21 Mar 2017
    Messaggi:
    2
    Like ricevuti:
    3
    Ciao, se LCD e scuro devi regolare il contrasto ma prima ricontrolla la polarità delle connessioni al LED della retro illuminazione dell'LCD!!!
    Se utilizzi la classica comunicazione come nel mio post precedente devi utilizzare un trimmer per regolarla, se invece utilizzi il modulino I2C il trimmer di regolazione e già a bordo dello stesso senza altri componemti aggiuntivi.
     
    #10
  11. zoomx

    zoomx Livello 19

    Iscritto:
    12 Set 2015
    Messaggi:
    892
    Like ricevuti:
    339
    Diavolo, non avevo fatto caso al trimmer. Grazie ancora!
     
    #11
  12. kalice123

    kalice123 Livello 3

    Iscritto:
    17 Gen 2016
    Messaggi:
    40
    Like ricevuti:
    3
    Non era un problema del modulo, quando ho risaldato la cavetteria un filo di rame era andato dove non doveva andare e quando richiudevo la console di controllo andava in corto e non faceva accendere gli lcd.
     
    #12
  13. federico

    federico Livello 1

    Iscritto:
    23 Giu 2015
    Messaggi:
    16
    Like ricevuti:
    2
    Scusate ma nel codice credo ci sia un errore:
    sensors.begin();.Difatti quando compilo mi dice che non e' declared in this scope.Potete aggiustarlo ?.Grazie
     
    #13
  14. zoomx

    zoomx Livello 19

    Iscritto:
    12 Set 2015
    Messaggi:
    892
    Like ricevuti:
    339
  15. federico

    federico Livello 1

    Iscritto:
    23 Giu 2015
    Messaggi:
    16
    Like ricevuti:
    2
    Ho eliminato la riga: sensors .begin(),adesso il compilatore mi da' un altro errore e cioe'"a function definition is not allowed here before?{token ".Non sarebbe meglio rifarlo? Sono un anziano e ho bisogno di questo programma.Grazie
     
    #15
Sto caricando...

Condividi questa Pagina