Buonasera,
potrebbe sembrare un problema banale, ma non lo è. Dopo diverso tempo ho ripreso in mano un vecchio script che utilizza un display LCD 1602 con adattatore I2C per visualizzare alcune informazioni. Il LED della retroilluminazione si accende correttamente, ma il display non mostra alcun carattere.
Ho effettuato numerose prove, tra cui:
-Sostituzione di 3 microcontrollori (2 con USB-C e 1 con Mini-USB);
-Cambio dei cavi e riduzione delle distanze;
-Test con 5 display diversi: 2 con adattatore I2C integrato e 3 con adattatore saldato manualmente;
-Utilizzo di librerie differenti, tra cui:
#include <Wire.h> + #include <LiquidCrystal_I2C.h>
#include <hd44780.h> + #include <hd44780ioClass/hd44780_I2Cexp.h>
-Cambio dei GPIO SDA/SCL da 21/22 ad altri disponibili.
La scansione degli indirizzi I2C restituisce correttamente 0x27, quindi la comunicazione con l’adattatore è attiva. Tuttavia, utilizzando la libreria di Bill Perry (hd44780_I2Cexp), a volte ricevo il codice di errore -3, che indica una comunicazione errata.
Nonostante tutte queste prove, il risultato è sempre lo stesso: la retroilluminazione si accende, ma il display rimane vuoto. Eppure, in passato lo stesso script funzionava correttamente.
Di seguito lo sketch attualmente in uso:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define I2C_SDA 12#define I2C_SCL 22
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {Serial.begin(115200);Wire.begin(I2C_SDA, I2C_SCL, 10000);
byte count = 0;byte address = 0;for (address = 1; address < 127; address++) {Wire.beginTransmission(address);Serial.print("0x");Serial.println(address, HEX); // Serial.println(address, BIN);
if (Wire.endTransmission() == 0) { Serial.print("Found device at 0x"); Serial.println(address, HEX); count++; } delay(10);
}
if (count == 0)Serial.println("No I2C devices found");elseSerial.println("Done");
lcd.init();lcd.clear();lcd.backlight();lcd.setCursor(0, 0);lcd.print("Inizio conteggio");delay(3000);
for (int ix = 1; ix <= 10; ix++) {lcd.clear();Serial.println(ix);lcd.print(ix);delay(1000);}
lcd.clear();lcd.print("Fine conteggio");}
void loop() {}
C’è modo di capire cosa sta succedendo?
grazie in anticipo