[RISOLTO] Problema display/I2C

Ciao a tutti,
ho un LCD 1602 che funziona regolarmente a cui ho collegato il modulo I2C. Il problema riscontrato è che delle due righe mi compaiono solo i primi due caratteri (anche con il semplice esempio “Hello World”, compare in questo caso solo la “H” perché impegno solo la prima riga).
Ho caricato la libreria e lo sketch viene caricato regolarmente.
Un altro esempio, per poter meglio capire il problema, è che se carico lo sketch di esempio nella libreria I2C “SerialDisplay” (e cioè quello in qui digito io le parole nel serial monitor e lui le scrive nel display) tutto funziona regolarmente, va a scrivere anche le lettere successive.

Quale potrebbe essere il problema?

Grazie.

è successo anche a me e ho letto di altri utenti qui sul forum con lo stesso problema.
io ho risolto cambiando libreria (ne ho provate 3 o 4...).
ad altri è stato suggerito di correggere una riga nella libreria...
così su 2 piedi non riesco a trovare la discussione che trattava questo argomento, ma se hai tempo di sfogliarti qualche pagina del forum trovi sicuramente qualcosa a riguardo.

fratt:
è successo anche a me e ho letto di altri utenti qui sul forum con lo stesso problema.
io ho risolto cambiando libreria (ne ho provate 3 o 4…).
ad altri è stato suggerito di correggere una riga nella libreria…
così su 2 piedi non riesco a trovare la discussione che trattava questo argomento, ma se hai tempo di sfogliarti qualche pagina del forum trovi sicuramente qualcosa a riguardo.

Ho provato a cercare un po’ in giro prima di postare ma avevo trovato solo problemi diversi dal mio, avevo immaginato fosse un problema di librerie ed ho provato a scaricarne altre ma sembrano tutte uguali.

Grazie.

@angelkid: ... magari lo vogliamo mette il link alla libreria che stai usando o no ? :smiling_imp:

Guglielmo

Che modulo I2C hai?
Ciao Uwe

... e comunque, al 95% devi modificare la libreria ...

Nel .cpp cerca:

inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
	send(value, Rs);
	return 0;

... e modifica in:

inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
	send(value, Rs);
	return 1;

... ovvero cambia il valore del return.

Guglielmo

gpb01:
... e comunque, al 95% devi modificare la libreria ...

Nel .cpp cerca:

inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
send(value, Rs);
return 0;


... e modifica in:



inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
send(value, Rs);
return 1;



... ovvero cambia il valore del return.

Guglielmo

Ne ho usati 3 diversi, l'ultimo è questo:

http://www.mauroalfieri.it/download/LiquidCrystal_I2C1602V1.zip

uwefed:
Che modulo I2C hai?
Ciao Uwe

Una cinesata come tanti, il modulo non riporta nessun nome, il chip invece "PCF8574T"

angelkid:
Ne ho usati 3 diversi, l'ultimo è questo:
http://www.mauroalfieri.it/download/LiquidCrystal_I2C1602V1.zip

... ok, quella non mi sembra abbia la riga incriminata, deve essere qualche cosa d'altro allora ::slight_smile:

Guglielmo

gpb01:
... e comunque, al 95% devi modificare la libreria ...

Nel .cpp cerca:

inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
send(value, Rs);
return 0;


... e modifica in:



inline size_t PCF8574_HD44780_I2C::write(uint8_t value) {
send(value, Rs);
return 1;



... ovvero cambia il valore del return.

Guglielmo

Ho provato la modifica che mi hai consigliato ma non ho risolto il problema. Grazie comunque.

angelkid:
Ho provato la modifica che mi hai consigliato ma non ho risolto il problema. Grazie comunque.

... ma nella libreria che hai linkato NON c'è quella riga :o :o :o

Guglielmo

gpb01:
... ma nella libreria che hai linkato NON c'è quella riga :o :o :o

Guglielmo

Si Guglielmo, ma come ho detto prima, ne ho scaricate 3 ed in una c'era la riga da te indicata, non identica, ma simile
inline size_t LiquidCrystal_I2C::write(uint8_t value) {
send(value, Rs);
return 0;

… se non te ne funziona nessuna, prova a mettere il codice che usi (… mi raccomando, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> … primo a sinistra), visto mai ci sia un errore in fase di inizializzazione del display … ::slight_smile:

Guglielmo

Te lo allego anche se non serve a molto, è quello di esempio nell’IDE:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
 
  // Print a message to the LCD.
  lcd.backlight();
  lcd.print("Hello, world!");
}

void loop()
{
}

rieccomi. io ho risolto con questa libreria
https://bitbucket.org/fmalpartida/new-liquidcrystal/overview

e questo codice

//includo la libreria per la gestione del display LCD
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

// DISPLAY LCD I2C
// set the LCD address to 0x27
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);


void setup() {
  // inizializzo LCD
  lcd.begin(16,2);
  // attivo la retro-illuminazione
  lcd.setBacklightPin(3,POSITIVE);  // ho trovato in rete il valore 3 come pin di backlight
  lcd.setBacklight(HIGH);
  lcd.home (); // go home

  // scrivo un messaggio di attesa
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("ABCDEFGHILMNOPQ");
  lcd.setCursor(0,1);
  lcd.print("abcdefghilmnopq");

}

void loop() {
}

Incredibile, ho risolto...

Diciamo che mi è andata un po' di c...

Ho cancellato (per l'ennesima volta) tutte le librerie, ne ho rimessa una, poi dal gestore librerie dell'IDE ho fatto l'aggiornamento della libreria, ho riprovato e funziona.

Grazie a tutti per il tempo che mi avete dedicato ed in particolare a Guglielmo.

Ciao.

Bene !!!

Per completare potresti ora editare il tuo primo post e, difronte al titolo, aggiungere **[RISOLTO] ** :wink:

Guglielmo