Formato numeri scritti in una EEPROM esterna

Salve, mi chiamo Claudio
mi sto avventurando nel mondo di Arduino, ho delle vecchie reminiscenze di Basic che usavo per gestire gli I/O dell porta parallela del PC.

Sto testando uno Sketch per colloquiare con la EEPROM esterna e funziona e ora lo andrò ad integrare nello Sketch di gestione dello stepper per memorizzare il senso di rotazione qualora dovesse mancare l'alimentazione, avrei bisogno dei seguenti chiarimenti:

1° Se sostituisco la 24C256 con una 24C64, il valore "0" viene letto come "255"

Ho visto che l'indirizzo delle EEprom fino alla 1024 ( con A1,A2,A3 a 0) è sempre lo stesso, ossia 80 o 0x50.

2° Se scrivo "0" leggo "0", se scrivo "1" leggo "1", ma se scrivo "2", leggo "7", il formato del dato che scrivo, deve essere scritto con qualche prefisso davanti ?

Allego lo Sketch
Grazie

#‎include<U+202C> <Wire.h>
byte num;
int EppAdr = 80;
void setup()
{
Wire.begin();
Serial.begin(9600);
// set the 24C256 eeprom address to 0
Wire.beginTransmission(EppAdr);
Wire.write(0); // address low byte
// Wire.write(0); // address high byte
Wire.endTransmission();
// read 1 byte, from address 0

// MI SERVE SAPERE ALL'AVVIO DEL PROGRAMMA CHE VALORE C'è NELLA MEMORIA ALL'INDIRIZZO "0"
Wire.requestFrom(EppAdr, 1);
while(Wire.available())
{
num = Wire.read();
}
}
void loop()
{
// write "1" to 24C256 eeprom at address zero
Wire.beginTransmission(EppAdr);
Wire.write(0); // address low byte
// Wire.write(0); // address high byte
Wire.write(1); // any more send starts writing
Wire.endTransmission();
// read 1 byte, from address 0
Wire.requestFrom(EppAdr, 1);
while(Wire.available()) {
num = Wire.read();
}
Serial.print("num = ");
Serial.println(num, DEC);
delay(500);
// write "0" to 24C256 eeprom at address zero
Wire.beginTransmission(EppAdr);
Wire.write(0); // address low byte
// Wire.write(0); // address high byte
Wire.write(0); // any more send starts writing
Wire.endTransmission();
// read 1 byte, from address 0
Wire.requestFrom(EppAdr, 1);
while(Wire.available()) {
num = Wire.read();
}
Serial.print("num = ");
Serial.println(num, DEC);
// next time loop runs, it should retrieve the
// same number it wrote last time... even if you
// shut off the power
delay(500);

24C64 o 24LC64?

Comunque... L'indirizzo I2C dei chip è composto da una parte fissa e da una parte variabile. La parte fissa è codificata nell'hardware del chip, la parte variabile la imposti mediante i pin A0/A1/A2 del chip di EEPROM: collegando un pin a massa selezioni il valore 0 per il corrispondente pin/bit dell'indirizzo, collegando a +5V selezioni il valore 1.

Le celle delle memorie 24Cxxx sono in genere organizzate in byte (8 bit). E sono indirizzate da un int, che sono 2 byte: tu devi spedire prima il byte più significativo dell'indirizzo e poi il byte meno significativo. Puoi usare le funzioni predefinite lowByte e highByte per dividere l'int che contiene indirizzo. Se spedisci solo 1 byte, credo che poi il dato che mandi venga intepretato sempre come parte dell'indirizzo. Nel tuo codice mi pare infatti di vedere l'invio di solo 1 byte.

Grazie per la risposta,
trattasi di 24C64, gli indirizzi A0 - A1 -A2 sono a GND, quindi l'indirizzo dovrebbe essere corretto.

Nel programma l'MSB è remmato // altrimenti proprio non funziona, l'ho eliminato in qunto leggendo sui vari forum ho visto che è un problema comune.

Guarda se questa libreria ti può essere utile
--> GitHub - JChristensen/extEEPROM: Arduino library to support external I2C EEPROMs.