Pili bitirmek için ATTiny85 almaya çalışıyorum. 16.384 MHz'lik bir kristalden saatte 8'e bölünmüş sigorta seti ile çalıştım. Vcc 3.3 volttur. Veri sayfasındaki Şekil 22-7, boşta ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
), yaklaşık 300 uA çekmesi gerektiğini söylüyor . Aslında, 850 µA gibi daha fazla çizim yaptığını görüyorum. Güç tüketiminin neden iki kat beklendiğini anlayamıyorum. 25 ms'de bir kesmek için yapılandırdığım timer0 dışında PRR'deki her şeyi kapattım. Bu yüzden zamanının büyük çoğunluğunu hala zamanlayıcıların sayılmasını istediğim göz önüne alındığında yapabileceğim en iyi şey boşta durumda geçirmelidir.
Sigortalar 0x7f, 0xdf, 0xff'dir.
İşte bu test için çalıştırdığı kod:
#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() {}