Определите, если Arduino быстро включается и выключается несколько раз
Приветствую вас, земляки!
Я поставил перед собой задачу выяснить, был ли Arduino быстро выключен и включен, чтобы перевести его в состояние настройки, что характерно для многих устройств IoT. Поэтому мне, по сути, нужно вести подсчет, скажем, трех предыдущих циклов включения/выключения. Я мог бы посмотреть на пользовательский загрузчик, который хранит количество включений в EEPROM, а затем проверить, составляет ли количество попыток >= 3 после запуска скетча (сброс счетчика), но я обеспокоен тем, что данные EEPROM могут быть повреждены во время цикл, или цикл питания будет настолько быстрым, что даже загрузчик вообще не завершит подсчет.
Итак, я полагаю, что мне нужно другое решение: внешний счетчик, питаемый от Arduino, который увеличивается каждый раз, когда Arduino получает питание, но не зависит от того, что Arduino запустит что-либо значимое для ведения счета.
Может ли какая-нибудь добрая душа указать мне направление дискретного встречного решения, которое подходило бы для задачи? Чем проще (меньше дискретных компонентов), тем лучше.
Спасибо!
РЕШЕНО: принято менее дискретное, но полнофункциональное решение; отмечено в комментариях. Спасибо за ответ.
@He Who Shall Not Be Named, 👍-1
Обсуждение1 ответ
Обычно вы бы этого не сделали.
Как бы я это реализовал:
- Заставить MCU контролировать поступающее питание
- Обеспечить большой резервуар питания (конденсатор) для работы микроконтроллера на короткое время.
- Изолировать входной контроль мощности от резервуара с помощью диода.
При отключении питания микроконтроллер расходует накопленную в конденсаторе энергию. Затем MCU видит, что питание отключено (на 1 выше) и, возможно, уменьшает его мощность, выключая столько, сколько возможно, чтобы продлить время работы. Если питание повторно подается до того, как резервуар закончится, он переходит в состояние настройки. Если резервуар заканчивается, то на самом деле ничего особенного не происходит.
Например:
Величина конденсатора определяет время работы. Вы также можете заменить конденсатор фильтром "LC PI", чтобы увеличить время работы, но за счет занимаемого места:
Спасибо за ответ. Я использую подобную технику, чтобы выиграть достаточно времени при отключении питания, чтобы обеспечить плавное завершение работы, где это необходимо. Однако... Я откопал кучу 74LS90 и, благодаря аддитивному последовательному сопротивлению, нашел решение, которое достаточно близко соответствует критериям., @He Who Shall Not Be Named
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Питание светодиодной ленты - Сколько ампер?
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
- Power Bank самопроизвольно отключается
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- Если USB дает 5 В, как Arduino может подавать 5 В на контакт 5 В? (И еще вопрос)
- Могу ли я иметь резервное питание для устройства Arduino?
- Клон Digispark не распознается при подключении
Приветствую вас, товарищи люди!
-- Да как вы смеете! Я не человек!, @MajenkoПривет, Волан-де-Морт, приятно видеть, что ты также являешься энтузиастом маггловских технологий XD, @chrisl
удалите загрузчик и считайте сбросы первыми в скетче. на некоторых микроконтроллерах сброс не стирает SRAM, поэтому неинициализированная переменная может содержать счетчик. некоторые микроконтроллеры имеют память RTC, которая не очищается при сбросе., @Juraj
@Juraj: Сохранение счетчика в SRAM (в разделе .noinit) будет работать только для горячих сбросов. ОП, похоже, обеспокоен циклами питания., @Edgar Bonet
Спасибо за отзывы ребята. Я остановился на достаточно тривиальном ШИМ-сигнале с аддитивным сопротивлением, питаемом от декадного счетчика. Работает удовольствие., @He Who Shall Not Be Named