Go Down

Topic: Circuito risparmioso (Read 1 time) previous topic - next topic

leo72

Tralascia la SoftwareSerial, che usi come una comune seriale.
Concentrati su sleep e interrupt:
http://www.arduino.cc/playground/Learning/arduinoSleepCode

Inizia studiando quegli esempi e cerca di imparare il più possibile. Poi aggiungici la SoftwareSerial e fai dei test per vedere se l'invio di un dato al micro in sleep risveglia quest'ultimo oppure no.

erpomata

#16
Nov 09, 2012, 06:09 am Last Edit: Nov 09, 2012, 07:18 am by erpomata Reason: 1
Ok ci sono riuscito ed ora mi è tutto più chiaro dal punto di vista hardware.
Per il software non ho capito se lo sleep è meglio o uguale al leggermi il datasheet cap 7.4 "Minimizing Power Consumtion" (cosa che ancora non ho fatto) o me lo devo leggere ugualmente? Cioè si può migliorare ancora il consumo di corrente oltre che a mettere in sleep il micro?

Inoltre mi pare di capire che la softwareserial gestisce processori cloccati come minimo a 8Mhz. Sbaglio?

Grazie

EDIT: forse dipende dal livello di sleep impostato?
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72


Ok ci sono riuscito ed ora mi è tutto più chiaro dal punto di vista hardware.
Per il software non ho capito se lo sleep è meglio o uguale al leggermi il datasheet cap 7.4 "Minimizing Power Consumtion" (cosa che ancora non ho fatto) o me lo devo leggere ugualmente? Cioè si può migliorare ancora il consumo di corrente oltre che a mettere in sleep il micro?

Per capire lo sleep devi leggerti quel capitolo. In questo modo capisci "perché" lo sleep fa risparmiare energia. Lo fa togliendo il clock ad alcune periferiche interne. Togliere il clock non significa però disattivarle. Se agisci sui registri di sistema puoi anche letteralmente togliere la corrente a queste periferiche, in modo che anche se non attive (=senza clock) esse non consumino proprio nulla perché la "spina è staccata".
Ad esempio, l'ADC è quello che consuma maggiormente corrente: in sleep resta comunque alimentato. Togliere l'alimentazione all'ADC significa abbattere i consumi in sleep del 40%.

Quote

Inoltre mi pare di capire che la softwareserial gestisce processori cloccati come minimo a 8Mhz. Sbaglio?

Grazie

EDIT: forse dipende dal livello di sleep impostato?

No, è un limite insito all'implementazione, sotto agli 8 MHz l'emulazione SW va fuori specifiche ed otterresti una trasmissione piena di errori.

erpomata

Tutto chiaro appena posso mi leggo il ds.

Per questo punto:


EDIT: forse dipende dal livello di sleep impostato?


forse, non mi sono spiegato bene.
Era riferito a:


Per il software non ho capito se lo sleep è meglio o uguale al leggermi il datasheet cap 7.4 "Minimizing Power Consumtion" (cosa che ancora non ho fatto) o me lo devo leggere ugualmente? Cioè si può migliorare ancora il consumo di corrente oltre che a mettere in sleep il micro?


Comunque è tutto chiaro devo leggermi il ds.
Per ora grazie.
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72

Ah, non avevo capito.
Certo, di sleep ne esistono più livelli: gli Attiny ne hanno 3, gli Atmega normalmente 5. Ogni livello stacca il clock a sempre più periferiche, però in questo modo si disattivano via via sempre più funzioni del micro ed andando negli "strati profondi" poi devi studiarti bene il modo per risvegliare il micro perché il metodo che andava per un livello meno aggressivo potrebbe non bastare più.

erpomata

Tornando alla discussione.
Vorrei sapere che differenza c'è, se ce n'è, tra il disabilitare i circuiti di cui non si ha bisogno tramite i fuse o tramite la libreria

Code: [Select]
#include <avr/power.h>

dove trovo:

Code: [Select]
  power_adc_disable();
  power_spi_disable();
  power_timer0_disable();
  power_timer1_disable();
  power_timer2_disable();
  power_twi_disable();


Non mi dite che la differenza sta solo nel fatto che la libreria power reimposta tutto ogni volta che si accende il micro e quindi riparte il software caricato mentre i fuse sono pronti già all'attivazione del micro.
http://www.paologiammarco.it
http://www.valentinamagni.it

leo72

Ci sono dei moduli che non puoi disattivare con i fuse. Questi gestiscono solo il Brown-Out ed il WatchDog, tutti gli altri moduli devi disattivarli via SW.

Go Up