Come memorizzare un valore

Ciao a tutti.
Sto sviluppando un piccolo progettino di domotica con arduino e mi chiedevo se ci fosse qualche circuito integrato, esterno ad arduino, che possa essere usato per salvare un dato anche a spegnimento effettuato.
Ho provato a cercare, ma ho trovato solo soluzioni che sfruttano la eeprom interna di arduino e che vorrei evitare, visto che il valore va salvato ogni volta che cambia lo stato del sistema il che potrebbe. Sostanzialmente mi basta poter salvare 2 informazioni con 2 valori possibili (high o low) per poterlo recuperare in caso di interruzione dell'alimentazione.Sostanzialmente con quesi 2 valori, a seconda della loro combinazione, posso risalire a uno dei 4 stati che ho previsto. Ho già previsto una batteria tampone al piombo, ma in caso anche quella si scaricasse, vorrei che alla riaccensione il sistema possa tornare allo stato precedente.

Ho provato a cercare un po su internet, cercando dei circuiti integrati che funzionino da memoria, ma ho trovato solo circuiti (almeno da quello che ho capito) che allo spegnimento perdono il valore.

Qualcuno può darmi qualche dritta a riguardo?

Grazie in anticipo!

...sfruttano la eeprom interna di arduino e vorrei evitare, visto che il valore va salvato ogni volta che cambia lo stato del sistema il che potrebbe...

Non hai completato la frase, ma forse ti riferivi al relativamente limitato numero di scritture sulla EEPROM interna.

Le scelte alternative non sono molte: SD esterna, EEPROM (seriale) esterna oppure RTC.

Quest'ultima possibilità mi sembra la più conveniente: un modulino RTC con DS1307 di cui puoi utilizzare la memoria RAM che quasi mai viene utilizzata e che è sotto batteria.

Oppure il modulo Tiny RTC che in più ha una memoria EEPROM aggiuntiva.

Grazie della risposta. Si, intendevo per via del numero limitato di scritture. Devo salvare ogni volta che mi cambia lo stato, quindi potrebbe capitare molte volte al giorno.

Speravo che ci fosse qualche circuito che anche completamente senza alimentazione potesse tenere in memoria dei dati. bastava anche uno stato on/off

Per il modulo rtc dovrei aggiungere un'altra batteria tampone solo per il modulo, il che aggiungerebbe anche il problema di doverla poi cambiare.
A questo punto anche la eeprom esterna avrebbe il problema di dover essere cambiata quando si esauriscono i cicli di scrittura. Forse la SD è la soluzione migliore a questo punto.

Sicuro che non "ti stai fasciando la testa" per nulla ???

Ma quante volte mai devi andare a salvare questi valori in un giorno ???

Guglielmo

In quali casi hai bisogno di salvare i dati?

  • Quando manca la tensione di rete? la batteria tampone ti permette di fare velocemente un backup su Eeprom, succederà 2-3 volte all'anno.
  • Oppure quando la batteria tampone sta per morire causata dalla mancanza di rete fai un backup

In teoria ti possono bastare 2 byte per salvare lo stato di 16 pin, potresti far circolare le celle della eeprom in base al giorno ad esempio : cella 1-2 il 1 gennaio e cella 3-4 il 2 gennaio, questo dipende da un buon orologio :slight_smile:
oppure 1 celle per ogni giorno dell'anno 730 byte in totale, se ne hai 1024 ti bastano e avanzano, così però puoi salvare solo 8 pin

Le soluzioni sono diverse:

  • Puoi usare la RAM del RTC DS1307. La batteria mantiene anche il contenuto della RAM oltre ad aggiornare l' orologio. La batteria tampone del RTC ha una vita media di 10 anni.
  • la EEPROM interna è limitato la scrittura ma 100000 scritture a 100 scritture al giorno sono 1000 giorno o ca 3 anni.
  • EEprom esterna; Ha un numero di scritture maggiori (1000000)
  • una FRAM che si usa uguale ai EEPRM ma che mantiene i dati a alimentazione spenta ha un numero di cicli quasi infinito (10^12). per esempio il FM24C04B-G che va a 5V con interfaccia I2C e 512 Byte di memoria.
    Ciao Uwe

In effetti per quanto riguarda la eeprom, forse mi sono fatto i conti male.. Ho stimato circa una ventina di cambi stato da salvare al giorno, il che, rifacendo i conti mi darebbe comunque oltre 13 anni di autonomia anche salvando a ogni cambio stato

Visto che il valore di scritture indicato é solo un valore medio garantito se usi piú celle di memoria e a differenza prendi il valore della maggioranza puoi ottenere un numero maggiore di scritture.
Attenzione nei EEPROM le cancelazioni prima di scrivere un nuovo valore valgono sempre per un blocco intero il numero di scritture per una singola cella puó essere maggiore al numer di scritture della singola cella. Non so dirti come é nel caso del Atmega; quanto grandi sono i blocchi.

Ciao Uwe

La questione dell'organizzazione in blocchi non riguarda la EEPROM interna dell'Arduino, che è indirizzabile a singoli byte. Ecco quanto riporta il datasheet:

The ATmega48A/PA/88A/PA/168A/PA/328/P contains 256/512/512/1Kbytes of data EEPROM memory. It is orga- nized as a separate data space, in which single bytes can be read and written.