Ciao a tutti. Sono di nuovo qui a chiedere aiuto...
Ho un progettino semplice con un nano che tramite questo sensore conta quanti oggetti passano e mi visualizza il numero su questo display. Quando necessario con un semplice pulsante azzero il conteggio. Il tutto alimentato con un alimentatore da 9V.
Fin qua tutto ok.
Ora avrei la necessità di salvare in eeprom il valore del contatore quando stacco l'alimentazione. Pensavo di leggere la tensione in uscita dall'alimentatore con un partitore, così quando va sotto un certo limite mi rendo conto che è ora di salvare il valore in eeprom.
Come faccio però a tenere acceso arduino il tempo necessario per salvare?
Pensavo ad un condensatore abbastanza grande... però non saprei di che capacità sceglierlo e nemmeno dove inserirlo...
Se ci sono altre soluzioni accetto volentieri suggerimenti.
Lo schema del progetto lo vedete in allegato (chiedo perdono per la pessima qualità dello schema...).
Grazie in anticipo a tutti.
Secondo lo schema indicato dovrebbe bastare mettere un 1000µF sui 9V al posto del 100µF e leggere la presenza dei 9V tramite un pin che fa partire un interrupt (pin 2 o 3 sul UNO)
Alternative sono usare un FRAM che puoi scrivere quante volte vuoi;
Oppure la RAM di un RTC come il DS3232 o DS1307.
"fratt", un tempo mi ero divertito a fare un circuito che mi dava il tempo per i necessari salvataggi.
SE non hai altre cose alimentate da Arduino (quindi NULLA che preleva i 5V da esso, altrimenti il carico è eccessivo e la soluzione non va), è sufficiente un supercondensatore da 1F 5.5V (ormai li trovi facilmente ed hanno dimensioni normalissime) che, carichi con una resistenza (onde evitare un bel corto all'accensione) e scarichi tramite un diodo (così da bypassare la resistenza durante la scarica).
Ti da una manciata di secondi più che sufficienti a salvare tutto quello che vuoi.
Io monitoravo l'alimentazione con uno dei comparatori analogici del ATmega328P e generavo un interrupt allo scendere sotto un certo valore (in modo che il tutto fosse automatico) ... nella ISR salvavo quello che c'era da salvare e poi bloccavo il tutto con un bel ciclo chiuso.
sostituisci il 7805 con un KA78R12CTU-D, o altro regolatore espressamente dichiarato come LOW-DROP OUT: questo ti darà più margine perchè fino a quando il suo ingresso è ancora ancora almeno 5,5v, lui ne da sempre 5 in uscita.
il primo condensatore che segue dopo il diodo portalo a 2200 o meglio 4700 microfarad.
Inizia a salvare i dati quando vedi che la tensione scende sotto gli 8 v.
al "setup" metti a 1 un pin che chiameremo SAVED, e collegaci un led che starà sempre spento. Quando finisci di salvare i dati metti a 0 il pin SAVED . questo accenderà il led fino alla scarica del condensatore .In questo modo potrai verificare se fai in tempo a fare tutto con un buon margine . In caso contrario aumenta ancora il condensatore
Ringrazio tutti per i suggerimenti.
In casa adesso non ho regolatori diversi dal 7805... e come condensatori il massimo è 2200uF...
Riassumendo, per cominciare a fare qualche prova:
dopo il diodo metto 2200uF
il 7805 provo a lasciarlo così
in uscita dal regolatore lascio 100uF o devo cambiare anche quello?
gpb01:
Io monitoravo l'alimentazione con uno dei comparatori analogici del ATmega328P e generavo un interrupt allo scendere sotto un certo valore
Perdona l'ignoranza... ma come fisso una soglia per far scattare l'interrupt? Se uso "falling" l'interrupt parte quando in pin è low, giusto? Ma a quel punto il condensatore sarà scarico... o sparo cazzate?
fratt:
Perdona l'ignoranza... ma come fisso una soglia per far scattare l'interrupt? Se uso "falling" l'interrupt parte quando in pin è low, giusto? Ma a quel punto il condensatore sarà scarico... o sparo cazzate?
Hai letto quello che ho scritto ? ... ho parlato dell'interrupt generato dal "comparatore analogico" (datasheet , pagina 299) ... devi lavorare a basso livello programmando direttamente i devices della MCU che l'ambiente Arduino NON ti mette a disposizione.
io dico una vaccata, ma se mette un diodo tra alimentatore e (super) condensatore, arduino alimentato dal (super) condensatore, un partirore sull'alimentaore, appena manca energia arduino va grazie al condensatore, ma il partitore disaccoppiato dal diodo cade subito, in questo caso puo' usare un interrupt falling, o sbaglio qualcosa?
Standardoil:
... ma il partitore disaccoppiato dal diodo cade subito, in questo caso puo' usare un interrupt falling, o sbaglio qualcosa?
... probabilmente potrebbe andare anche così (da provare). Nel mio caso INT0 e INT1 erano già usati per altre cose e la strada più semplice era stata il comparatore. Una volta che hai regolato la soglia, appena la tensione scende sotto il limite, scatta
Standardoil: credo di aver capito... faccio qualche prova.
gpb01: grazie del chiarimento, ma ho dato uno sguardo al datasheet... e sono 400 e rotte pagine praticamente in arabo per me... intanto provo come suggerito da Standardoil.
brunello: grazie della segnalazione, provo a darci un'occhiata.
fratt:
Ciao a tutti. Sono di nuovo qui a chiedere aiuto...
Ho un progettino semplice con un nano
Come faccio però a tenere acceso arduino il tempo necessario per salvare?
Pensavo ad un condensatore abbastanza grande... però non saprei di che capacità sceglierlo e nemmeno dove inserirlo...
Se ci sono altre soluzioni accetto volentieri suggerimenti.
Lo schema del progetto lo vedete in allegato (chiedo perdono per la pessima qualità dello schema...).
Grazie in anticipo a tutti.
mah personalmente farei una modifica come nello schema tuo che ho modificato al "volo" ,
una batteria da 9 volt ni cd un diodo qualsiasi girato dal verso giusto e un mini-relè che dovrebbe andar bene anche un 12 volt una resistenza ad alto valore che lascia passare un poco di corrente per non far scaricare la batteria pochi millampere,
fino a che c'e alimentazione il + della batteria e isolato tramite il relè (contatto aperto)
se va via la luce il rele chiude il contatto e tutto va a batteria e hai tutti i secondi che vuoi per salvare il tutto,
ps: nei rele è buona regola mettere un diodo tra i suoi piedini di alimentazione per limitare i disturbi
Ciao a tutti. Eccomi di nuovo...
La soluzione proposta da Standardoil su breadboard sembrava funzionare, anzi sono convinto che funzionasse.
Quindi ho saldato tutto su millefori per fare la versione definitiva del dispositivo.
Adesso però non funziona più...
Dopo qualche giorno di orazioni a tutti i santi del paradiso credo di aver capito il problema:
l'alimentatore 9V che uso deve avere a sua volta dei condensatori che si scaricano più lentamente dei miei mandando a meretrici tutto il ragionamento. Infatti il led presente sull'alimentatore si spegne dopo l'arduino...
Per caso avete qualche idea di come bypassare il problema? Tenendo conto del fatto che avrei già saldato tutto...
Allego lo schema aggiornato nella speranza che qualcuno abbia voglia di darci un'occhiata.
Grz
Grazie per la risposta, ma:
1 al momento non ho altri alimentatori, dovrei comprarne uno. Come verifico che non presenti lo stesso problema?
2 non saprei da dove cominciare
3 a monte dell'alimentatore c'è la 220...
Idea dell'una e 10... Se tra l'alimentatore e arduino (prima dei condensatori) metto qualcosa che fa scaricare velocemente i condensatori dell'alimentatore?
Metti in parallelo all'uscita dell'alimentatore un "carico" sufficiente ad effettuare una scarica rapida dei consensatori ...
... una resistenza da 82Ω 2W, che fa scorrere una corrente di poco più di 100 mA (buttandola costantemente in calore), dovrebbe garantirti la cosa.