Arduino Mega + LCD03

Ciao a tutti,
sto iniziando i primi passi con Arduino.
Nell'interfacciare un Arduino Mega 2560 R3 con un Display LCD03 16x2 ( LCD03 ) tramite protocollo I2C, non riesco a visualizzare nulla.
Prima di procedere con l'eventuale reso al fornitore, vi chiedo di verificare se
sbaglio qualche cosa.
Il collegamento fisico è visibile nell'immagine allegata: linea SDA ( pin 20 ) colore blu, linea SCL ( pin 21 ) colore verde, due resistenze di Pull-Up da 1K8 sulle linee SDA e SCL, alimentazione per il display pin 5V colore rosso e pin GDN colore nero. Nel display ho tolto il jumper per farlo funzionare in I2C.
Alimentando Arduino anche il display viene alimentato regolarmente però se provo a inviare dei dati non visualizzo nulla.
Questo è lo sketch:

#include <Wire.h>

#define LED_13              13

#define LCD_ADDRESS         0xC6
#define LCD03_CLEAR         0x0C
#define LCD03_HIDE_CUR      0x04
#define LCD03_CLEAR         0x0C
#define LCD03_SET_CUR_HOME  0x01

#define SDA_PIN             20
#define SCL_PIN             21

void setup(){
  Wire.begin();                           // inizializza I2C Master ( Arduino )
  Wire.begin(LCD_ADDRESS);                // inizializza I2C Slave ( lcd )
  
  Wire.beginTransmission(LCD_ADDRESS);    // inizia trasmissione su lcd
  Wire.write(LCD03_CLEAR);                // pulisci display
  Wire.write(LCD03_SET_CUR_HOME);         // posiziona il cursore nella prima riga prima colonna
  Wire.endTransmission(LCD_ADDRESS);      // termina trasmissione
  
  pinMode( LED_13, OUTPUT );

 
}

void loop(){
  Wire.beginTransmission(LCD_ADDRESS);
  Wire.write(LCD03_SET_CUR_HOME);              
  Wire.write("A");
  Wire.endTransmission(LCD_ADDRESS);
  digitalWrite( LED_13, HIGH );
  delay(1000);

  Wire.beginTransmission(LCD_ADDRESS);
  Wire.write(LCD03_SET_CUR_HOME);              
  Wire.write("B");
  Wire.endTransmission(LCD_ADDRESS);
  digitalWrite( LED_13, LOW );
  delay(1000);
}

Sbaglio qualche cosa nel codice ?

Forse l'indirizzo del display non è quello indicato nel relativo manuale, dovrei provare a fare un ciclo e testare tutte le combinazioni di indirizzi possibili ?

Grazie.

non stai regolando il contrasto; localizza il relativo pin e collegagli un trimmer da 10kohm: uno dei due capi appunto al pin del contrasto e l'altro capo a GND, ruota lentamente partendo dalla posizione centrale, ad un certo punto vedrai i caratteri; ovviamente fai in modo da mandare una frase stabile, in modo che ci sia anche quando troverai il giusto valore.
Riguardi le R sulle due linee I2C non sono sicuro ma mi pare di aver sentito sempre usare valori più grandi, comuqnue è solo una sensazione.

Grazie per la risposta,
devo però dire che il display che sto usando è questo: LCD03 nella versione 2 righe 16 colonne.

Il display ha 4 pin per alimentazione e dati ( Vcc, Gdn, SDA, SCL ) e altri 7 pin per collegare una eventuale tastiera. Non ha pin per regolare il contrasto ma ha un trimmer ( che nella foto del manuale non è visibile ) per regolare appunto il contrasto. Ovviamente ho provveduto ad aumentare il contrasto.

Se il codice è giusto è probabile che il display abbia un altro indirizzo o che non funziona ?!?!

Ho usato il modello con 4 righe in collegamento seriale e funziona benissimo.

Ti sei ricordato di rimuovere il ponticello per la scelta della modalità I2C?

E' anche possibile che l'indirizzo sia stato modificato: ti conviene provare tutti gli altri indizzi (C6, C8, CA, CC e CE) prima di rimandare il modulo dal fornitore e, magari, provare anche la modalità seriale.

Dimenticavo: alimentando semplicemente il modulo, dovrebbe apparire la modalità e l'eventuale indirizzo I2C.

cyberhs:
Ho usato il modello con 4 righe in collegamento seriale e funziona benissimo.

Ti sei ricordato di rimuovere il ponticello per la scelta della modalità I2C?

E' anche possibile che l'indirizzo sia stato modificato: ti conviene provare tutti gli altri indizzi (C6, C8, CA, CC e CE) prima di rimandare il modulo dal fornitore e, magari, provare anche la modalità seriale.

Dimenticavo: alimentando semplicemente il modulo, dovrebbe apparire la modalità e l'eventuale indirizzo I2C.

Ho fatto prove sia senza jumper ( modalità I2C ) sia con jumper ( modalità seriale ) senza risultati.

Poi alimentando il display, non appare la modalità e l'indirizzo.

P.S.:
come posso testare se la modalità I2C del mio Arduino Mega funziona, senza collegare nessun modulo I2C ?

Ciao... bhè non penso sia un problema di arduino.. se cyber ha avuto esperienza con uno simile al tuo e dice che appena lo alimenti dovrebbe apparire insirzzo i2c e altro.. mi sembra abbastanza ovvio che c'è qualche cosa che non va nel dysplay.
Cyber@ usavi qualche libreria particolare o andavi diretto con Wire come sta facendo lui ?

Non credo che sia un problema della I2C, visto che non funziona anche in seriale.

Ho paura che sia proprio il modulo guasto... =( magari hai fornito per un istante l'alimentazione al contrario.

Verifica anche che non sia un problema di contatti della breadboard.

Per superzaffo:

no, ho usato la modalità seriale con comandi diretti senza utilizzo di librerie.

Il grande vantaggio di questo modulo è che può gestire anche un tastierino 3x4, senza spreco di pin e di risorse software.

E' impossibile averlo alimentato al contrario in quanto prima di collegare il display ho misurato con il tester il corretto voltaggio e la corretta polarità.

Anche se sono alla prima esperienza con ARDUINO, sono di formazione "elettronica" e "informatico" di professione, più o meno so come muovermi :wink: , poi tutto è possibile, anche un momento di non "lucidità" :slight_smile:

Il fatto che alimentando il modulo non venga visualizzato nessun messaggio credo che non voglia dire nulla in quanto mi sembra di aver letto che tale messaggio può essere disabilitato.

La cosa strana è che comunque il display si "accende", come si vede dall'immagine allegata, la prima foto è il display spento, la seconda il display alimentato e con un basso contrasto, la terza foto il display con un più alto contrasto.

Ho inviato una mail al produttore, vediamo cosa risponde ...

Ciao,

io ho lo stesso LCD e dopo aver tribolato per due/tre giorni ho risolto utilizzando questa libreria: Google Code Archive - Long-term storage for Google Code Project Hosting.

Funziona benissimo in modalità I2C (senza ponticello).

Se ti serve un programma di esempio fammi sapere che lo pubblico.

Ciao

Andrea

Grazie Andrea, ma nei vari tentativi ho anche provato con questa libreria.

Purtroppo il problema sembra essere proprio il display.

Infatti il produttore del display mi ha scritto che alimentando il display si dovrebbe vedere brevemente il flash della retroilluminazione e subito dopo un messaggio, che dipende dal tipo di modalità selezionata, tipo: “Serialmode” oppure “I2Cmode @C6

Nel mio caso il flash appare ma il messaggio no.

Il tuo display mostra il messaggio della modalità subito dopo averlo alimentato ?