Ciao a tutti!
Per un progetto a basso consumo ho trovato online diverse guide su come far consumare meno corrente ad un atmega in stand-alone, le quali sfruttano watchdog per far "dormire" il microcontrollore e disabilitano ciò che non viene utilizzato.
In particolare, dal sito di Leonardo Milani, ho trovato il seguente pezzo di codice che disabilita e spegne diverse periferiche (i commenti, presi dal codice originali, sono più che esplicativi).
Ciò che mi chiedo è: come si riattivano tali periferiche? Devo ricaricare il bootloader? Perchè tale parte di codice non riesco a comprenderla.
Grazie a tutti per l'aiuto!
void powerSaver() {
//set the internal registers to reduce power consumes
PRR &= ~((1<<PRUSART0) | (1<<PRADC) | (1<<PRSPI) | (1<<PRTIM1) | (PRTWI)); //shut down the following: USART, ADC, I2C, Timer1, SPI
ADCSRA &= ~(1<<ADEN); //shut down the ADC
ACSR = (1<<ACD); //shut down the analog comparator
DIDR0 = ((1<<ADC5D) | (1<<ADC4D) | (1<<ADC3D) | (1<<ADC2D) | (1<<ADC1D) | (1<<ADC0D)); //shut down digital input buffers on pins ADC0..5
DIDR1 = (1<<AIN1D)|(1<<AIN0D); //shut down digital input buffer on AIN0..1
MCUCR |= (1<<BODS); //BOD disabled
WDTCSR &= ~((1<<WDCE) | (1<<WDE)); //watchdog disabled
//prepare the sleep mode
set_sleep_mode(SLEEP_MODE_PWR_SAVE); // set the sleep for POWER SAVE mode
sleep_enable(); // sleep ready to use
}