EEPROM I2C non mi riesce farla funzionare

innanzitutto ciao a tutti, è la prima volta che scrivo qua anche se ormai è talmente tanto tempo che ci bazzico che mi sento gia di casa :)

veniamo subito al dunque, allora... io ho una eeprom I2C e per certo so che funziona, so che il suo indirizzo I2C è 0x50, per certo so che la ho collegata correttamente al mio arduino (e qui non ci piove perchè uno sketch "I2C device scanning" me lo vede)

il problema grosso (credo) è che non so per certo la sua sigla, anche se credo sia 24C02 o 24C01 (l'integrato non ha più la scritta stampata sopra)... penso che non sia troppo un problema... alla fine eeprom i2c rimane...

su internet si trova solo e soltanto sempre lo stesso sketch che a tutti (tranne a me, puntualmente) funziona questo è lo sketch che uso per fare le prove:

#include  "Wire.h"    // for I2C


byte d=0;

void setup() {
    delay(5000);
    Serial.begin(9600); // for screen output
    Wire.begin();   // wake up, I2C!
}

void writeData(int device, unsigned int add, byte data) {
// writes a byte of data 'data' to the chip at I2C address 'device', in memory location 'add'
    Wire.beginTransmission(device);
    Wire.write((int)(add >> 8));   // left-part of pointer address
    Wire.write((int)(add & 0xFF)); // and the right
    Wire.write(data);
    Wire.endTransmission();
    delay(10);
}

byte readData(int device, unsigned int add) {
// reads a byte of data from memory location 'add' in chip at I2C address 'device'
    byte result;  // returned value
    Wire.beginTransmission(device); //  these three lines set the pointer position in the EEPROM
    Wire.write((int)(add >> 8));   // left-part of pointer address
    Wire.write((int)(add & 0xFF)); // and the right
    Wire.endTransmission();
    Wire.requestFrom(device,1); // now get the byte of data...
    result = Wire.read();  return result; // and return it as a result of the function readData
}

void loop() {
 d = readData(0x50, 24);       
 Serial.println(d);
 delay(2000);
}

mi restituisce sempre e comunque 255, non capisco il perchè! qualsiasi locazione vado a leggere sempre inesorabilmente ogni 2 secondi un 255!!! inoltre so che anche la funzione read non va perchè posso provare a scrivere quello che voglio ma se poi la vado a leggere con altri metodi, mi ritornano i vecchi valori senza una virgola spostata...

io so per certo che l'errore che faccio è una stupidata colossale, ma non riesco a trovarlo grazie per l'attenzione :)

Anche io ho avuto qualche difficoltà a capire come funziona la libreria Wire. Ecco la sequenza corretta per la scrittura:

  Wire.beginTransmission(Adr);             // device address
  Wire.write(0x04);                        // set start address
  Wire.write(dato1);                       // primo byte
  Wire.write(dato2);                       // secondo byte
  Wire.write(dato3);                       // terzo byte
  Wire.endTransmission();                  // invia dati

Ed ecco quella per la lettura:

  Wire.beginTransmission(Adr);             // device address
  Wire.write(0x04);                        // set start address
  Wire.endTransmission();                  // invia dati

  Wire.requestFrom(Adr, 3);               // richiesta dati
  dato1 = Wire.read();                 // primo byte
  dato2 = Wire.read();                 // secondo byte
  dato3 = Wire.read();                 // terzo byte

grazie mille per la risposta velocissima!

però non ho ben capito gli sketch che hai messo, correggimi se sbaglio: i byte 1 2 3 ecc.. ne posso mettere di più o di meno a scelta mia e di conseguenza scriverò o leggerò a partire dallo start address tutti i byte in ordine uno dopo l'altro

NULLA HO CAPITO GRAZIE MILLEEEEEEEEEEEEEEEEEEEEE!!!!!! non puoi capire che mano che mi hai dato!!! grazie infinite davvero!!!!

Attenzione all'indirizzo della cella da cui leggi/scrivi. Usando un solo byte come nell'esempio di cyberhs tu puoi accedere solo alle prime 256 locazioni di memoria del tuo chip EEPROM. Controlla che taglio ha, cioè quante locazioni di memoria contiene. Se sono più di 256, devi spedirgli 2 byte per l'indirizzo, come nel 1° esempio che hai pubblicato.