배터리를 사용하기 위해 ATTiny85를 얻으려고합니다. 16으로 나누기 퓨즈 세트가있는 16.384 MHz 크리스탈에서 클럭킹했습니다. Vcc는 3.3V입니다. 데이터 시트의 그림 22-7에 따르면 유휴 상태 ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
)에서 약 300µA를 끌어 야합니다. 실제로, 나는 그것이 850µA와 같은 그림을 본다. 전력 소비가 두 배로 예상되는 이유를 알 수 없습니다. 25ms마다 중단하도록 구성된 timer0을 제외하고 PRR에서 모든 기능을 해제했습니다. 따라서 대부분의 시간을 유휴 상태로 보내야합니다.이 타이머는 여전히 타이머 계산을 원할 때 가장 좋습니다.
퓨즈는 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() {}