Ich versuche, einen ATTiny85 dazu zu bringen, eine Batterie zu entladen. Ich habe es von einem 16,384-MHz-Kristall getaktet, wobei die Sicherung durch 8 geteilt wurde. Vcc beträgt 3,3 Volt. Abbildung 22-7 im Datenblatt besagt, dass im Leerlauf ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
) etwa 300 µA gezeichnet werden sollten. Tatsächlich sehe ich, dass es eher 850 µA zeichnet. Ich kann nicht herausfinden, warum der Stromverbrauch doppelt erwartet wird. Ich habe alles in PRR ausgeschaltet, außer timer0, das ich so konfiguriert habe, dass es alle 25 ms unterbrochen wird. Daher sollte es den größten Teil seiner Zeit im Leerlauf verbringen. Dies ist das Beste, was ich tun kann, da ich immer noch möchte, dass die Timer zählen.
Die Sicherungen sind 0x7f, 0xdf, 0xff.
Hier ist der Code, der für diesen Test ausgeführt wird:
#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() {}