我正在尝试让 ATtiny85 耗尽电池电量。我用一个 16.384 MHz 的晶体为它提供时钟,并设置了 8 分频保险丝。Vcc 为 3.3 伏。数据表中的图 22-7 表明,在空闲 ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
) 时,它应该消耗 300 µA 左右的电流。实际上,我看到它的电流更像是 850 µA。我无法弄清楚为什么功耗是预期的两倍。我已经关闭了 PRR 中的所有内容,除了 timer0,我将其配置为每 25 毫秒中断一次。所以它应该将大部分时间都花在空闲状态,这是我能做的最好的事情,因为我仍然希望计时器计数。
保险丝是 0x7f、0xdf、0xff。
这是它为此测试运行的代码:
#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() {}