Ciao ragazzi, mi rivolgo a voi perchè non riesco a far funzionare una EEPROM 24LC256... in pratica ho eseguito esattamente le procedure indicate su questo indirizzo http://www.hobbytronics.co.uk/arduino-external-eeprom . In pratica quando apro la connessione con la libreria wire.h e cerco di leggere sulla EEPROM Wire.available() mi torna sempre false! Ho realizzato il circuito su una breadbord, e ho testato i contatti con un tester...e sembra che no ci siano problemi, e per questo non capisco! Mi potete aiutare?
cosa intendi per "False"?
Ciao Uwe
Uso questa funzione:
byte readEEPROM(int deviceaddress, unsigned int eeaddress )
{
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.send((int)(eeaddress >> 8)); // MSB
Wire.send((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.receive();
return rdata;
}
Arrivato a questa riga...
if (Wire.available()) rdata = Wire.receive();
...Wire.available() non è mai true, quindi dovrebbe significare che l'ic non mi ha inviato niente??
Edit:
Dimenticavo di dire che chiamo questa funzione con readEEPROM(0x50, 0x0);
dove 0x50 è l'indirizzo del'ic e 0x0 l'indirizzo su cui leggere!
Hai provato di controllare l' indirizzo del EEprom con Arduino Playground - I2cScanner ?
Fai una foto del Tuo circuito.
Ciao Uwe
Uhm... non c'è bisogno perchè i contatti sono tutti testati col multimetro e dovrebbero essere al loro posto. L'ic è collegato così:
Pin1 (Address1)> GND
Pin2 (Address2)> GND
Pin3 (Address3)> GND
Pin4 (Vss)> GND
Pin5 (SDA)> Arduino Pin 20
Pin6 (SCL)> Arduino Pin 21
Pin7 (WP)> GND
Pin8 (Vcc)> Arduino 5v
E' il circuito sembrerebbe funzionare perchè...questo è l'output seriale di quello sketch che mi hai linkato:
Scanning...
I2C device found at address 0x50 !
done
[/done]
Quindi...ora dove sta il problema?
prova a mettere
while(!Wire.available());
in questo modo però se non arriva la risposta il codice rimane bloccato lì.
Potresti mettere un timeout.
L' eeprom ha bisogno di tempo per scivere un dato. Forse i 5ms del sketch esempio sono troppo poco. Il datasheet dice "Page Write Time 5 ms max" ma prova comunque di aspettare 10ms dopo la scrittura.
Ciao Uwe
Niente ragazzi... Wire.available continua a dare sempre problemi. PaoloP ho provato a mettere quel while e a quanto pare na volta entrato nel ciclo non se ne esce più. Stessa cosa, Uwe, se provo ad allungare il delay dopo il write...restra sempre bloccato nel while...