Display LCD Hitachi HD44780

Da raspibo.
Jump to navigation Jump to search

Un display LCD è di fondamentale importanza se vogliamo avere un feedback da un dispositivo senza aver bisogno di un monitor o di un collegamento di qualche tipo. La maggior parte dei display funzionano con l'integrato Hitachi HD44780 o compatibili.

Quello che vi serve per questa guida è:

  • Un Arduino o un Raspberry Pi
  • Un potenziometro da 10KA o una resistenza adeguata (credo dipenda da display a display, per questo il potenziometro è la scelta migliore)
  • Fili (molti)
  • Se il vostro display non ha i pin allora aggiungete delle strip di pin da saldare, stagno, saldatore, molta precisione e pazienza

Lcd.JPG

Pinout

I pin del display che vedete nella foto sono 18. I primi due (P1-2) e gli ultimi due (P17-18) controllano la retroilluminazione e normalmente non sono considerati nelle guide che troverete nella documentazione di Arduino perché non sono sempre presenti. Per farvi un esempio, in molte guide il pin che controlla il contrasto è il n.3, ma in questo display il pin è il n.5. Fate sempre riferimento al datasheet. I pin da collegare sono:

  • +5V e GND: Collegateli al +5V e alla terra del vostro Arduino.
  • Vo o Contrast: Pin che regola il contrasto. Collegate il pin centrale del potenziometro a questo pin e uno degli altri due a terra. Potete anche usare una resistenza ma rischiate di non vedere niente. Sulla guida ufficiale di Arduino c'è scritto di collegare il terzo pin alla +5V, ma funziona lo stesso anche se non lo fate. Non so se può procurare un guaio. È acceso da ore e non mi sembra che dia problemi.
  • RS: Register Select, il pin che stabilisce se quello che si sta inviando è un comando o dei dati.
  • R/W: Read Write, un pin che seleziona la modalità di lettura o di scrittura del display. In pratica se riceve corrente il display è in modalità lettura e permette di comunicare il testo mostrato al dispositivo (in questo caso l'Arduino) mentre se riceve 0V è in modalità scrittura e permette di modificare il testo. ATTENZIONE se state usando un Raspberry Pi dovrete controllare la tensione con la quale il vostro dispositivo comunica. Molti usano livelli logici a 5V che rischierebbero di distruggere la GPIO o addirittura il vostro Raspberry. Usate un tester ed eventualmente un convertitore di livelli logici oppure, se non vi interessa la modalità lettura, collegate questo pin alla terra, così da tenere il display sempre in modalità scrittura.
  • Enable: Quando è attivo permette la scrittura nei registri.
  • D0-D7: Bus dati, usato per mandare i comandi e i testi.

Il collegamento può essere a 8 o a 4 bit. Nel secondo caso verranno occupati 4 pin (D4-D7) anziché 8. La libreria LiquidCrystal di Arduino comunque supporta entrambe le modalità.

LCD retro.JPG

Set di caratteri

Il display ha due alfabeti: l'ASCII e il giapponese. Altri modelli possono avere il cirillico o altri caratteri latini. Ci sono otto caratteri che sono personalizzabili. Potete usarli per le lettere accentate, per il simbolo dell'euro o qualsiasi altro simbolo.

Potete vedere i vari set di caratteri in questa pagina.

Collegare il display

Collegamento con Arduino

Per Arduino esiste la libreria LiquidCrystal che vi permette di controllare gli HD44780. Esistono diversi esempi già fatti che vi consiglio di provare. Fate attenzione allo sketch CustomCharacter: nella mia versione c'era un bug. Per risolverlo occorre sostituire tutti i lcd.write(x) in lcd.write(byte(x)) dove x è un numero da 0 a 4. Ulteriori informazioni le potete trovare nel sito ufficiale.


tutorial per Arduino

libreria LiquidCrystal

Collegamento con Raspberry Pi

Lcdpi.JPG

Collegate il Raspberry Pi al LCD seguendo le precauzioni riportate nella sezione Pinout. Ricordate che per tutti i vostri test il pin R/W deve essere collegato a terra. Se non lo fate potreste distruggere il vostro Raspberry.

Su Raspberry Pi esistono diverse librerie per il controllo di questi display, potete usare ad esempio wiringpi [1] per C e C++ che è fornita con numerosi esempi. Esistono librerie anche per Python ma non sono riuscito a farle funzionare come dovrebbero.

Ecco un piccolo programma che scrive due argomenti forniti da riga da comando e li stampa sul display, uno per linea.

#include <wiringPi.h>
#include <lcd.h>

int main (int argc, char ** argv) {
   int fd;
   wiringPiSetup();
   fd = lcdInit(2,8,4,11,10,4,5,6,7,0,0,0,0);
   lcdHome(fd);
   lcdClear(fd);
   lcdPosition(fd,0,0);
   lcdPuts(fd,argv[1]);
   lcdPosition(fd,0,1);
   lcdPuts(fd,argv[2]);
   return 0;
}

Quando compilate ricordatevi di includere anche le librerie WiringPiDev.