Сон на AVR

“Господа! … страшная пауза…”(с) Какой минимальный ток удалось достичь на ваших микроконтроллерах в режиме глубокого сна с пробуждением от таймера или сторожевого?

Я таким сам лично не занимался (не было нужно), но вообще должно быть что-то в районе единиц микроампер (1..10 мкА).
А какой результат у тебя?

у меня документально замерено 7мкА на 328P(Pico power) с пробуждением по WDT.

Там ннада обязательно ADSRA = 0 делать перед сном и BOD отключать.

Ссылку на форум Ника Гаммона я где-то на днях давал, там есть про энергосбережение, у него 0.355 мкА получалось, я такое не измерю

1 лайк

Найтить?

Не, пасиб, там уже шарюсь.

Оно как бы так и и еззь, но “хотелось бы уточнить”(с)
Мучаю Attiny2313 и в глубоком сне выходит 0.12мкА(радосно), но будится только от внешнего прерывания. А стоит завести собаку, то сразу до 5.8 мкА. Вот у хотел уточнить, норм ли это и не будет ли лучшее ежели взять мегу и задействовать не собаку а таймер? Уж скозложопить программировать точно на порядок легче будет

Поэтому и радостно, что все счетчики отключаются. Логично, что при включении wdt ток возрастает.

А чем измеряешь такие малые токи (0.12мкА)? Что за прибор (или приставка)?

Uni-T UT61E.
Ща ещё выяснилось, шо просыпается с полным резетом, а не с момента входа. Грусновое.

Чтобы с момента входа - это “режим ожидания” - “idle mode”. В нём самое высокое потребление.(Сколько точно - не скажу, не знаю))

Моя думать, что это мои руки/моск! Должно работать! Я сначала мучал тиню, но узнав что в глубоком не работают таймеры(типа нужон ассинхронный),нет 1МГц внутреннего, кривая мнемоника в IDE, переключился на мегу. Ну как переключился - нашёл и запаял 88L(ажно до 1.8 вольтов работает). Домохозяйка унутре возрадовалась и сразу полезла в готовые библиотеки(Гайвер наше всё) и обнаружил, что время сна у него выбирается СУММИРОВАНИЕМ СОБАКИ. Удивился и … вот я опять ко :grinning_face:выряю тиньку

По моему, это не так. Режим Power save как раз об этом.

А по прерыванию от Timer2?
И зачем тебе Гайвер? Лучше даташит почитать ИМХО))

А нету ентого в тини. :slightly_smiling_face:

И ентого нету, а шо есть не работает в глубоком сне.
Сейчас накидаю предметно, ибо обнаруженный полный резет это уже последствия изучения другого бага :grinning_face_with_smiling_eyes:

Так я про Мегу))

В любом случае, выход из глубокого сна это ресет что на Тини, что на Меге

:open_mouth: А как же.. там.. у .. него..?! Ну и лан. В любом случае это выяснилось в попытке понять: а какого хрена скетч при очередном просыпании выходит на режим зацикливания как в старых(не оптибутовских) загрузчиках при срабатывании собаки. Причём может на второй раз, может на десятый а может и гораздо позже.
О, мысля пришла поставить галку в во фюзах.

#include <avr/sleep.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/wdt.h>

#define Power PB0

void Res()
{
  PORTB |= (1 << Power);
  _delay_ms(250);
  PORTB &= ~(1 << Power);
  _delay_ms(250);
}

void Vkl()
{
  PORTB |= (1 << Power);
  _delay_ms(50);
  PORTB &= ~(1 << Power);
  _delay_ms(50);
}

ISR (WDT_vect) // watchdog interrupt
{
  wdt_disable();  // disable watchdog
}  // end of WDT_vect

void setup() {
  DDRB |= (1 << Power);
  Res();
}

void loop() {

  Vkl();

  MCUSR = 0;   // clear various "reset" flags
  WDTCSR = bit (WDCE) | bit (WDE);   // allow changes, disable reset
  WDTCSR = bit (WDIE) | bit (WDP3) | bit (WDP0);   // set interrupt mode and an interval // set WDIE, and 8 seconds delay
  wdt_reset();  // pat the dog

  set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  noInterrupts ();   // timed sequence follows
  sleep_enable();
  interrupts ();             // guarantees next instruction executed
  sleep_cpu ();
  sleep_disable();   // cancel sleep as a precaution

  /*
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    sleep_cpu();
    sleep_disable();
  */
}

Аддон TinyCore, BOD отключен во фюзах.

Возможно полезная инфа: при установке галки WDTON при подаче питания сразу зацикливается(быстрое моргание светодиодом).

А в чём смысл не подтянутой кнопки?

В экономии икстричества. Это не для пробуждения(все совпадения случайны). Поперву я даже цепь сброса не ставил с целью сэкономить, но после начавшегося зацикливания вернул(не помогло). Кстати цепь увеличивает ток всего на 0.02мкА.(математика? не, не слышал)

На вскидку - нихрена не понял.(тупею с годами)) Ладно, может позже ещё гляну, если никто не ответит.

Кстати приветствую , давно не было видно!

1 лайк