Sleep Mode per risparmio energetico

Salve ragazzi, è un pò che non visito il forum...
Vorrei tnt riuscire a sfruttare questo tipo di funziona (sleepmode) non sono ancora riuscito a capire come funziona,...
Potreste farmi un esempio di un codice con la sleep mode?
Se non sbaglio per riattivare arduino dalla modalità sleepmode serve un interupt(che non sò fare T_T)..
poi un'altra domanda.. Se io uso un ricevitore ir, posso far attivare questa benedetta sleepmode non appena mando un codice dal telecomando?T_T nn sò come fare...

Se leggi il mio thread sul pannello solare ho affrontato da pochissimo il problema sia dello sleep che della gestione degli INT con diversi codici. Anche menniti nei suoi esperimenti nel thread dedicato alla barriera ad infrarossi ha affrontato lo stesso argomento, ossia risvegliare un micro con un impulso esterno.

Detto in maniera semplice, lo sleep è uno "stand-by" (anzi più di uno) per risparmiare energia: la sua efficienza dipende da quali componenti interni del micro spengi, consumando quindi sempre meno man mano che stacchi la spina a più roba. Ovviamente mettendo in stand-by il micro, il tuo codice si ferma. Per risvegliarlo vengono usati interrupt interni o esterni. Un interrupt interno è ad esempio un evento legato ad un timer, tipo un overflow di uno dei contatori dell'Atmega, alcuni dei quali (come il timer 2) possono viaggiare anche in alcune modalità di stand-by. Un interrupt esterno è invece un evento legato a qualcosa che accade sui pin di Arduino, come la lettura di un determinato segnale su un piedino oppure l'arrivo di dati sul bus I2C.

Anche il playground contiene alcuni documenti utili, cerca ad esempio la parola sleep.

anche il capitolo 9 del datasheet dell'atmega328 è un buon inizio.

mmhh.. Grazie mille per i consigli :slight_smile: leo72 mi potresti dare il nome del tuo thread o il link così vado a controllare?
BrainBooster stavo giusto pensando di scaricare il datasheet xD grazie epr avermi detto al pag. se non sbaglio sono oltre 500 omg

sono 562 pagine :slight_smile:
parti da pag.39

j84c3:
mmhh.. Grazie mille per i consigli :slight_smile: leo72 mi potresti dare il nome del tuo thread o il link così vado a controllare?
BrainBooster stavo giusto pensando di scaricare il datasheet xD grazie epr avermi detto al pag. se non sbaglio sono oltre 500 omg

Beh, anche un'occhiata agli ultimi Thread non ti sarebbe costata molto sudore, c'è la tua stessa richiesta fatta da Lesto, proprio ieri, e lì ci sono le indicazioni per trovare uno dei Thread a cui si fa riferimento; se ti è stato consigliato di cercare "sleep" 5 battute sulla tastiera + un INVIO potresti pure sprecarli, altrimenti va a finire che lo vuoi anche scritto il codice sul tuo IDE. Fa caldo, è vero, ma questi sono sforzi leggeri. Buona ricerca! :wink:
PS dopo che trovi e leggi, se hai bisogno di chiarimenti siamo a tua disposizione. :slight_smile:

j84c3:
leo72 mi potresti dare il nome del tuo thread o il link così vado a controllare?

Te l'avevo già messi:

il mio thread sul pannello solare ho affrontato da pochissimo il problema sia dello sleep che della gestione degli INT con diversi codici. Anche menniti nei suoi esperimenti nel thread dedicato alla barriera ad infrarossi

In entrambi i casi se mettevi le parole evidenziate nel campo di ricerca ti vengono fuori come primo risultato i thread citati:
http://arduino.cc/forum/index.php/topic,64941.0.html
http://arduino.cc/forum/index.php/topic,67433.0.html

mi aggancio per una domanda in tema, qualsiasi tipo di risparmio energetico blocca l'esecuzione del codice ? su un orologio ad esempio non puo' essere implementato nessun tipo di risparmio perche' bloccherebbe il conteggio dei millis ?

...aspetta, una cosa è bloccare l'esecuzione del programma, un'altra è bloccare i timers.
in alcune modalità di risparmio energetico, i timers possono restare attivi ed essere poi letti di tanto in tanto quando il programma riparte, virtualmentemente senza perdita di conteggi.
P.S.
...sempre meglio un rtc esterno :stuck_out_tongue:

No, puoi usare la modalità IDLE che ferma solo il clock della CPU però devi agganciare une vento ad un interrupt per risvegliare il micro. Poi ci sono modalità più o meno aggressive che via via staccano sempre più moduli interni.
Per un orologio la soluzione è quella che ho postato nel thread del pannello solare, dove uso il timer2 interno, che in modalità POWER SAVE non è fermato, e con un quarzo esterno (per avere un segnale molto preciso), farti 2 calcoli in modo da avere un overflow del timer ogni 1 ms e fare un piccolo codice che ogni 1000 ms aggiorni un contatore di secondi. In questo modo hai un orologio interno molto preciso senza usare componenti esterni come RTC.

quindi se ho capito, a grandi linee senza approfondire, il micro continuera' a contare i suoi millis ma non gestisce ad esempio i pin di uscita ?
l'orologio funziona con la 230V, quindi l'idea e' mettere una batteria a bottone per quando manca la corrente o quando lo stacco io volutamente dalla presa. la 230v stessa la userei come interrupt esterno

Se è come orologio l'Atmega ha una interessante funzione di RTC per cui collegando un quarzo esterno a 32768 Hz diventa un RTC molto preciso.
Se lo usi solo come orologio, forse potresti studiarti questa cosa (c'è sul datasheet).

grazie mille ad entrambi