I2C LCD Controller

SKU191949a
Fig. 1

Ho comprato dei moduli I2C per display LCD basato sul chip PCF8574T.

Una volta assemblato, l’aspetto del display + modulo è molto simile alla Fig. 2. Basta poi collegare i 4 pin laterali ad arduino e il gioco è fatto (almeno la parte elettronica 🙂 ).

  • VCC   ->  5v
  • SCL     ->  A5 o pin SCL (su Arduino UNO R3)
  • SDA   ->   A4 o pin SDA (su Arduino UNO R3)
  • GND  ->  GND
Fig. 2

Vediamo un po di codice.

La prima cosa da fare e capire che indirizzo ha il nostro modulo, e di conseguenza il nostro display. In rete ho trovato questo codice che permette di individuare l’indirizzo dei moduli I2C collegati ad arduino (I2C scanner):

//Written by Nick Gammon
// Date: 20th April 2011
#include <Wire.h>
void setup() {
  Serial.begin (115200);
  // Leonardo: wait for serial port to connect
  while (!Serial){ }
  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
  Wire.begin();
  for (byte i = 1; i < 120; i++)
  {
     Wire.beginTransmission (i);
     if (Wire.endTransmission () == 0)
     {
       Serial.print ("Found address: ");
       Serial.print (i, DEC);
       Serial.print (" (0x");
       Serial.print (i, HEX);
       Serial.println (")");
       count++;
       delay (1); // maybe unneeded?
     } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
} // end of setup

void loop() {}

Caricate lo sketch sulla board e aprite la console seriale. Verrà stampato l’indirizzo del modulo.

Una volta individuato l’indirizzo sostituiamolo nel prossimo esempio:

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library

#define I2C_ADDR 0x20 // Define I2C Address for controller
#define BACKLIGHT_PIN 7
#define En_pin 4
#define Rw_pin 5
#define Rs_pin 6
#define D4_pin 0
#define D5_pin 1
#define D6_pin 2
#define D7_pin 3

#define LED_OFF 0
#define LED_ON 1
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
   lcd.begin (16,2); // initialize the lcd
   // Switch on the backlight
   lcd.setBacklightPin(BACKLIGHT_PIN,NEGATIVE);
   lcd.setBacklight(LED_ON);
}

void loop()
{
   // Reset the display
   lcd.clear();
   delay(1000);
   lcd.home();

   // Print on the LCD
   lcd.backlight();
   lcd.setCursor(0,0);
   lcd.print("Hello, world!");
   delay(8000);
}

Commentiamo un pò il codice:

  • includiamo le librerie necessarie Wire per il protocollo I2C e LiquidCrystal_I2C per la gestione del display
  • impostiamo l’indirizzo esedecimale
  • associamo i pin dell’integrato PCF8574T ai pin del display
  • creiamo e inizializziamo una variabile lcd
  • il loop fa lampeggiare la scritta “Hello, world!” sul display con un ritardo di 8s.
Fig. 3

Quando ho comprato il modulo, l’annuncio diceva “modulo I2C per display LCD 16×2”, ma io lo sto usando con un LCD 20×4 (Fig. 3) e funziona lo stesso, basta sostituire la riga di codice

lcd.begin (16,2);

con

lcd.begin (20,4);

Se volete cambiare indirizzo al modulo dovete impostare a Low o High i pin A0 A1 A2. Come si vede dalle Fgi. 1 e 2, i pin in questione hanno tre piazzole. Sotto la prima c’è un L (Low), sotto la terza una H (HIGH). Se unite la prima con la seconda con dello stagno, ad esempio del pin A0, impostate il pin a LOW e il modulo cambia indirizzo; lo stesso se unite la seconda con la terza, impostate il pin a HIGH, e il modulo cambia indirizzo. Così facendo potete scegliere uno tra gli otto indirizzi possibili.

Do It Yourself

Se volete, seguendo lo schema in Fig. 4 potere costruivi da solo un modulo I2C per LCD. Ecco l’occorrente:

  • PCF8574T
  • Transistor NPN 2N2222
  • 2 Resistenze da 10 k
  • 1 Resistenza da 2.2 k
  • 1 Resistenza da 470
  • 1 Trimmer potenziometro da 10 k
  • 1 Condensatore da 100 nF (va bene anche in poliestere o in MLCC)
Fig. 4

Non so se ne vale la pena visto il costo così basso del modulino (sulla baia si trova ad 1€ dalla cina con spedizione gratuita), ma se si hanno già tutti i componenti è un simpatico esercizio.

Pin SCL e SDA su Arduino Uno R3

Fonte:

  • http://www.mauroalfieri.it/elettronica/pcf8574p-interfaccia-i2c-display-lcd.html
  • http://www.instructables.com/id/I2C-LCD-Controller-the-easy-way/?ALLSTEPS
  • http://www.giuseppecaccavale.it/arduino/display-lcd-i2c-pcf8574t-arduino/