Споживання енергії ATtiny85 удвічі очікуване


9

Я намагаюся отримати 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() {}

1
Ти вбив компаратора?
Ігнасіо Васкес-Абрамс

1
Ви подивилися на деякі хитрощі, які зробив хлопець із джелабеса? Дивіться тут (почніть читати внизу): jeelabs.org/tag/lowpower
RJR

1
@RJR Я подивився, і, на жаль, багато їхніх хитрощів не спрацюють, тому що я можу використовувати лише SLEEP_MODE_IDLE, тому що мені потрібно тримати таймер. Ця програма - це годинник.
nsayer

1
Якщо це годинник, чи можу я запропонувати вимкнути внутрішній генератор і використовувати кристал годинника на таймері 2, щоб стріляти з переривання сторожової служби? Потім можна використовувати глибокий сон. Я думаю, що про це десь і є повідомлення в блозі jeelabs.
RJR

1
Я бачу, що я бачу, що вони використовують зовнішній модуль RTC. Якщо у вас є RTC, то так, ви можете використовувати сторожову собаку та внутрішній генератор, оскільки годинник процесора не важливий. Однак у цьому випадку я хочу точності кристала. Крім того, це ATTiny85 - немає таймера 2, просто 0 і 1, і таймер 1 споживає на порядок більше енергії, ніж таймер 0. Я не знаю, як би ви підключили кристал до ATTiny без будь-які додаткові зовнішні компоненти, крім системного годинника.
nsayer

Відповіді:


6

Ви говорите, що згідно з рисунком 22-7 у таблиці повинен бути лише 300 мкА, але цей графік показує поточний малюнок для роботи без тактового поділу. Кристалічний генератор, що працює на частоті 16 МГц, повинен притягувати більше струму, ніж один, що працює на 2 МГц, і 3-ступінчастий дільник додасть трохи більше. Питання - скільки ще?

Даний аркуш також дозволяє припустити, що струм холостого ходу можна зменшити діленням годинника вниз, але знову ж таки це не говорить на скільки він буде зменшений. Екстраполяція лінії 3,3 В говорить про те, що зазвичай вона складе близько 1,5 мА на частоті 16,4 МГц, а 850 мкА - це значне зменшення - але чи повинно бути менше?

Якщо ви не можете використовувати кристал низької частоти на платах, які ви приїжджаєте, то ви можете нічого не зробити. Однак, хоча у вас є схема на дошці, ви можете принаймні спробувати кристал 2 МГц, щоб побачити, чи справді це проблема.

введіть тут опис зображення


Добре. Я кусаю. Сьогодні я піду до магазину, беру кристал 2 МГц і знову розпалюю чіп, не поділяючи годинника, і перевіряю його.
nsayer

Ще одна складність полягає у необхідності частот 2 ^ х кристалів. Я зайшов у магазин і знайшов 4.096 МГц, але 1,024 та 2,048 важко знайти. Але якщо не використовувати годинник 2 ^ x, це важко вибрати значення загальної шкали та значення OCR0A, що призводить до рівної частки секунди переривань. Але якщо 8,192 МГц, розділений на 16, економить значну потужність, я, безумовно, задоволений би тим, що понад 16.384 ділиться на 32.
nsayer

2
Маючи кристал 4.096 МГц і значення центральної тактової частоти процесора 8, він складає близько 450 мкА.
nsayer

запізнюється на кілька років, але чому б не придбати RTC і не використовувати його PPS, міцно спати процесор і мати його лише в режимі пробудження.
HilarieAK

3

У мене була схожа проблема з цим чіпом. Споживання електроенергії було на 30% більше, ніж очікувалося.

Проблеми були невикористаними GPIO!

Вони були налаштовані як входи та залишилися плаваючими. Відсутність чітко визначеного стану введення змусило драйвер GPIO споживати набагато більше, ніж зазначено.

Відповідь полягала в тому, щоб дозволити підтягування або налаштувати невикористані штифти як вихід.

Ви впевнені, що штифти встановлені правильно? У вашому коді це здається, але ви перевірили?


Ну лайно. Якщо pinMode(P_UNUSED, INPUT_PULLUP);недостатньо, то WTF?
nsayer

Так, але іноді цього недостатньо. Наприклад, у вас можуть бути штифти, які за замовчуванням входять АЦП або аналоговий вхід, незалежно від напрямку, який ви програмуєте. Там спочатку потрібно відключити вторинну функцію. Ось що я мав на увазі під «перевірку».
Blup1980

Це ATTiny85. Є 6 штифтів, але 3 з них RESET та два xtal шпильки. Два з них - вихідні дані, а один - P_UNUSED. Весь АЦП явно вимкнено. Я спробую трюк INPUT_PULLUP на інших 3-х штирях, але підозрюю, що він нічого не змінить. Існує помилка для Tiny45, яка говорить про не встановлення xtal штифтів на OUTPUT через споживання енергії.
nsayer

Додавання pinMode(3, INPUT_PULLUP);і те саме для 4 і 5 нічого не зробило.
nsayer

1

Я хотів би додати, що для окремого проекту я поставив це питання , і відповідь кардинально вплинула на це питання. очищення ADCSRAзнизило споживання простою до того, що на рисунку 22-6 сказано, що це потрібно - близько 100 мкА при розділеній тактовій частоті системи 500 кГц - і це тактова частота після поділу, а не частота кристала.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.