Libreria I2C per LCD

Per una mia applicazione ho un RTC ed un LCD che comunicano sul bus I2C.

Sto usando la versione 2.0 della libreria LiquidCrystal_I2C che mi risulta essere la più aggiornata.

Mentre lo RTC comunica perfettamente, lo LCD 16x2 non vuole saperne di funzionare, facendo apparire sulla prima riga 16 rettangoli neri e accendendo la retroilluminazione ad ogni tentativo di print per poi spegnersi subito dopo.

Lo LCD monta un PCF8574 con indirizzo 0x2F (pad di indirizzo non cortocircuitati).

Come prova ho anche eliminato lo RTC (che ha sul BUS i resistori di pullup da 3.3K) aggiungendo due resistori di pullup a 4.7k e ho anche provato a cambiare indirizzo (0x20), ma nulla da fare.

Anche il più semplice sketch mi produce lo stesso risultato, cioè backlight accesa per un istante e riga 1 con 16 rettangoli neri:

LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  lcd.init();
  lcd.backlight();
}

void loop() {
  lcd.print("Hello, world!");
  delay(1000);
}

Non posso escludere che l'LCD sia difettoso, ma forse il difetto è nella libreria.

Qualcuno ha esperienza a riguardo? Quale altra libreria posso provare?

Ciao Massimo, non l'ho mai usata ma ho sentito più di una persona trovarsi bene con la libreria di Testato... La trovi nella sua firma. Testar non nuoce :slight_smile:

@cyberhs, ma la istanza

LiquidCrystal_I2C lcd(0x27,16,2);

permette di dare altri parametri, che dicono come sono mappati i pin rispetto al PCF8574
Di base c'e' una "mappatura" standard, magari il tuo PCF non è collegato come al solito.

                     //LiquidCrystal_I2C lcd(0x23);  // Set the LCD I2C address
// default: EN=6 RW=5 RS=4 D4=0 D5=1 D6=2 D7=3
//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE);  // Set the LCD I2C address
//LiquidCrystal_I2C lcd(0x23, 6, 5, 3, 0, 1, 2, 4, 7, POSITIVE);
//                      addr,EN,RW,RS,D4,D5,D6,D7, Backlight, POLARITY
//  LiquidCrystal_I2C lcd(0x25, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);  // mjkdz module
//  LiquidCrystal_I2C lcd(0x23, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // on 20x4
    LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // on 16x2      A2=0x23 A1=0x25 A2=0x23 else 0x27

Io ho tre moduli PCF da agganciare a lcd 16x2 o 20x4 e devo dare questi parametri

Ho appena provato la libreria di Testato che funziona perfettamente.

Nid, quelle istruzione sono valide per la versione 1 della libreria LiquidCrystal_I2C (se non sbaglio).

Comunque, trovo che la cosa sia veramente trattata male, generando nei neofiti una grande confusione.

Oh, si, scusa. Io ho la 1.2. Ho visto un 2 ... :confused:
Io uso quella di fmalpartida (l'unica che mi sembrasse "mantenuta"), che non ha una 2.0
https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

Proverò anche io la 2.0 e quella di Testato.

Hai un link alla 2.0 ? cercando in internet è un casino !?!

Ecco la pagina da cui ho desunto le infromazioni:

http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/

mentre questo è il download:
http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C/LiquidCrystal_I2C.zip

Sto provando con soddisfazione quella di Testato.

Mi sta capitando che, a volte, ripristinando la tensione dopo averla tolta, il display impazzisce fornendo caratteri strani.

Alle volte succede anche semplicemente riprogrammando Arduino MICRO che sto utilizzando.

Anche il reset di Arduino MICRO a volte non è sufficiente e mi costringe a togliere e ripristinare l'alimentazione.

Proverò con un condensatore da 100nF ed uno da 10μ sull'alimentazione del display, ma non credo sia quello il motivo.

Premetto che ci sono i resistori di pullup da 4.7k in parallelo a quelli da 3.3k già presenti sul modulo RTC, quindi non può essere insufficiente corrente sul bus.

Mi chiedo se è la libreria di Testato... a qualcuno è già successo con la libreria standard?

nid, hai avuto modo di provare la "Testato solution"?

cyberhs:
nid, hai avuto modo di provare la "Testato solution"?

No, non ancora (e a me la lib di fmalpartida mi funzia ^-^