Go Down

Topic: Problemi di comunicazione con 24LC256 EEPROM (Read 552 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy