
L’utilizzo di un display LCD con Arduino è molto comune nei progetti di elettronica, in quanto permette di visualizzare informazioni in tempo reale senza la necessità di un computer. In questo articolo vedremo come utilizzare un display LCD 16×2 (oppure 20×4) con il controller Hitachi HD44780, sfruttando la libreria LiquidCrystal e utilizzando solo 6 pin digitali di Arduino.
I display LCD basati sul controller HD44780 sono composto da:
-
- Una memoria DDRAM (Display Data RAM) dove vengono memorizzati i caratteri da visualizzare.
- Una memoria CGROM (Character Generator ROM) che contiene i caratteri predefiniti.
- Una memoria CGRAM (Character Generator RAM) per definire caratteri personalizzati.
- Un cursore che può essere spostato per scrivere in posizioni specifiche.
Il display LCD può operare in due modalità di comunicazione:
-
- 8-bit: invia dati e comandi con 8 linee dati (D0-D7).
- 4-bit: invia dati in due blocchi da 4 bit, riducendo il numero di pin utilizzati.
La modalità 4-bit è la più comune, in quanto consente di risparmiare pin senza perdere funzionalità. Il controller HD44780 inoltre utilizza due registri principali per l’interazione con Arduino:
-
- Registro Comandi (Instruction Register – IR): accetta comandi per configurare il display (es. pulire lo schermo, muovere il cursore).
- Registro Dati (Data Register – DR): riceve i caratteri da visualizzare sul display.
I dati vengono inviati sui pin dati (D0-D7) in modalità 8-bit o solo su D4-D7 in modalità 4-bit. Per comunicare con il display, Arduino utilizza i seguenti segnali di controllo:
Pin LCD | Funzione | Descrizione |
RS (Register Select) | Seleziona il registro | 0 = comando, 1 = dati |
RW (Read/Write) | Modalità di lettura/scrittura | 0 = scrittura, 1 = lettura (di solito connesso a GND) |
E (Enable) | Attiva il display | Un impulso da LOW a HIGH indica un’operazione |
Serviranno inoltre una resistenza 1/4W da 220Ω per stabilizzare la retroilluminazione e un potenziometro (o trimmer) da 10kΩ per regolare il contrasto. Nella seguente tabella vengono riportate le connessioni necessarie.
Pin LCD | Collegamento |
VSS | GND |
VDD | +5Vdc |
V0 | cursore potenziometro per regolazione contrasto |
RS | pin 7 Arduino |
RW | GND (scrittura permanente) |
E | pin 6 Arduino |
D4 | pin 5 Arduino |
D5 | pin 4 Arduino |
D6 | pin 3 Arduino |
D7 | pin 2 Arduino |
A | +5Vdc tramite resistenza 220Ω |
K | GND |
Per gestire il display LCD basato sul controller Hitachi HD44780 (o compatibili), è necessario utilizzare la libreria LiquidCrystal.h, una delle librerie standard di Arduino. Questa libreria consente di controllare il display in modalità 4-bit o 8-bit e offre funzioni per:
-
- Scrivere testo
- Muovere il cursore
- Creare caratteri personalizzati
- Gestire la retroilluminazione
Passaggi per configurare il display:
-
- Inclusione della libreria:
Includere la libreria con #include <LiquidCrystal.h>. - Definizione dei pin digitali:
Collegare i pin RS, E, D4, D5, D6 e D7 ai pin di Arduino. - Inizializzazione del display:
Utilizzare lcd.begin(16, 2) per impostare un display da 16 colonne e 2 righe. - Scrittura di testo:
Impiegare lcd.print(“Hello, Arduino!”) per visualizzare un messaggio sulla prima riga. - Cambio di riga:
Usare lcd.setCursor(0, 1) per spostare il cursore sulla seconda riga.
- Inclusione della libreria:
Per progetti più complessi, si può valutare l’uso di un modulo I2C, che riduce il numero di connessioni necessarie e facilita la gestione del display.
ESEMPIO 1:
Cablaggio e semplice attivazione di un LCD con regolazione contrasto. Backlight (retroilluminazione sempre attiva).
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // impostazione lcd void setup() { lcd.begin(16, 2); lcd.print("MST-TUTORIAL"); } void loop() { // ........ }
ESEMPIO 2:
Cablaggio di un LCD con regolazione contrasto e controllo attivazione della backlight tramite un transistor BJT NPN pilotato dal pin digitale 8.
#include <LiquidCrystal.h> LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // impostazione lcd const int backlight = 8; // pin di gestione retroilluminazione void setup() { pinMode(backlight,OUTPUT); lcd.begin(16, 2); lcd.print("MST-TUTORIAL"); } void loop() { digitalWrite(backlight,HIGH); // backlight ON delay(1000); digitalWrite(backlight,LOW); // backlight OFF delay(1000); }