Pages: [1]   Go Down
Author Topic: Problemi di comunicazione con 24LC256 EEPROM  (Read 512 times)
0 Members and 1 Guest are viewing this topic.
Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 57
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

cosa intendi per "False"?
Ciao Uwe
Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 57
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uso questa funzione:
Code:
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:
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!
« Last Edit: July 16, 2013, 06:10:12 pm by psoftware » Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai provato di controllare l' indirizzo del EEprom con http://playground.arduino.cc/Main/I2cScanner ?
Fai una foto del Tuo circuito.
Ciao Uwe
« Last Edit: July 17, 2013, 01:40:04 am by uwefed » Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 57
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Scanning...
I2C device found at address 0x50  !
done
[/done]

Quindi...ora dove sta il problema?
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7265
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 57
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: