EEPROM 24C164, funzionamento??

Ciao ragazzi!
Mi sto cimentando nell'usare una EEPROM 24C164 che da quanto ho capito è una EEPROM da 16Kbyte organizzata in 8 blocchi da 2Kbyte. Voglio utilizzarla come registro di eventi per un piccolo progetto di demotica che sto facendo ma proprio non riesco ad utilizzarla. Come tutorial ho letto quello presente sul sito di arduino

http://playground.arduino.cc/Code/I2CEEPROM

ma tuttavia quel tutorial non utilizza la stessa EEPROM che ho io e non riesco a capire quali modifiche devo apportare al codice per adattarlo alla mia memoria.

A livello Hardware ho collegato tutto come indicato nel tutorial: Pin 1-2-3-4-7 a GND, Pin 8 a Vcc, Pin 5 a A4 e Pin 6 a A5

Qualcuno può aiutarmi??
Vorrei realizzare due semplici funzioni, una di lettura che passando l'indirizzo restituisce il dato corrispondente e una di scrittura che passando l'indirizzo e il dato scriva sulla EEPROM il dato.

Grazie a tutti nel caso :smiley:

La prima cosa da cambiare nello sketch, sono le chiamate della Wire. Al posto di tutti i Wire.send devi mettere Wire.write e al posto di tutti i Wire.receive devi mettere Wire.read poi ti salvi il file e già che ci sei gli dai estensione .ino. Oltre a questo se controlli il datasheet della tua 24C164 ti accorgi che Gli 8 indirizzi assegnabili all'eeprom (settando high o low i pin A0-A1-A2) non sono uguali alla 24C64 usata in quello sketch. Infatti cambia il control code iniziale (1 per la tua, 1010 per la 24c64, ovviamente in binario). Per cui seguendo il collegamento fatto nell'esempio (che dici di avere eseguito anche te) dove A0, A1 e A2 sono messi a GND e quindi valgono tre 0, la tua eeprom avrà in binario un indirizzo 1000 che equivale a 0x08 in esadecimale, a differenza della eeprom 24c64 usata nell'esempio che avrebbe un indirizzo 1010000 che equivale a 0x50. Ecco che nello sketch devi sostituire tutti gli 0x50 con 0x08 e potrebbe quasi essere tutto :wink:

La cosa di cambiare le funzioni l'avevo già fatta perché il compilatore mi diceva di farlo quando andavo a scriverlo sull'arcuino. Ho cambiato l'indirizzo e ho messo 0x08 ma mi da letture a casaccio... Ho scorso un po' una scorsa al datasheet

alla pagina 10 fig 7 c'è come deve essere il byte di indirizzamento. Non dovrebbe essere tipo B10000001 ovvero 0x81?? perché lì dice che l'ultimo bit serve a configurare la modalità di Lettura/Scrittura e per leggere deve essere 1... almeno così l'ho capito io dimmi se sbaglio... comunque anche con 0x81 non funziona...

Per l'indirizzo della EEPROM puoi usare in I2Cscanner --> Arduino/MultiSpeedI2CScanner.ino at master · RobTillaart/Arduino · GitHub

Ho provato e quello scanner mi rileva dispositivi dall'indirizzo 0x50 all'indirizzo 0x57. Comunque, e mi scuso per la cosa, la EEPROM non è 24C164 ma 24C16N scusate ma da vicino ci vedo un po male...

quest acosa comunque come va interpretata? Potrebbe essere di indirizzo B01010000 e poi gli ultimi 3 bit si riferiscono agli 8 blocchi di memoria?

Lo scanner dice giusto... la 24C16 ha indirizzi che vanno da 0x50 a 0x57 se hai messo A0, A1 e A2 a gnd devi avere indirizzo 0x50

Ok ma allora lo sketch del tutorial dovrebbe andare bene no? eppure continua a darmi continue letture senza senso. Sulla seriale leggo una schiera continua di y con due puntini sopra... non so più che farci :fearful: :fearful:

Hai messo le R di pullup su SCL e su SDA ?

Certo, due resistori da 1Kohm verso Vcc

La lettera "ÿ" corrisponde a 0xFF, ossia tutti 1 in binario. Sembra quasi che l'uscita rimanga sempre a livello alto. La butto lì: non può essere che servano resistori di pulldown?