Go Down

Topic: Problemi di comunicazione con 24LC256 EEPROM (Read 540 times) previous topic - next topic

psoftware

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?

uwefed


psoftware

#2
Jul 17, 2013, 12:39 am Last Edit: Jul 17, 2013, 01:10 am by psoftware Reason: 1
Uso questa funzione:
Code: [Select]
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...
Code: [Select]
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!

uwefed

#3
Jul 17, 2013, 08:36 am Last Edit: Jul 17, 2013, 08:40 am by uwefed Reason: 1
Hai provato di controllare l' indirizzo del EEprom con http://playground.arduino.cc/Main/I2cScanner ?
Fai una foto del Tuo circuito.
Ciao Uwe

psoftware

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:
Code: [Select]

Scanning...
I2C device found at address 0x50  !
done
[/done]

Quindi...ora dove sta il problema?

PaoloP

prova a mettere
Code: [Select]
while(!Wire.available());
in questo modo però se non arriva la risposta il codice rimane bloccato lì.
Potresti mettere un timeout.

uwefed

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

psoftware

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...

Go Up