Power-saving mode of AVR microcontrollers. Sleep modes on the example of ATtiny13

Поделиться
HTML-код
  • Опубликовано: 26 июл 2024
  • In this video, we will analyze various energy saving options, how to enter the power saving mode and how to exit it, and how much electricity can be saved.
    Let's analyze the cases when it is advisable to put the microcontroller into power saving mode, what are the power saving modes. We will also analyze how to exit sleep mode by interruption and by the activation of the Watchdog counter.
    In the video, using a multimeter, we will measure the electricity consumption in various sleep modes.
    Sketch with different sleep modes (C) - drive.google.com/file/d/13_dl...
    Sketch with different sleep modes (Arduino) - drive.google.com/file/d/1KVKc...
    Waking up with Watchdog (C) - drive.google.com/file/d/1zoHc...
    Waking up with Watchdog (Arduino) - drive.google.com/file/d/1s8Lb...
    Waking up from sleep with INT0 interrupt (C) - drive.google.com/file/d/1yqxu...
    Waking up from sleep using INT0 interrupt (Arduino) - drive.google.com/file/d/1O-LV...
    0:00 How much does the microcontroller consume?
    1:37 When you need power saving mode
    3:48 Basic power saving modes
    6:30 Current consumption in different sleep modes
    11:01 Watchdog wake up
    14:25 Exit from sleep by interrupt INT0
  • НаукаНаука

Комментарии • 47

  • @rosaviakosmos
    @rosaviakosmos 2 года назад +3

    Спасибо! Бомбическое видео, все очень понятно, готов поставить пиво

    • @neoalternator
      @neoalternator  2 года назад +1

      А вот и первый доход с Ютуба))))

  • @user-co4vk4dr3w
    @user-co4vk4dr3w 2 года назад +2

    Это лучщее видео на данную тему, что я видел. А искал я долго :)

  • @quasar3885
    @quasar3885 2 года назад +1

    Спасибо вам.. Долго ждал этого видел.. Спасибо что вы еще показываете это в IDE...

    • @neoalternator
      @neoalternator  2 года назад +1

      Язык функций мне самому ближе, но язык регистров ближе микроконтроллеру. Вот и стараюсь "и нашим и вашим" ))

  • @vtech8716
    @vtech8716 2 года назад +2

    Спасибо хороший человек за внятное объяснение. Удачи

  • @stasstas268
    @stasstas268 Год назад

    супер. спасибо большое

  • @Ruth_Asada
    @Ruth_Asada 2 года назад +1

    Спасибо за работу. Как раз хотел сделать аварийную мигалку с большим сроком службы.

    • @neoalternator
      @neoalternator  2 года назад +1

      Спасибо за отзыв и успехов в проекте!

  • @worldmanagerpeacemaker
    @worldmanagerpeacemaker 2 года назад +2

    Эх надо бы поставить памятник на красной площади, тюркскому учёному Аль-Хорезми который разработал АЛГОРИТМ , сидели бы сейчас в каменном веке ! 😂

  • @user-wq4sd6tr6x
    @user-wq4sd6tr6x 2 года назад +1

    Очень полезная тема, спасибо! Это как раз то, что мне нужно для разработки устройства с миниатюрным источником питания. А если ставить устройство на ☀️, то знание этой темы позволяет сильно сэкономить на размерах солнечной панели и заряжаемого ею аккумулятора.

    • @neoalternator
      @neoalternator  2 года назад +1

      Или, например, от элемента Пельтье. Достаточно будет небольшого градиента температур для работы мк и дозарядки аккумулятора.

    • @user-wq4sd6tr6x
      @user-wq4sd6tr6x 2 года назад +1

      @@neoalternator Микроконтроллеры AVR - потрясная вещь! Оказывается, их придумали, разработали всю линейку (каких только нет! вот и с радиопередатчиком, я смотрю, есть) в США в конце 90-х - начале 2000-х. Всё продумано, всё прекрасно, возможности широки и безграничны. Нет ничего умнее на свете! Думаю, за Attiny американцам можно всё простить и дружить с ними.

    • @neoalternator
      @neoalternator  2 года назад +1

      @@user-wq4sd6tr6x Согласен! Считаю, что их большой плюс - очень понятная и доступная для освоения документация. Возможно благодаря этому много пользовательских библиотек к этим мк и проектов на их основе.

    • @worldmanagerpeacemaker
      @worldmanagerpeacemaker 2 года назад

      @@neoalternator Получается что на 1 секунду на каждую 1 минуту может просыпаться , чтобы сделать замер показателей и отправить данные на базу (центр управления) так чтобы таблетку хватило на 1 год !??? Правильно ли я подсчитал ?

    • @worldmanagerpeacemaker
      @worldmanagerpeacemaker 2 года назад

      @@user-wq4sd6tr6x А за смартфон можно и памятник амеиканцам поставить в центре красной площади !

  • @user-ce4lc9rs3n
    @user-ce4lc9rs3n 2 года назад +1

    Как всегда отличное познавательное видео!. Ещё, может я прослушал, но не услышал, что использовать ватчдог не по прямому назначению (а именно - reset зависшей программы) можно только в Attiny13. (хотя может и в других малютках можно, поправьте если что...)

    • @neoalternator
      @neoalternator  2 года назад

      Спасибо за отзыв! У большинства работает и на прерывание. У Т10, Т13, Т25/45/85 точно работает и на прерывание и на ресет. Всегда можно уточнить в даташите в таблице Watchdog Timer Configuration

  • @IgorShuvalov_Ronin
    @IgorShuvalov_Ronin 9 месяцев назад

    Подскажите, а сам "переход" в режим энергосбережения накладный? Если у меня, скажем задача каждые 100мс изменять параметры свечения RGB светодиода. Будет ли смысл погружаться в режим энергосбережения между этими действиями? При какой частоте необходимости просыпаться смысл в "засыпании" отпадёт?

  • @user-ss1tr9up1y
    @user-ss1tr9up1y 11 месяцев назад

    Подскажите пожалуйста как можно сделать режим сна atmega328p в программе Flprog.

  • @liosha2007
    @liosha2007 2 года назад +1

    Спасибо, очень интересно. Возник такой вопрос, при каком времени простоя есть смысл усыплять мк? В плане расхода энергии. Если простой 10? А если секунда? Пол секунды? Есть ли дополнительные расходы энергии на усыпление/пробуждение? Спасибо

    • @neoalternator
      @neoalternator  2 года назад +1

      Даже на полсекунды имеет смысл усыплять, при автономном питании. Энергия на засыпание и пробуждение не тратится.

  • @VasyaPupkinus
    @VasyaPupkinus Год назад

    Привет. Видать у тебя мультиметр не могЁт измерять малые токи ну или просто врёт. В режиме ПоверДаун тинька должна кушать меньше 1 микроампера а с включённым ВачДогом примерно 5 микроампер. А для наших мигалочек это очень важно знать )))

  • @user-bs4jn3ms8h
    @user-bs4jn3ms8h 2 года назад +1

    Спасибо!
    Ждал этого видео.
    Но увидел не все, что хотел. В комментариях к видео о WDT, я спрашивал о пробуждении от внешних прерываний PCINT. Именно о них, так как пинов с такой возможностью у МК больше, чем с INT (например когда нужно пробуждаться от нескольких источников команд).
    Значит спрошу здесь ))).
    При работе с пинами внешних прерываний PCINT команда "attachInterrupt" тоже работает? Ею можно назначить любой из пинов PCINT для выполнения функции по внешнему прерыванию?
    Читал, что вроде эта команда работает только с пинами прерываний INT.
    Буду благодарен за ответ.
    Если неправ - поправьте.

    • @neoalternator
      @neoalternator  2 года назад +1

      Это тема тянет на отдельное видео. Постараюсь его опубликовать на ближайших выходных. Ардуиновская attachInterrupt может работать только с INT0, INT1 и т.д. Активировать и работать с PCINT нужно через регистры и отслеживание вектора прерывания. В общем тема хорошая, интересная, так что скоро будет по ней видео!

    • @user-bs4jn3ms8h
      @user-bs4jn3ms8h 2 года назад +1

      @@neoalternator Спасибо, значит я не ошибся с "attachInterrupt". Опять придется ждать с нетерпением))).
      Насколько я смог разобраться с регистрами по даташиту (в моем случае Attiny 44), то для моих задач нужно:
      MCUCR |= (1

    • @user-bs4jn3ms8h
      @user-bs4jn3ms8h 2 года назад

      @@neoalternator Сегодня пробовал поиграться.
      Загнать в сон получилось. Выйти из сна тоже, но обратно в сон не уходит.
      По сути, образно, нужно чтобы после нажатия на кнопку МК проснулся, светодиод светился некоторое время, потом погас и МК уснул. Аналогично и с другими парами кнопка- светодиод.
      Код с задержкой на millis пробовал в обычном режиме - всё работает. После нажатия на кнопку светодиод светится заданное время. После того как задержка по millis проходит - светодиод гаснет.
      А вот с прерываниями он засвечивается и не гаснет. Видимо где-то нарушен порядок команд.
      Придется видимо ждать вашего видео ))).

    • @user-ce4lc9rs3n
      @user-ce4lc9rs3n 2 года назад

      Конкретно в Attiny13 есть два вида прерывания от пин. Сложное только на 6-й ноге INT0addrs (есть выбор какой "полярности" импульс запустит). Простое PCI0addrs на любой ноге (включая и 6ногу) - по любому изменению на ноге (с "0" на "1" и обратно). Пишу на ASM, проверяю в Proteus. К примеру, для проверки работы прерывания от любой ноги, вставляю в обработчик команду "inc R31" и вижу число "2" в регистре. Это потому что тактовая кнопка в одну сторону +1 и в обратную +1. Т.е. два раза срабатывает прерывание за одно нажатие (дребезг "протез" не учитывает). Ардуино плохо подходит для изучения таких маленьких (но удаленьких!) микроконтроллеров. Лучше найти хорошую старую книжку...

    • @neoalternator
      @neoalternator  2 года назад

      Millis криво работает, если используется прерывания. По сути, на время работы прерывания основной таймер останавливается. И видимо (мое предположение) функция millis зависает. Лучше использовать прерывание по переполнению таймера TIM0_OVF. Оно как раз позволяет установить периодичность включения/измерения чего-либо, пока микроконтроллер бодрствует.

  • @RomaRingo
    @RomaRingo 2 года назад

    Здравствуйте. Сделайте пожалуйста скетч для ТИНИ13 со спящим энергосберегающим режимом. Тактовая кнопка чтобы разбудить жмем 2 сек, чтобы выключать также. 5 режимов ШИМ 5%, 25%,50%,75%,100% частота 500 гц. переключение режимов тойже кнопкой , нажимать на 1 сек. Частота тини13 думаю 2-4Mhz.

    • @neoalternator
      @neoalternator  2 года назад

      Здравствуйте! Я не пишу скетчи на заказ. И шим, и работа с кнопкой, и про энергосбережение есть в моих видео. Всё сложить придется самостоятельно.

  • @worldmanagerpeacemaker
    @worldmanagerpeacemaker 2 года назад

    Получается что на 1 секунду на каждую 1 минуту может просыпаться , чтобы сделать замер показателей и отправить данные на базу (центр управления) так чтобы таблетку хватило на 1 год !??? Правильно ли я подсчитал ?

    • @neoalternator
      @neoalternator  2 года назад

      Просыпаться он будет максимум каждые 8 секунд. Если нужно действие выполнять раз в минуту, то 7 раз будет просыпаться вхолостую, а на 8 раз, выполнять какое-то действие. На год таблетки должно хватить. В теории, даже дольше.

  • @vtech8716
    @vtech8716 2 года назад

    У меня очень странно ведёт себя tiny13, Ваши примеры программ работают только при использовании языка С так сказать, а вот примеры с применением ардуиновских функций не работают от слова вообще, версия среды 1.8.13

    • @neoalternator
      @neoalternator  2 года назад

      У меня тоже 1.8.13. Возможно библиотека Тини13 устарела?

  • @vtech8716
    @vtech8716 2 года назад

    Возможно я невнимательно слушал, скажите пожалуйста что делать если продолжительность сна должна быть более 8 секунд?

    • @neoalternator
      @neoalternator  2 года назад +1

      Либо будить по внешнему таймеру. Т.е. что-то снаружи считает время и когда нужно создает внешнее прерывание. Либо просыпаться по watchdog раз в 8 секунд, добавлять некой переменной единицу и снова засыпать. Это мизер с т.з. энергозатрат. И когда эта переменная станет например 5, выполнять какое-то действие и сбрасывать ее. Таким образом, выполняться задача будет раз в 40 секунд (8*5).