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.
Beh questo è vero Allora salvasse a gogo su una FRAM esterna da miliardi di scritture (come giustamente avete scritto)
Comunque una stazione meteo sulle dolomiti con pannelli solare, funziona solo con l'alta pressione Sarebbe proprio un progetto inutile, bisognerebbe studiare una soluzione
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
... 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
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
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.
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 RAMprotetta dalla batteria e ... potrebbe usare quelli
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 ...
Salvare a go go Però le soluzioni di Ete sono sempre invitanti con i suoi schemi
Se mentre sta salvando, proprio in quel ms va via la luce? Ehh non ci avete pensato vero?
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....
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.
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.