Estoy tratando de hacer que un ATTiny85 funcione con una batería. Lo tengo sincronizado con un cristal de 16.384 MHz, con el conjunto de fusibles dividir por 8. Vcc es 3.3 voltios. La Figura 22-7 en la hoja de datos dice que en inactivo ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
), debería dibujar alrededor de 300 µA. De hecho, lo veo dibujando más como 850 µA. No puedo entender por qué el consumo de energía es doblemente esperado. Apagué todo en PRR excepto el timer0, que configuré para interrumpir cada 25 ms. Por lo tanto, debería pasar la gran mayoría de su tiempo en el estado inactivo, que es lo mejor que puedo hacer dado que todavía quiero que cuenten los temporizadores.
Los fusibles son 0x7f, 0xdf, 0xff.
Aquí está el código que se está ejecutando para esta prueba:
#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() {}