Memorizzare dati allo spegnimento.

Salve a tutti, sono entrato nel mondo di Arduino da pochi giorni e sto cercando di realizzare un mio progetto. Fino ad ora ho sempre usato i PIC.
Non ho capito, seguendo i manuali, se e' possibile, ed eventualmente come, memorizzare alcuni valori in memoria per poterli poi riprendere alla riaccensione di arduino. In pratica ho bisogno di far "ricordare ad arduino (e' un MEGA 2560 rev 3) alcuni valori dopo lo spegnimento e la riaccensione. Ovviamente sensa usare batterie ecc..
Con i PIC si puo' fare, quindi di certo anche con Arduino... ma come???
Grazie

Il ATmega2560 sul Arduino Mega 2560 ha 4 kByte di EEprom interna che non vengono usati e che puoi usare per il Tuo lo scopo
Con la libreria EEprom puoi scrivere e leggere l' eprom

Ciao Uwe

Dipende dal tipo di dato. Le celle sono da 8 bit, per valori superiori (tipo il risultato di un ADC a 10 bit) devi fare qualche magheggio con i bitwise.

Rammenta che le celle hanno un ciclo di vita, che sebbene tendente al millemila volte, è cmq un numero finito (circa 100.000 scritture, ma è un dato ottimistico).

Grazie mille, era proprio quello che cercavo....
per quanto riguarda i cicli di scrittura 100.000 credo siano una enormita' per me, anche se lo spegnessi 2 volte al giorno (non avverra') durerebbe piu' di 100 anni...... spero proprio di arrivare a vedere quando si blocca tutto perche' la memoria si e' esaurita! :smiley:
Per i dati si sono a 8 bit, forse qualcosa a 16, ma li separo in 2 e poi li riunisco.
Grazie mille.

Se i dati non sono tantissimi, puoi implementare un circular buffer:
www.atmel.com/images/doc2526.pdf?

In questo modo risparmi enormemente i cicli di scrittura per singola cella.

leo72:
Se i dati non sono tantissimi, puoi implementare un circular buffer:
www.atmel.com/images/doc2526.pdf?

In questo modo risparmi enormemente i cicli di scrittura per singola cella.

Interessante questa tecnica, non la conoscevo.

prendo spunto dall'oggetto del post, rispetto a quanto poi postato dallo stesso realizzatore del post....

Il titolo prevede "memorizzare dati allo SPEGNIMENTO"...
come in altri post gli viene proposto di salvare i dati in eeprom...con conseguenti limiti di scrittura.
Lui risponde va benissimo xkè spegnerò 2 volte al giorno.

Premesso che tutto fila liscio e non fa una grinza ma....
se per caso lui progetta un datalogger che registra un dato ogni ciclo (facciamo 1 ogni 100ms?) sono 10 al secondo
600 al minuto, 3600 all'ora circa 100.000 quasi in un giorno....e PUFF eprom andata...

Lo so è un esempio estremo!!!

Allora vengo al dunque....come dire al nostro arduino di salvare VERAMENTE solo allo SPEGNIMENTO?
Come faccio a prevedere lo spegnimento?
Se per tale occasione intendiamo la venuta meno (volontaria oppure no) dell'alimentazione?

Sarò riuscito a spiegarmi? Rileggendo il testo la vedo dura....sarà l'orario e il fatto che non ho mangiato ancora!!! ]:smiley: ]:smiley:

matrix_77:
Premesso che tutto fila liscio e non fa una grinza ma....
se per caso lui progetta un datalogger che registra un dato ogni ciclo (facciamo 1 ogni 100ms?) sono 10 al secondo
600 al minuto, 3600 all'ora circa 10.000 al giorno....dieci giorni e PUFF eprom andata...
Lo so è un esempio estremo!!!

No, è solo un esempio sbagliato ...
... ti stai scrivendo i dati ad ogni LETTURA non allo SPEGNIMENTO :wink:

Lui li vuole salvare allo spegnimento che, così ha detto, avviene al massimo un paio di volte al giorno, quindi un paio di scritture sulla EEPROM al giorno.

Ovviamente dovrà prevedere un segnale (che può anche essere un interrupt ... così bypassa qualsiasi altra cosa stia facendo) che lo avverte che il sistema si sta spegnendo e che occorre salvare i dati.

Normalmente questo lo si fa sul sistema di alimentazione ... tu pigi un pulsante per spegnere e la logica di spegnimento, prima invia un segnale su un pin e poi, dopo un tempo X (da valutare in funzione della mole di dati da salvare), toglie fisicamente corrente. :wink:

Guglielmo

Usi una memori esterna più affidabile!

Bisogna vedere quanto di frequente variano i dati da salvare. Se non è un flusso continuo, si può fare un salvataggio programmato ogni tot ore.

Quanto allo spegnimento si può usare un pulsante ritardato che dà il tempo (ed un segnale) al microcontrollore di salvare i dati.

Per gli spegnimenti accidentali son czzi, salvo salvare ogni tot, per avere qualche possibilità in più che i dati salvati durante l'ultimo salvataggio siano ancora utili.

BaBBuino:
Per gli spegnimenti accidentali son czzi, salvo salvare ogni tot, per avere qualche possibilità in più che i dati salvati durante l'ultimo salvataggio siano ancora utili.

Se la cosa è progettata un minimo "decentemente" ... non esistono "spegnimenti accidentali" ... esistono GUASTI e allora ... comunque sono caxxi :grin: :grin: :grin:

Guglielmo

Gli spegnimenti accidentali sono come la legge di Murphy, quando serve che non debba mai succedere, succede che l'Enel stacca la corrente 3 volte al giorno! :smiley:

BaBBuino:
Gli spegnimenti accidentali sono come la legge di Murphy, quando serve che non debba mai succedere, succede che l'Enel stacca la corrente 3 volte al giorno! :smiley:

... per questo ho detto progettata "decentemente" !!! Una batteria di backup, in un progetto serio, ce la vuoi mettere o no ??? ]:smiley:

Guglielmo

BaBBuino:
Gli spegnimenti accidentali sono come la legge di Murphy, quando serve che non debba mai succedere, succede che l'Enel stacca la corrente 3 volte al giorno! :smiley:

Mai sentito parlare di batteria di backup ?

Ti assicuro che me lo sentivo che intervenivi con la batteria! Ma guarda te! :smiley: Stavo per inserirla nella "storia"... allora concludo il racconto:

L'Enel stacca la corrente 3 volte al giorno e la batteria di backup è cinese, ed invece che durare tre anni, è durata una settimana! :smiley:

BaBBuino:
L'Enel stacca la corrente 3 volte al giorno e la batteria di backup è cinese, ed invece che durare tre anni, è durata una settimana! :smiley:

Così impari ad acquistare una batteria cinese non ricaricabile :grin:

Noto con molto piacere che questo forum e' molto caloroso... :grin: mi piace un sacco.... :blush:
complimenti a tutti.
allora, io in realtà non devo salvare dati in tempo reale ma semplicemente una serie di impostazioni che tramite un menu mi gestiscono i settaggi di cose che posso attivare o disattivare, visualizzare ecc.... Ho un TFT Touch che mi visualizza diverse informazioni e io tramite il menu scelgo cosa far fare e cosa visualizzare. Ho bisogno che se lo spengo e lo riaccendo dopo 1 settimana mi deve tornare sui settaggi da me scelti e non sulle impostazioni iniziali.
Quindi, considerando quanto detto, io faro' in modo che ogni volta che cambio dei valori dal mio menu me li salva in memoria, magari dopo 1 minuto dall' ultimo evento touch, in modo tale che se sto li anche 10 minuti ad impostare i dati e cambiare i settaggi non deve salvare in continuo, ma semplicemente quando ho finito (e il tempo di 1 minuto, ma anche 20 secondi ad esempio, e' piu' che sufficiente).
In questo modo non avro' una elaborazione continua e non avro' problemi di pesantezza e di usura della memoria.

... bé ... a quel punto falla bene ... e aggiungi al tuo menu una voce "Salva in EEPROM" così, quando hai finito e sei sicuro, fai il salvataggio e minimizzi il numero di scritture :wink:

Guglielmo

si ci avevo pensato, ma e' un passaggio in piu', e si ci potrebbe dimenticare di farlo.
Quindi credo che la soluzione del salvataggio automatico dopo tot secondi sia la migliore, tanto se il menu' l' ho toccato e' di certo necessario salvare.

Rispondo a Babbuino:
In realtà non serve neanche una batteria di backup ma basta un grosso condensatore di backup, che possa garantire quel minimo di alimentazione al chip per quel secondo o due necessario a salvare i dati in memoria. Il tutto ricorrendo al comparatore analogico interno impostato per sollevare un interrupt nel caso che la tensione di alimentazione scenda sotto al valore di una tensione di riferimento.
Quando ciò accade, la ISR che viene chiamata fa solo ed esclusivamente il salvataggio dei dati che servono nella EEPROM. E' sufficiente che la tensione sia tenuta su dal condensatore per il tempo necessario al salvataggio.

magari anche quello puoi mettere un switch se salvare in automatico ogni x secondi oppure farlo solo manualmente, così è più completo :smiley: