Power down detection

Mia idea, ci sono due possibili soluzioni, la prima prevede hardware ovvero occorre prendere la sorgente di alimentazione con cui alimenti l'ESP, portarla ad un pin (magari dotato d'interrupt) che quando viene meno fa scattare una routine che salva tutto in EEPROM, necessitando questo di tempo (circa 3,3ms a cella) occorrerà mettere sul pin di alimentazione (non quello usato per determinare se la tensione è venuta meno) un condensatore bello "grosso" (Es da un farad) che manterrà la MCU alimentata per il tempo necessario. Descritto in modo molto semplicistico se vorrai intraprendere questa strada si approfondirà i dettagli.
La soluzione "software" invece prevede di usare tutta la EEPROM seguendo le indicazioni fornite dal produttore per usarla al massimo della sua possibilità di vita e salvare ogni volta che cambia un singolo valore, con 100.000 scritture garantire per singola cella credo che il progetto potrà durare veramente a lungo se seguirai il documento che ti allego, non ti serve hardware aggiuntivo e ti protegge anche in caso di eventuali blocchi improvvisi non dovuti a mancanza di tensione

AVR101 - High Endurance EEPROM Storage.pdf (47.3 KB)

fabpolli:
La soluzione "software" invece prevede di usare tutta la EEPROM seguendo le indicazioni fornite dal produttore per usarla al massimo della sua possibilità di vita e salvare ogni volta che cambia un singolo valore, con 100.000 scritture garantire per singola cella credo che il progetto potrà durare veramente a lungo se seguirai il documento che ti allego, non ti serve hardware aggiuntivo e ti protegge anche in caso di eventuali blocchi improvvisi non dovuti a mancanza di tensione

Lui sta usando ESP32, che se non ricordo male, emula la EEPROM sfruttando la flash.
Per OP, cerca "Preferences library", successore della EEPROM
In alternativa, si potrebbe sfruttare il filesystem SPIFFS, però c'è da configurare la partizione, sempre se non ricordo male, avevo fatto qualche test con ESP32-CAM.

Federico

Si, in effetti mi sono espresso male indicando solo EEPROM, mi riferivo al suo post dove indicava di voler usare la EEPROm collegata in I2C. A tal proposito metto anche un ulteriore approfondimento, via I2C si possono integrare le F-RAM che danno un limite "umanamente" difficile da raggiungere di scritture

fabpolli:
Si, in effetti mi sono espresso male indicando solo EEPROM, mi riferivo al suo post dove indicava di voler usare la EEPROm collegata in I2C.

In realtà mi sono espresso male anch'io :slight_smile:

Volevo dire che ESP32 ha una flash da 4Mb, quindi forse non è necessario aggiungere altro.

Federico

Ricordiamo anche che è un progetto scolastico, quindi realizzare qualcosa che quando la tensione scende sotto 4.63 V genera un interrupt potrebbe essere un ulteriore oggetto inserito che fa aumentare il voto o comunque spunto di approfondimenti.

Esiste ed esistono tante cose già fatte, ma nel tuo caso potresti farlo con un attiny con una uscita che rimane alta e si porta a false quando la tensione scende sotto una certa SOGLIA_A per oltre X millisecondi, mettendo se vuoi uno o due trimmer per regolare i parametri con anche se vuoi un led rosso che lampeggia quando sei sotto soglia... o altre cose che puoi aggiungere sfruttando la possibilità di programmarlo.

Naturalmente rimane il nodo su come alimentare il sistema...

PEr PowerDown intendi la tensione che si abbassa perché una eventuale batteria si sta scaricando o che manca la tensione di rete?

Please speacckare italiano, so ci si anderstenda meglio!

per noi, la domanda vera è:

ma quanto consuma il progetto?
ce la fa un condensatore, per quanto grande, a dare il tempo di salvare?

anche perché mi sembra che gli ESP non abbiano eeprom, viene emulata in flash, non so i tempi necessari

per il controllo di soglia, senza dover tirar giù dal firmamento dei chip un attiny, magari un santo 741 basta, o anche la parte operazionale di uno scrauso 555, che viene sempre via per poco

il fratello, qui, ha usato parole nette, che riporto solo dopo averle purgate:

siccome non sanno uscirne programmando uno ESP cercano di programmare un Attiny, ma che ci mettano un comparatore....

ad ogni spazio ha consumato un calendario, ma io ho raccolto i cocci :slight_smile:

chiedo io scusa a nome suo...

**>alanmasutti: ** Credo che per quello che vuoi fare andrebbe bene un MAX1232 utilizzato non sul pin di "reset" (come di solito di utilizza), ma su un pin di interrupt, per avvertirti che la tensione sta scendedo sotto la soglia minima che puoi impostare (4.5V o 4.75V). Ha anche altre funzioncine interessanti che magari ti potrebbero fare comodo ... dacci un'occhiata.

Naturalmente, dovrai prevdere un qualche cosa (super condensatore) che ti alimenti il sistema per il tempo necessario al salvataggio, quando viene a mancare l'alimentazione :slight_smile:

Guglielmo

Da 4 giorni non abbiamo conferme, né smentite...
Comunque, se il problema è una batteria che si scarica, basta fare il salvataggio quando ancora la tensione è sufficiente a farlo... :slight_smile:
Io, invece, feci il salvataggio delle impostazioni nel momento un cui veniva spento l'interruttore: in quel caso, essendo comunque presente la tensione prima dell'interruttore, ho usato l'interruttore per comandare un MOSFET con un RC sul gate che spegne il circuito circa mezzo secondo dopo l'azionamento dell'interruttore. Durante tale tempo viene effettuato il salvataggio.

Geniale

Siccome non avevo pronta la Macchina del tempo, ho dovuto aggirare il problema :slight_smile:

Datman:
Da 4 giorni non abbiamo conferme, né smentite...

infatti la domanda vera è, che fine ha fatto l'OP? ::slight_smile:
ma vista la figuraccia che ho fatto l'unica volta che mi sono permesso di rimproverare un OP per la sua assenza, ho imparato che non mi interessa se si perde, se ha risolto, se non ringrazia, etc.

In questo caso, poi, ho imparato parecchie cosucce che potrebbero tornare utili, quindi va bene lo stesso :smiley:

Federico

Salvorhardin:
siccome non sanno uscirne programmando uno ESP cercano di programmare un Attiny, ma che ci mettano un comparatore....

Ci puoi mettere quello che ti pare, dipende da quello che vuoi ottenere. Se vuoi un sistema con soglia programmabile ad X volt che intervenga dopo Y millisecondi di condizione (V < Vth), con un LED verde quando (V >= Vth) e rosso lampeggiante quando (V < Vth) e magari X ed Y impostabili via seriale e salvati, o prendi qualcosa di già fatto o lo fai con l'attiny se stai imparando. Fallo col comparatore e vedi se ti viene più semplice e compatto.

Grazie mille a tutti per le risposte, (e scusate la mia assenza ma non ero a casa in questi giorni)
comunque rispondo a

gpb01:
**>alanmasutti: ** Credo che per quello che vuoi fare andrebbe bene un MAX1232

dicendo che questo integrato mi crea il problema del Watchdog timer: io ho approfondito anche questo argomento e mi sono reso conto che nel mio caso è veramente complesso gestire una sicurezza di questo tipo, il che mi porterebbe ad avere un interrupt ogni 500 ms per causa del mancato segale di watchdog.

Chiarimenti generale a tutti, ho scritto che uso una EEPROM in I2C ma in realta non so ancora esattamente come fare. Credo che non aggiungerò la EEPROM in I2C ma la emulerò in flash.

Il sistema di power failure detection deve proteggere il sistema da eventuali buchi di rete, il che mi porta ad richiedere un interrupt e non un semplice partitore di tensione come proposto da qualcuno, perché devo appunto evitare che questo consumi tutta la scorta di energia immagazzinata in un condensatore da 100uF un parallelo alla sua alimentazione, sospendendo tutte le operazioni prima del salvataggio.

Altra cosa, non mi arrivano più le mail di notifica, mi aiutereste anche in questo?

Alan Masutti

alanmasutti:
... mi crea il problema del Watchdog timer: io ho approfondito anche questo argomento e mi sono reso conto che nel mio caso è veramente complesso gestire una sicurezza di questo tipo, il che mi porterebbe ad avere un interrupt ogni 500 ms per causa del mancato segale di watchdog.

Il segnale di WatchDog può essere portato ad attendere anche 1.2 sec ...
... e tu in 1.2 sec. non riesci a fare il toggle di un pin ? ? ? :o :o :o Non è possibile ...

Guglielmo

Grazie,
Probabilmente lo è, devo aspettare 2 secondi alla fine di tutto in modo che il core resetti le classi della libreria WiFi... poi non so se questo possa essere un problema...

Alan Masutti

ma un semplice comparatore?
mi sembra che ne abbiano già parlato
alla buona anche un NOT in Cmos, che "neghi" l'alimentazione....

Ok,
il mio problema è che volevo ottenere un interrupt puro, e so per certo che esistano circuiti certificati a temperature critiche (-40° to +85°) che sono fatti per questo scopo, ma non riesco a trovare cose adatte a me...

Ringrazio comunque per l'interesse tutti quanti voi

Alan Masutti