спящий режим и сторожевой пес одновременно

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

, 👍3

Обсуждение

Пожалуйста, покажите нам скетч, который вы используете., @VE7JRO


2 ответа


2

Когда вы спите, Arduino заблокирован. Так что да, сторожевой таймер отключится и сбросит Arduino.

Но, поскольку вы находитесь в спящем режиме, это не столько "перезагрузка", сколько "пробуждение".

Сторожевой таймер - это один из обычных способов периодически просыпаться, чтобы что-то делать. Если вы хотите использовать сторожевую собаку для другой "антиблокировочной" цели, вам придется придумать какой-то другой способ проснуться до истечения срока действия сторожевой собаки, чтобы вы могли "пнуть" ее.

Или вы полностью отключаете сторожевой таймер перед сном, чтобы единственным источником пробуждения был любой настроенный вами источник. Затем вы можете снова включить сторожевой пес, когда проснетесь.

Однако это, вероятно, означает, что сторожевой пес бесполезен, так как, скорее всего, вы не будете бодрствовать достаточно долго, чтобы сторожевой пес оказал какое-либо действие.

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

,

Если вы переведете arduino в спящий режим во время работы сторожевого пса, arduino сбросится через заданное время. Если только вы не настроите сторожевого пса на запуск прерывания. Сторожевой пес не является источником пробуждения, если вы не настроили его как таковой. Также обратите внимание, что сторожевой пес отключает прерывание при срабатывании. Это делается для того, чтобы, если программа зависнет, в первый тайм-аут она вызовет прерывание, а второй тайм-аут вызовет сброс., @Gerben


1

Либо установите сторожевой таймер на 8 секунд и настройте прерывание WDT. И смиритесь с тем фактом, что микроконтроллер просыпается каждые 8 секунд. Вы могли бы заставить его снова заснуть, если только не будет нажата кнопка или что-то в этом роде. Дополнительное энергопотребление для этих коротких пробуждений в большинстве случаев незначительно.

Или отключите сторожевой таймер прямо перед сном и включите его сразу после пробуждения. И надеюсь, что MCU никогда не встанет между ними.

,

периодический сброс(или перезагрузка) не повредит микроконтроллеру?, @sepehr

Нет. Не повредит микроконтроллеру., @Gerben