Sto cercando di far funzionare una batteria ATTiny85. L'ho sincronizzato da un cristallo da 16.384 MHz, con il set di fusibili divide per 8. Vcc è 3,3 volt. La Figura 22-7 nel foglio dati dice che al minimo ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
), dovrebbe assorbire circa 300 µA. In realtà, lo vedo disegnare più come 850 µA. Non riesco a capire perché il consumo energetico sia doppio. Ho disattivato tutto in PRR tranne Timer0, che ho configurato per interrompere ogni 25 ms. Quindi dovrebbe passare la maggior parte del tempo nello stato inattivo, che è il massimo che posso fare dato che voglio ancora contare i timer.
I fusibili sono 0x7f, 0xdf, 0xff.
Ecco il codice in esecuzione per questo test:
#include <Arduino.h>
#include <EEPROM.h>
#include <avr/sleep.h>
#include <avr/power.h>
#define P0 0
#define P1 1
#define P_UNUSED 2
ISR(TIMER0_COMPA_vect) {
// do nothing - just wake up
}
void setup() {
power_adc_disable();
power_usi_disable();
power_timer1_disable();
//PRR = _BV(PRADC) | _BV(PRTIM1) | _BV(PRUSI); // everything off but timer 0.
TCCR0A = _BV(WGM01); // mode 2 - CTC
TCCR0B = _BV(CS02) | _BV(CS00); // prescale = 1024
// xtal freq = 16.384 MHz.
// CPU freq = 16.384 MHz / 8 = 2.048 MHz
// count freq = 2.048 MHz / 1024 = 2000 Hz
OCR0A = 50; // 25 msec per irq
TIMSK = _BV(OCIE0A); // OCR0A interrupt only.
set_sleep_mode(SLEEP_MODE_IDLE);
pinMode(P_UNUSED, INPUT_PULLUP);
pinMode(P0, OUTPUT);
pinMode(P1, OUTPUT);
digitalWrite(P0, LOW);
digitalWrite(P1, LOW);
while(1) { sleep_mode(); }
}
void loop() {}