J'essaie d'obtenir un ATTiny85 pour fonctionner avec une batterie. Je l'ai cadencé à partir d'un cristal 16,384 MHz, avec le jeu de fusibles diviser par 8. Vcc est de 3,3 volts. La figure 22-7 de la fiche technique indique qu'au ralenti ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
), il devrait tirer environ 300 µA. En fait, je le vois plus comme 850 µA. Je ne peux pas comprendre pourquoi la consommation d'énergie est double. J'ai tout désactivé dans PRR à l'exception de timer0, que j'ai configuré pour interrompre toutes les 25 ms. Il devrait donc passer la grande majorité de son temps à l'état inactif, ce que je peux faire de mieux étant donné que je veux toujours que les chronomètres comptent.
Les fusibles sont 0x7f, 0xdf, 0xff.
Voici le code qu'il exécute pour ce 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() {}