display i2c

Ciao a tutti, ho un problemino con un display in particolare questo:

ho assemblato il tutto, aggiunto il real time clock, ed evitato di collegare i pin A, K e la resistenza RB come descritto nel manuale, inquanto non necessaria per il modello senza retroilluminazione.

per collegarlo ad arduino ho utilizzato il protocollo i2c, collegando +v a 5v 0v a grd, lSCL al pin analogico 5 ed SCA al pin analogico 4.
Siccome non funzionava, cercando ho trovato questo programmino che teoricamente dovrebbe funzionare, ma niente da fare:

#include <Wire.h>
byte addr = 0x63; //questo è l'indirizzo giusto per il display

void setup()
{
 Serial.begin(9600); //non ho provato a vedere come si comporta togliendo questa linea
 delay(500);
 Wire.begin(); // join i2c bus (address optional for master)
 delay(500);
}

 void loop()
{

Wire.beginTransmission(addr);
Wire.send(0);
Wire.send(254);
Wire.send(128);
Wire.send("Ciao come va? ");
Wire.send(255);
Wire.endTransmission(); // stop transmitting


delay(10); //piccolo ritardo altrimenti non stampa la seconda linea

Wire.beginTransmission(addr);
Wire.send(0);
Wire.send(254);
Wire.send(192);
Wire.send("Tutto bene ora ");
Wire.send(255);
Wire.endTransmission(); // stop transmitting


delay(50000);//refresh ogni 50 secondi
}

void cancella_display()
{

Wire.beginTransmission(addr);
Wire.send(0);
Wire.send(254);                                              
Wire.send(1);                                                  
Wire.send(255);
Wire.endTransmission();
delay(30);
//*************************************************************  
}

qualcuno ha qualche idea???

Ma io nel datasheet su Robot-italy leggo che usano $C6 come indirizzo per comandarlo.

Si sul datasheet riportano $C6, quindi teoricamente mi basterebbe cambiare:
byte addr = 0x63;
con
byte addr = $C6;
e tutto dovrebbe andare??
Scusate ma con i display sono veramente a zero :frowning:

generalmente "l'indirizzo base" è 0x20...

e cmq usa anzi macro che variabili "costanti" e al posto di quei numeri quali 128, 192, 254 e 255... lo rendono molto più leggibile :wink:

In teoria sì.
Cmq vale per tutti i dispositivi I2C. L'Indirizzo che viene dato è quello intrinseco al dispositivo stesso e non puoi cambiarlo.
Poi ci sono anche dei dispositivi che hanno impostabile una parte dell'indirizzo, ovvero il loro indirizzo è composto da una parte fissa e da una parte variabile impostabile dall'utente. Tale sistema permette di avere connessi più dispositivi dello stesso tipo, ad esempio 2 chip di EEPROM.

Ciao Sverdrup.
Sono Kempis.
Ho smadonnato parecchio con il display in questione.
Il programma che ho postato funzionava correttamente sul display che ho acquistato che è lo stesso che stai usando.
Prova aggiungere dopo il void loop la riga
cancella_display(); //cancello il display
che nel mio programma postato avevo erroneamente messo tra // ( e quindi come commento).
Non so se può servire ma tentar non nuoce.
L'indirizzo del display dovrebbe essere giusto per scrivere nel display stesso

Bye

Ho provato a modificare l'indirizzo, ma quando lo compilo mi da:
sketch_feb08a:1: error: stray ‘$’ in program
sketch_feb08a:1: error: ‘C6’ was not declared in this scope
Ciao Kempis, quello è proprio il tuo esempio, ma non riesco a farlo funzionare, ho aggiunto anche la riga che mi hai suggerito, ma niente???
Sul datasheet ho letto che non necessita di resistenze di pull up, inquanto già presenti nella shield, tu le hai messe??
altri suggerimenti??

$C6 è la notazione esadecimale standard. Poi devi convertirla nel formato usato dal linguaggio.
Nello specifico, l'IDE di Arduino usa il Wiring, un simil-C, per cui devi mettere 0xC6. "0x" indica un numero esadecimale.

ciao a tutti

per risolvere il comune, fastidioso e spesso verificandosi problema che non si sa mai precisamente l' indirizzo di un dispositivo I2C ( nei datasheet é sempre nascosto aulla 8-ava pagina in forma di un numero binario a 4 bit) si puó usare l' arduino come scanner I2C. Il programma fa una chiamata su tutti gli indirizzi e visualizza se riceve una risposta:
http://todbot.com/blog/2009/11/29/i2cscanner-pde-arduino-as-i2c-bus-scanner/

Ciao Uwe

Con 0xC6 non funziona,
mentre ho trovato questo post che sembra interessante:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1239414728
Il problema è che sono veramente a digiuno di lcd.. abbiate pazienza :smiley:

Ciao sverdrup

ma usando lo scanner I2C cosa Ti trova attacato?

Ciao Uwe

ciao uwefed,
con lo scanner vengono fuori una serie di quadratini, e di simboli incomprensibili??

ciao sverdrup

Hai messo il Baudrate del terminale a 19200?

prova di mettere la variabile
byte end_address a 128; ( originariamente é a 100)

Ciao Uwe

A pagina 2 del manuale display c'è scritto a un certo punto:
A jumper link (J1) is required for i2c mode.
Io avevo saldato un ponticello tra i 2 fori J1 nel retro della piastrina che monta il modulo real time clock.
Lo sto usando con questo ponticello (non so se può servire ma prova).
Poi carica il programma come lo avevo postato nel vecchio forum, togliendo nella riga
//cancella_display(); //cancello il display i 2 slash iniziali in modo che diventi
cancella_display(); //cancello il display.
L'indirizzo del dispay è
byte addr = 0x63;
A me funzionava...

Ciao