Domande su eeprom

Salve gente, stavolta mi sono cimentato nell'usare le famigerate eeprom 24LC256 per me totalmente ignote fino a ieri, perciò perdonate le domande che a breve esporrò. Da quello che ho capito le eeprom sono delle memorie non volatili e si potrebbero rappresentare con molta fantasia come un edificio con delle stanze dove in ogni stanza ci sono degli scaffali per riporre della merce (passatemi il paragone, mi servirà per capire). Qui sotto metto un esempio per come trasmetto i dati:

Wire.beginTransmission(0x50); // indirizzo Wire.send(high); // stanza Wire.send(low); // scaffale Wire.send(byte(data)); // merce Wire.endTransmission(); delay(5);

Ora espongo le cose che non comprendo: 1- Le eeprom hanno un limite di scrittura, nel senso che non possono essere scritte più di 100000 volte. Ogni volta che scrivo un singolo byte, il ciclo di scritture diminuisce? Ad esempio se dovessi memorizzare un'array di char con 16 caratteri, viene considerato come una scrittura o come 16? 2- Esiste un modo per cancellare la eeprom totalmente o solo in parte prima di riscriverci sopra? Ad esempio se in un'area di memoria (la stanza citata nell'esempio sopra) immetto un messaggio per un display lcd lungo 16 caratteri e successivamente lo sovrascrivo con uno più corto, è consigliabile mettere un carattere alla fine del messaggio per riconoscerne la fine o quell'area si cancella? 3- Come conviene gestire i dati da memorizzare? Ad esempio sul primo settore metterò le variabili per gestire lo stato delle uscite degli shift register, quindi 1 o 0 e qui non ci sono problemi; se dovessi memorizzare degli integer (che nel mio caso non andranno mai oltre i 255 come valore) li converto in byte prima di inviarli alla eeprom e li riconverto poi quando li devo riprendere. Invece se dovessi loggare dei float, come ad esempio i valori restituiti da un sensore, come conviene gestirli? Per oggi basta, ho rotto abbastanza con domande niubbe.... :) Saluti a tutti.

domanda 2 Nel C in generale a fine stringa si mette il carattere '\0' (è un carattere solo!). Questo è "il segnale" di fine stringa e deve esserci per tutte l funzioni sulle stringe (string.h), pena loop infiniti o overflow. Usalo sempre con le stringhe, ti fa risparmiare molti malditesta!

comunque credo che il limite sia per "stanza"

domanda 3: azz... allora o dividi le zone di memoria in base all'utilizzo medio, quindi sai che tutto tra l'indirizzo X e Y-1 sono interi, tra Y e Z-1 float ecc... oppure ti fai una tablee indirizzo->tipo->dimensione (cos' un'array di interi occupa lo stesso spazio in tabella di un'array di 255 interi) salvi tutto sulla fine dell'eeprom-1, all'ultimo indirizzo metti l'indirizzo di inizio tabella. così all'accensione l'eggi l'ultima area di memoria, di conseguenza leggi la tua tabella e voilà

oppure unisci l'idea della tabella con la prima, ti salvi in memoria X, Y, Z ecc... opurre..... ;D

prendo la domanda 1

Risposta: non c'é un contatore; é la vita media garantita prima che si rompi. Visto ogni scrittura " danneggia " un po la cella di memoria non si possono scrivere un numero infinito di volte, ma il numero di scritture é limitato.

Comfermo la risposta.

E la risposta é giusta ... applausi ... grazie, grazie...

sul serio: memorizzi 16 byte: credo che sono 16 memorizzazioni; in teoria sarebbe possibile caricare un blocco di memoria completo e poi scriverlo ma credo che la libreria wire non lo prevede.

Ciao Uwe