Я пытаюсь заставить ATTiny85 работать от батареи. У меня он работает на частоте 16,384 МГц с установленным предохранителем деления на 8. Vcc составляет 3,3 вольт. На рисунке 22-7 в таблице указано, что при холостом ходу ( set_sleep_mode(SLEEP_MODE_IDLE); sleep_mode();
) он должен составлять около 300 мкА. На самом деле, я вижу, что это больше похоже на 850 мкА. Я не могу понять, почему энергопотребление ожидается в два раза. Я отключил все в 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() {}
Ответы:
Вы говорите, что в соответствии с рисунком 22-7 в техническом описании должно быть только 300 мкА, но этот график показывает текущее потребление для работы без деления часов. Кристаллический генератор, работающий на частоте 16 МГц, должен потреблять больше тока, чем генератор, работающий на частоте 2 МГц, а трехступенчатый делитель добавит немного больше. Вопрос - сколько еще?
Лист данных также предполагает, что ток холостого хода можно уменьшить, поделив тактовую частоту вниз, но опять же не говорится, насколько он будет уменьшен. Экстраполяция линии 3,3 В предполагает, что она обычно потребляет около 1,5 мА на частоте 16,4 МГц, а 850 мкА является значительным снижением, но должно ли оно быть меньше?
Если вы не можете использовать низкочастотный кристалл на досках, которые у вас есть, тогда вы ничего не сможете сделать. Однако, хотя у вас есть схема на макете, вы можете по крайней мере попробовать кристалл 2 МГц, чтобы увидеть, действительно ли это проблема.
источник
У меня была похожая проблема с этим чипом. Потребляемая мощность была на 30% больше, чем ожидалось.
В вопросах был неиспользован GPIO!
Они были настроены как входы и оставлены плавающими. Отсутствие четко определенного состояния ввода действительно заставило драйвер GPIO потреблять намного больше, чем указано.
Ответ состоял в том, чтобы включить подтягивания или настроить неиспользуемые контакты в качестве выходов.
Вы уверены, что контакты установлены правильно? В вашем коде это выглядит так, но вы проверили?
источник
pinMode(P_UNUSED, INPUT_PULLUP);
не достаточно, тогда WTF?pinMode(3, INPUT_PULLUP);
и то же для 4 и 5 ничего не делало.Я хотел бы добавить, что для отдельного проекта я задал этот вопрос , и ответ также сильно повлиял на этот вопрос. очистка
ADCSRA
привела к тому, что потребление в режиме ожидания снизилось до того, что на рис. 22-6 указано, что оно должно принимать - около 100 мкА при частоте системной тактовой частоты 500 кГц - и это тактовая частота после деления, а не частота кристалла.источник