Evitare di superare i cicli di scrittuta EEPROM !!!!!

astrobeed:
Mica è detto che può mettere un UPS, magari il tutto è stazione meteo posta 3200 metri d'altezza sulle Dolomiti e l'alimentazione è tramite pannelli solari. :grin:

Beh questo è vero :smiley: Allora salvasse a gogo su una FRAM esterna da miliardi di scritture :slight_smile: (come giustamente avete scritto)

Comunque una stazione meteo sulle dolomiti con pannelli solare, funziona solo con l'alta pressione :slight_smile: Sarebbe proprio un progetto inutile, bisognerebbe studiare una soluzione :slight_smile:

Altra alternativa potrebbe essere una ram con batteria al litio di backup? Alcuni Rtc la possiedono. Ad esempio il 1307 ha 52 byte disponibili

Stefano

cam9500:
Altra alternativa potrebbe essere una ram con batteria al litio di backup? Alcuni Rtc la possiedono. Ad esempio il 1307 ha 52 byte disponibili

Stefano

Però quante scritture ha di limite?

In teoria se è ram, non dovrebbe avere limiti.

... ed una piccola batteria con un circuitino che la inserisce automaticamente quando c'e' l'alimentazione e la scollega un paio di minuti dopo che l'alimentazione e' stata tolta ?

In quel modo, il micro avrebbe tempo a iosa per salvare l'ultimo stato, ed in seguito la batteria verrebbe disconnessa evitando di scaricarsi inutilmente, al ripristino dell'alimentazione anche la batteria sarebbe automaticamente riconnessa ... ed inoltre lo stesso circuito manterrebbe carica la batteria ... due transistor, qualche resistenza e condensatore, quattro diodi ed un mosfet o rele ... se vuoi provare te ne improvviso uno ...

Buon giorno, amici,ho che ce interesse nel mio caso, cercando sul forum ho trovato al funzione

EEPROM.update(20, Tempo);

spero di aver capito bene!!!!!
la eeprom viene scritta solo se (tempo attuale e diverso del quello precedente)....

EEPROM.update(20, Tempo);///// 1 step tempo = 10
EEPROM.update(20, Tempo);///// 2 step tempo = 30
EEPROM.update(20, Tempo);///// 3 step tempo = (10 == 30) non sono uguali, allora riscrivo la eeprom

ditemi se ho capito bene.

AuAnWeb:
ho fatto una media di 50 cicli giornalieri per ogni cella(EEPROM), facendo dei calcoli ho visto che posso arrivare a 5 anni, non sono tantissimi ma neanche pochi.

Ciao, certo se la variabile tempo è diversa la riscrive. Diciamo che tutti qui si dava per scontato che il tuo post che ho quotato fosse al netto dell'istruzione di update :slight_smile:
Di fatto se non cambia nulla nella giornata potresti anche non dover riscrivere nulla ?

AuAnWeb:
Salve amici, sono un appassionato da Arduino, ho iniziato a fare i primi esempi, ma oggi mi sono imbattuto in un problema insolito.
Voglio memorizzare dati su EEPROM, ma essendo un ciclo non infinito mi sono detto ""COME FACCIO!!!!""
Avete in merito qualche suggerimento?

La EEprom la utilizzo per salvare gli stati dei pin in uscita, a ogni cambiamento di stato viene salvato in EEPROM, ma se in un giorno vengono fatti piu volte ho la paura che a breve si scotta Arduino.

Come potrei evitare questo......

Perchè salvare lo stato dei Pin quando può essere letto al prossimo riavvio?
Nei PLC questo problema è stato affrontato e superato decenni fà, nei PLC si salva in memoria 'ritentiva' ciò che non può essere letto al prossimo riavvio della CPU, e cioè lo stato dei contatori e alle volte dei Timers, ingressi digitali o analogici come uscite digitali e analogiche non mi è mai capitato.
In pochi casi quando manca la corrente i PLC devono sapere esattamente cosa c'è all'interno della macchina per non fare disastri quando torna la corrente, bisogna vedere caso per caso.

Esatto.
Sai per caso se ce qualche libreria o altro per vedere cicli di vita di Arduino(tipo Km effettuati come le macchine?)

Ciao Triac60,

Come potrei farlo????
Come faccio a memorizzare prima che si spegne Arduino?

Basta prevedere la mancanza di alimentazione :slight_smile:
Non può bastarti un RTC con ram e batteria tampone?

In realtà a lui serve salvare lo stato degli I/O, quindi un RTC, salvo che non gli serva data/ora serve a poco, ma ...
... effettivamente il DS1307 contiene alcuni bytes di RAM protetta dalla batteria e ... potrebbe usare quelli :wink:

Guglielmo

Dipende da quanto ci mette a salvare tutta la roba che gli serve da un'interrupt ... potrebbe usare un "piccolo" condensatorino da 20000uf o piu sull'alimentazione che entra nel regolatore, posto dopo un diodo, e leggere la presenza dell'alimentazione prima del diodo con un'interrupt "falling" ... quando l'interrupt viene richiamato dalla perdita di alimentazione, il condensatore dovrebbe avere ancora abbastanza autonomia di carica da permettere al micro di salvare i dati ...

.. se usa la RAM del RTC non gli serve ness'interrupt ... salva in continuazione e quando si spegne ... ha l'ultimo salvataggio nella RAM del RTC ;D

Guglielmo

Salvare a go go :smiley: Però le soluzioni di Ete sono sempre invitanti con i suoi schemi :slight_smile:
Se mentre sta salvando, proprio in quel ms va via la luce? Ehh non ci avete pensato vero? :smiley: :smiley:

In effetti ad un condensatore, ci avevo pensato anch'io. Non un 20.000uF ma proprio ad un supercondensatore da 1F.
Purtroppo l'unico che ho visto stava su una xbox e non ne conosco pregi o difetti....

cam9500:
In effetti ad un condensatore, ci avevo pensato anch'io. Non un 20.000uF ma proprio ad un supercondensatore da 1F.
Purtroppo l'unico che ho visto stava su una xbox e non ne conosco pregi o difetti....

Il famoso super cap :slight_smile:

Bisogna che il power-down venga rilevato prima che cessi l'alimentazione del MC, di solito 10-100msec prima, per fare questo si alimenta il MC con uno switching o se non possibile con una riserva di energia , 1000uF o più, il power down detect è fatto sulla AC oppure con un comparatore, quando rilevato attiva un IRQ esterno al MC che ha tempo 10-100mSec per effettuare il BackUp, dal numero di dati da salvare dipende il tipo di supporto da scegliere , la EEROM è la più lenta e si può salvare solo pochi bytes, una decina, se necessita un BU di un migliaio di bytes allora la RAM è la scelta obbligata
Nei PLC citati o anche nelle CNC datate (OKUMA,FANUC, MITSUBISHI,FAGOR etc..)dove c'era sempre una RAM parallela tamponata con una cella litio 3.6V non ricaricabile in quanto i programmi giravano sempre in RAM, il salvataggio era fatto là, ciò nonostante c'èra sempre il circuito di power down detect che pilotava il trig sul IRQ del MC

io credo che qui si stia discutendo su una soluzione che sta tra 2€ e 200€, bisogna capire quale è il budget, di soluzioni in questo range ne esistono davvero tante, se invece è un fatto di tigna allora penso che si debba lavorare solo sulla scheda Arduino, e di soluzioni allora non ce ne sono molte, una volta esaurito il limite si cambia la scheda e buonanotte, stiamo parlando di 20€ alla fine.

AuAnWeb:
Ciao Triac60,

Come potrei farlo????
Come faccio a memorizzare prima che si spegne Arduino?

Non ti serve assolutamente a niente sapere quando si spegne, va rovesciato tutto il concetto di programmazione che vedo praticamente sempre qui, il concetto di programmazione sequenziale deve essere abolito per sempre. La programmazione deve essere progettata come simultanea, ogni uscita deve essere pilotata solo in un punto esatto del programma e solo dopo aver letto tutti gli ingressi interessati e dopo aver fatto tutti i calcoli necessari.