Go Down

Topic: Utilizzare una EEPROM 24WC16P con Arduino (Read 3656 times) previous topic - next topic

milionario

@garinus il tuo codice rispedisce indietro 255(ÿ), probabilmente a questo punto peso sia un problema di collegamento o lo sketch ha gli indirizzi sbagliati. Ho provato con una24WC16P e una 24c16 che sono uguali come memoria e da sempre 255

83darking83

Esatto! Hai il mio stesso problema!
Ritorna sempre 255, maledizione!

Secondo me, guardando il codice, dipende dal fatto che non c'è comunicazione con la EEPROM:

Code: [Select]

byte rdata = 0xFF;
 if (Wire.available()) rdata = Wire.receive();
return rdata;


Infatti, (0xFF)16 = (255)10

milionario

io ho provato per vedere se ci fosse comunicazione cosi:

Code: [Select]

if (Wire.available())
{
rdata = Wire.receive();
Serial.print("aviable");
}
return rdata;


e cosi non mi entrava mai nell'if

allora avrete il codice della memoria diverso..
bisogna cercare nel datasheet

milionario

con quel codice ho provato anche su una atmel 24c16 e non funziona forse avro sbagliato piedinatura ci controllo

milionario

niente non ci riesco a farlo andare provo a togliere l'alimentazione dalla e2prom e mi da sempre 255 non comunica. come si puo fare?

83darking83

Stavo per provare il codice di garinus, ma vedo che già non è andato a te...

Devo pensare che abbiamo due Arduino con i pin 4 e 5 fuori uso??  :-/

milionario

no funzionano ho provato a leggere un valore analogico e vanno, ho provato anche con i pin digitali, ma niente sembra cha sia attaccata male la  E2PROM... secondo me ha qualche cosa il pin 7 (WP)
:)

ovvio è il write protection
deve avere uno stato da datasheet sennò non si scrive....

milionario

sulle 24C16 deve essere messo a gnd per R/W in queta non lo sò. Però io ho provato con due memorie già citate sopra e non funge con nessuna

83darking83

#25
Jun 25, 2010, 09:14 pm Last Edit: Jun 25, 2010, 09:14 pm by 83darking83 Reason: 1
Se non sbaglio, nel datasheet dice che va connesso a massa per abilitarne la scrittura...


83darking83

#27
Jun 26, 2010, 07:30 pm Last Edit: Jun 26, 2010, 07:33 pm by 83darking83 Reason: 1
Dopo aver scoperto questo:
"On the Arduino Mega, SDA is digital pin 20 and SCL is 21"
e aver seguito alla lettera questa guida:
http://10kohms.com/arduino-external-eeprom-24lc256
ed aver ottenuto l'ennesimo maledetto 255.... RINUNCIO!   >:(

In pratica, ho visto che, in fase di lettura, dopo il comando:
Code: [Select]
Wire.requestFrom(deviceaddress,1);
il successivo:
Code: [Select]
Wire.available()
è uguale a NULL!
Quindi le ipotesi sono due: o non scrive nulla (perchè non ha nessun byte da ricevere) o entrambe (ho provato anche con una SLA24C14D con la stessa piedinatura) le EEPROM non funzionano!

kokiua

#28
Jun 26, 2010, 10:14 pm Last Edit: Jun 27, 2010, 12:26 pm by kokiua Reason: 1
Scusate l'intrusione: ma mi è venuto il dubbio che l'indirizzo della eeprom non sia impostato correttamente, in quanto sul datasheet risulta che dovrebbe essere 1010 0xxx dove xxx dipende da come sono impostati i pin A0, A1, A2.
Nel vostro codice invece indicate:
Code: [Select]
--- (A2, A1, A0 to GND for 1010000 (0x50) address.)
invece di 0xA0 ... (B10100000)
Riporto qui il testo del datasheet:
Quote
The four most significant bits of the 8-bit slave address are fixed as 1010 for the CAT24WC01/02/04/08/16 (see Fig. 5). The next three significant bits (A2, A1, A0) are the device address bits and define which device or which part of the device the Master is accessing.

Che traducendolo sarebbe "l 4 bit più significativi dell'8-bit slave address sono fissati a 1010"...
Poi c'è comunque un dubbio se i 3 bit di indirizzo siano A2, A1, A0 oppure A3, A2, A1 (The next three significant bits) ... ma che nel caso siano tutti a 0 il problema non si pone  ;)

uwefed

#29
Jun 27, 2010, 12:31 am Last Edit: Jun 27, 2010, 12:52 am by uwefed Reason: 1
Ciao a Tutti
avete provato questo esempio?
http://www.arduino.cc/playground/Code/I2CEEPROM24C1024
dovrebbe funzionare mettendo il valore #define MAX_ADDRESS a 2048
la libreria é fatta per un eprom col indirizzo 0x50 che dovrebbe essere il 24WC16.
Io l' ho provato con un 24LC256 e mi funziona.
Ciao Uwe

Go Up