EEPROM Arduino Uno

Non essendo molto esperto nel campo di Arduino mi chiedevo se fosse possibile utilizzare la memoria EEPROM per memorizzare appunto dei valori presi da un sensore di temperatura ogni mezzora durante l'arco della giornata per poi visualizzarli sul pc la sera.
Pongo alcune domande:

-L'Arduino UNO ha 1kb di EEPROM (ATmega328), cosa succede nel caso la memoria finisse?
-Posso aggiungere una EEPROM esterna di dimensioni maggiori?
-I dati salvati sulla memoria rimangono anche se accidentalmente l'Arduino non riceve più alimentazione?

Grazie a coloro che risponderanno :slight_smile:

memorizzare appunto dei valori presi da un sensore di temperatura ogni mezzora durante l'arco della giornata

in teoria la eeprom non è fatta per essere riscritta in modo continuo, hai 100.000 accessi prima di dar fine alla sua vita, non è una pratica applicata per ovvi motivi, di solito la si usa solo in lettura una volta scritta in modo definitivo
Es username, password, variabili di tipo definite, piccole pagine web ecc

cosa succede nel caso la memoria finisse?

Non è una questione di finire, perchè sei tu nello sketch a definire le posizioni di memoria da occupare, la memoria dovrà essere ben definita dallo spazio occupato dalle tue variabili, per poter essere nello stesso tempo correttamente richiamata, non è come la flash che è "autogestita" dal programma

Posso aggiungere una EEPROM esterna di dimensioni maggiori?

si, ma a questo punto ti conviene usare una SD card o micro sd, dura più a lungo 1.000.000 di scritture ed è molto più capiente

I dati salvati sulla memoria rimangono anche se accidentalmente l'Arduino non riceve più alimentazione?

si certo (se parli di eeprom) è una memoria permanente come la SD card

Se hai bisogno di archiviare dei dati per farne grafici, statistiche ecc dovresti orientarti su un datalogger la via migliore è un SD o spedire i dati a un server

1 Like

pablos:

memorizzare appunto dei valori presi da un sensore di temperatura ogni mezzora durante l'arco della giornata

in teoria la eeprom non è fatta per essere riscritta in modo continuo, hai 100.000 accessi prima di dar fine alla sua vita, non è una pratica applicata per ovvi motivi, di solito la si usa solo in lettura una volta scritta in modo definitivo
Es username, password, variabili di tipo definite, piccole pagine web ecc

Non esagerare e andare in paranoia.
Per primo il problema non sono gli "accessi", ma le scritture/cancelazioni della EEPROM.
Poi per registrare anche ogni giorno la temperatura ci metti 270 anni per arrivare a 100000 scriture.

cosa succede nel caso la memoria finisse?

Dipende dal programma che scrivi. Se non lo fermi puó sovrascrivere i dati giá memorizzati. Devi comunque pensare di gestire in qualche modo un indicatore per sapere quale cella di memori é giá usata e quale é la sucessiva libera.

Posso aggiungere una EEPROM esterna di dimensioni maggiori?

certo. Quelli hanno anche una maggiore vita come numero di scritture. Puoi anche usare una FRAM della Ramtron che sono ram che non perdono il contenuto quando manca l'alimentazione e sono praticamente riscrivibili al infinito.

ciao Uwe

In effetti la parnoia della scrittura c'è... ma un neofita che vuole imparare Arduino come deve fare ? io ho fatto un sacco di prove prima di ottenere quello che desideravo, scrivere un float sulla eeprom e leggerli la sera,se arriviamo a 10 mila che cosa succede esattamente ?

No la paranoia era per me, non per te.

Ho sbagliato termine che non è accessi, comunque il passaggio corretto l'ho scritto in precedenza.

non è fatta per essere riscritta in modo continuo

diciamo che si era capito.

Per arrivare a 100.000 sono 5 anni circa con una scrittura ogni mezzora (che è quella che indica lui) e 2.5 ogni quarto d'ora

In linea di principio e secondo quello che ci hanno insegnato la Eeprom non va usata in questo modo, ma ci si carica un programma una volta e basta e al massimo si fanno upgrade riscrivendole col nuove versioni.
Poi nessuno mi vieta di usare il chip come poggia pentola o per stabilizzare il tavolo quando dondola :wink:

per uno storage di dati si usa come logica una SD

ciao

Hai ragone.. basta fare due calcoli per farsi passare la paura! ma per noi neofiti - o meglio - almeno per me, questo fatto del limite ..incute :slight_smile:

Ma non ce nè paura, anzi che un arduino duri 5 anni lo devo ancora vedere :slight_smile: e poi al massimo lo butti

La EEPROM effettivamente è un tipo di memoria nata per contenere informazioni eventualmente soggette ad aggiornamenti periodici. Quindi effettivamente non dovrebbe essere usata come una RAM, con scritture continue, ma nemmeno bisogan pensare obbligatoriamente a quelle delle MB dei PC, con aggiornamenti annuali o biennali, e comunque per un ristretto arco di tempo (che poi è poco più della vita commerciale della MB, se il Costruttore non ha un marchio rinomato.
Alla fine esistono le vie di mezzo. Giustamente 100.000 operazioni di scrittura/cancellazione garantiscono una durata eccellente, ma tutto va rapportato all'uso che se ne fa; è vero che una scrittura di un valore di temperatura al giorno fa 270 anni (anche se non ho verificato il conto, mi fido di Uwe), ma se le scritture diventassero una ogni 15 minuti gli anni sarebbero meno di tre; se pensiamo ad un'applicazione stand-alone definitiva assolutamente non potrebbe andare bene.
Come sempre bisogna ragionare correttamente sugli obiettivi e trovare la soluzione più confacente.

Ciao,
per usare la eeprom ti conviene crearti una mappa della memoria, così puoi capire se ti basta o no ed è più facile scrivere il codice, guarda le immagini in fondo a questo progetto per prendere spunto.

Alberto

I 100.000 cicli di ri/scrittura sono il limite riferito alla EEPROM interna, attenzione. Probabilmente, per contenere i costi, nella realizzazione dei microcontrollori vengono scelte memorie con una vita media più corta del solito.

Qualunque chip EEPROM esterno che andate a prendere, tipo un 24LC256 o un 24LC512, riporta sul suo datasheet una vita media di 1.000.000 (un milione) di cicli di ri/scrittura. Un chip 24LC512 sono 512Kbit, 32 kB di spazio. Anche salvando ora, data e temperatura ogni giorno, ammettendo un consumo di circa 12 byte per scrittura, per riempire 32768 byte ci vogliono 2730 salvataggi, 113 giorni. Se poi uno non svuota la EEPROM e ricomincia da capo, per consumare 1.000.000 di riscritture ammettendo una ripartenza da $0000 ogni 113, sono 311.643 anni....

FedericoC:
Non essendo molto esperto nel campo di Arduino mi chiedevo se fosse possibile utilizzare la memoria EEPROM per memorizzare appunto dei valori presi da un sensore di temperatura ogni mezzora durante l'arco della giornata per poi visualizzarli sul pc la sera.

Quindi, tu svuoteresti la memoria ogni sera. Considerando 10.000 cicli di ri/scrittura, considerando 12 byte per lettura, considerando una media di 48 scritture giornaliere, ogni 1,7 giorni ripassi sulle stesse celle, perché 1024/(12*48)=1,77.
Quindi dopo 5000 giorni ha rovinato la EEPROM. 5000 giorni sono 15 anni. Possiamo starci, dai XD

Pongo alcune domande:

-L'Arduino UNO ha 1kb di EEPROM (ATmega328), cosa succede nel caso la memoria finisse?

Devi prevedere tu una ripartenza dalla cella $0000, sovrascrivendo le letture già salvate.

-Posso aggiungere una EEPROM esterna di dimensioni maggiori?

Senz'altro. COme detto, esistono chip esterni con capienza differente. Un 24LC512 (512Kbit, 32 kB) costa uno o due euro. Ci accedi via I2C.

-I dati salvati sulla memoria rimangono anche se accidentalmente l'Arduino non riceve più alimentazione?

Finché non li cancelli tu, non distruggi il chip oppure vuoi accederci dopo qualche centinaio d'anni :stuck_out_tongue_closed_eyes:

Grazie a coloro che risponderanno :slight_smile:

Figurati

E da dire che sui vecchi chip della serie DAST la EEPROM era una novità e 10mila(se non sbaglio erano di piu o di meno non ricordo) cicli di scrittura erano praticamente infiniti! :grin:

Grazie ragazzi :wink: credo di prendere una shield con l'sd card.
Un ultima domanda: Anche la memoria flash del ATmega328 ha un limite di scrittura/lettura?

FedericoC:
Grazie ragazzi :wink: credo di prendere una shield con l'sd card.
Un ultima domanda: Anche la memoria flash del ATmega328 ha un limite di scrittura/lettura?

10.000 riscritture

10.000 riscritture

:fearful: sono un po pochi, e io che correggo gli sketch anche solo per un commento D:

FedericoC:

10.000 riscritture

:fearful: sono un po pochi, e io che correggo gli sketch anche solo per un commento D:

:sweat_smile:
Santi chip in formato DIP!! :stuck_out_tongue_closed_eyes:

FedericoC:

10.000 riscritture

:fearful: sono un po pochi, e io che correggo gli sketch anche solo per un commento D:

Anche cosí ci metti un eternitá per raggiungere 10000 Upload. Io ci ho messo 2 anni per scrivere 10000 post :wink:

Ciao Uwe

uwefed:
Anche cosí ci metti un eternitá per raggiungere 10000 Upload

Meglio essere ottimisti :wink: