Utilizzare la eeprom..come?

salve a tutti,vorrei poter utilizzare la eeprom in modo che l'arduino ogni volta ricominci a lavorare dal punto in cui è arrivato quando è stato spento.

esempio: void loop

funzione1 delay funzione2 delay funzione3 delay

prima dell'inizio di ogni funzione scriverò un valore nella eeprom che andrà letto all'inizio del programma...è giusto fare così? al termine del programma scriverò un valore tale che ripartirà dall'inizio. ma all'accensione dopo che leggo la eeprom come faccio a dire arduino "vai dove ti dice la eeprom"? grazie

Puoi farlo. La libreria da usare è la EEPROM, spiegata qui: http://arduino.cc/en/Reference/EEPROM

Tieni a mente che la EEPROM ammette solo 100.000 cicli di scrittura, quindi considera la frequenza con cui salvare le impostazioni altrimenti potresti corrompere la memoria in breve tempo.

ok scrivere e leggere eeprom come spiega il link. ma devo scrivere sempre allo stessso indirizzo di eeprom giusto? dopo aver letto la eeprom come faccio a dire al programma vai all'indirizzo ke ho letto nella eeprom?

cerozziello88: ok scrivere e leggere eeprom come spiega il link. ma devo scrivere sempre allo stessso indirizzo di eeprom giusto? dopo aver letto la eeprom come faccio a dire al programma vai all'indirizzo ke ho letto nella eeprom?

No, come dici tu non si può fare. Non hai mica una modalità "ibernazione" come sul computer di casa, dove salvi su disco il contenuto della memoria per poi ricaricarlo pari pari quando riaccendi, eh XD XD

Al massimo puoi strutturare il programma in modo da usare una variabile ed uno switch..case col quale scegliere la funzione da eseguire. Ad ogni esecuzione di case, aggiorni la variabile che usi un po' tipo un puntatore alla funzione da svolgere. Ogni tanto (o su richiesta) la salvi, così che in caso di riavvio, lo sketch vada a leggerne il valore dalla EEPROM e riesegua la funzione indicata.

non ho capito… :blush: :blush:

allora all’accensione dell’arduino leggo la eeprom : posso trovare 6 valori diversi (xke sei diversi valori salvo nella eeprom in punti differenti nel programma) poi come faccio ad andare a ql punto specifico del programma<?

questa cosa mi serve per far in modo che quando manchi la corrente e poi ritorna arduino non ricominci il programma da capo, ma da dove s'era interrotto, o meglio dal punto in cui è stata memorizzata l'ultima volta l'eeprom

forse capisco male ma se il tuo programma ha degli stati ben definiti e tu vuoi partire allo stato salvato nella eeprom, ti basta leggere il valore ad inizio sketch (che viene eseguito quando riavvii Arduino) e poi con un IF o uno SWITCH in base al valore letto eseguire la parte di codice che ti interessa

ok ci proverò grazie, ma devo scrivere sempre allo stesso indirizzo di memoria? ho fatto così: int addr=0; EEPROM.write(0,1); EEPROM.write(0,2); e così via per tutte le volte che voglio salvare un punto specifico del programma.

ciao

se vuoi salvare un solo stato, dovrai scrivere sempre nello stesso indirizzo che sarà quello che leggerai per sapere in quale stato il programma era prima del reset

leo72:
Puoi farlo. La libreria da usare è la EEPROM, spiegata qui:
http://arduino.cc/en/Reference/EEPROM

Tieni a mente che la EEPROM ammette solo 100.000 cicli di scrittura, quindi considera la frequenza con cui salvare le impostazioni altrimenti potresti corrompere la memoria in breve tempo.

Da come descrivi il tuo progetto mi sa che sei a rischio che possa succedere quello per cui Leo ti ha avvisato… occhio…

ok grazie leo e grazie luca nn mi resta che provare. per il limite di scrittura dell'eeprom 100,000 volte vale per ogni indirizzo o vale in generale?

ok considerando che ad ogni ciclo scrivo 10 volte in memoria, e che ogni giorno arduino sarà acceso per circa 5 volte , quindi 50 scritture al giorno 100,000/50=2,000 giorni è giusto?

Sì, è giusto.

grazie gentilissimi. aggiornerò quando provo. grazie

leo72: Tieni a mente che la EEPROM ammette solo 100.000 cicli di scrittura, quindi considera la frequenza con cui salvare le impostazioni altrimenti potresti corrompere la memoria in breve tempo.

Ci sono rimasto malissimo..una pugnalata praticamente! Le mie 1000 me le sarò già sparate allora..

EPROM Write/Erase cycle 10.000 Flash 100.000 sorgente: DS Atimel http://www.atmel.com/Images/doc8161.pdf Se metti un ciclo di scrittura nel loop in pochi minuti la eprom secca :)

ciao

buonasera.... una domanda... dopo che ho scritto 1 all'indirizzo 1 posso scrivere 2 all'indirizzo 1 o devo prima cancellare la eeprom? o sovrascrive=?

pablos: EPROM Write/Erase cycle 10.000 Flash 100.000 sorgente: DS Atimel http://www.atmel.com/Images/doc8161.pdf Se metti un ciclo di scrittura nel loop in pochi minuti la eprom secca :)

ciao

No, è alla rovescia: 10.000 cicli per la FLASH, 100.000 cicli per la EEPROM.

Write/Erase Cycles: 10,000 Flash/100,000 EEPROM

E' in prima pagina, dove c'è il sommario delle specifiche, che hai guardato, Pablos? XD XD XD

:D :D vero ... meno male che ho messo il link

cerozziello88: buonasera.... una domanda... dopo che ho scritto 1 all'indirizzo 1 posso scrivere 2 all'indirizzo 1 o devo prima cancellare la eeprom? o sovrascrive=?

L'eeprom ha una sua logica interna che cancella prima il banco di celle di memoria e poi riscrive i dati compreso quello modificato. Se Ti serve un RTC usa il DS1307 che ha 56 byte di RAM oppure usa al posto dei EEPROM un FRAM.

Ciao Uwe