Определите, если Arduino быстро включается и выключается несколько раз

Приветствую вас, земляки!

Я поставил перед собой задачу выяснить, был ли Arduino быстро выключен и включен, чтобы перевести его в состояние настройки, что характерно для многих устройств IoT. Поэтому мне, по сути, нужно вести подсчет, скажем, трех предыдущих циклов включения/выключения. Я мог бы посмотреть на пользовательский загрузчик, который хранит количество включений в EEPROM, а затем проверить, составляет ли количество попыток >= 3 после запуска скетча (сброс счетчика), но я обеспокоен тем, что данные EEPROM могут быть повреждены во время цикл, или цикл питания будет настолько быстрым, что даже загрузчик вообще не завершит подсчет.

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

Может ли какая-нибудь добрая душа указать мне направление дискретного встречного решения, которое подходило бы для задачи? Чем проще (меньше дискретных компонентов), тем лучше.

Спасибо!

РЕШЕНО: принято менее дискретное, но полнофункциональное решение; отмечено в комментариях. Спасибо за ответ.

, 👍-1

Обсуждение

Приветствую вас, товарищи люди! -- Да как вы смеете! Я не человек!, @Majenko

Привет, Волан-де-Морт, приятно видеть, что ты также являешься энтузиастом маггловских технологий XD, @chrisl

удалите загрузчик и считайте сбросы первыми в скетче. на некоторых микроконтроллерах сброс не стирает SRAM, поэтому неинициализированная переменная может содержать счетчик. некоторые микроконтроллеры имеют память RTC, которая не очищается при сбросе., @Juraj

@Juraj: Сохранение счетчика в SRAM (в разделе .noinit) будет работать только для горячих сбросов. ОП, похоже, обеспокоен циклами питания., @Edgar Bonet

Спасибо за отзывы ребята. Я остановился на достаточно тривиальном ШИМ-сигнале с аддитивным сопротивлением, питаемом от декадного счетчика. Работает удовольствие., @He Who Shall Not Be Named


1 ответ


0

Обычно вы бы этого не сделали.

Как бы я это реализовал:

  1. Заставить MCU контролировать поступающее питание
  2. Обеспечить большой резервуар питания (конденсатор) для работы микроконтроллера на короткое время.
  3. Изолировать входной контроль мощности от резервуара с помощью диода.

При отключении питания микроконтроллер расходует накопленную в конденсаторе энергию. Затем MCU видит, что питание отключено (на 1 выше) и, возможно, уменьшает его мощность, выключая столько, сколько возможно, чтобы продлить время работы. Если питание повторно подается до того, как резервуар закончится, он переходит в состояние настройки. Если резервуар заканчивается, то на самом деле ничего особенного не происходит.

Например:

схема

Величина конденсатора определяет время работы. Вы также можете заменить конденсатор фильтром "LC PI", чтобы увеличить время работы, но за счет занимаемого места:

схема

,

Спасибо за ответ. Я использую подобную технику, чтобы выиграть достаточно времени при отключении питания, чтобы обеспечить плавное завершение работы, где это необходимо. Однако... Я откопал кучу 74LS90 и, благодаря аддитивному последовательному сопротивлению, нашел решение, которое достаточно близко соответствует критериям., @He Who Shall Not Be Named