В этой новой статье мы увидим, что такое сторожевой пес, для чего это можно использовать и как использовать в своих проектах Arduino. Все, что вам нужно знать об этой интересной, но неизвестной функции. И да, как следует из названия (сторожевой таймер), его можно использовать для отслеживания некоторых проблем.
Здесь мы увидим все, что вам нужно знать касательно…
Что такое сторожевой пес?
В вычислениях сторожевая собака — это контролирующий механизм, используемый для мониторинга работы системы или программы. Его основная функция — обнаруживать и реагировать на нештатные ситуации или сбои системы, такие как сбои или зависания, а также принимать корректирующие меры для обеспечения продолжения работы или восстановления системы.
Сторожевой пес работает по таймеру который настроен на определенный интервал времени. Если система или программа не выполняет определенное действие или не включает сторожевой таймер (то есть не перезапускает его) в течение этого интервала времени, сторожевой таймер предполагает, что система находится в нежелательном состоянии или перестала реагировать правильно, и принимает значение по умолчанию. действие. Это действие может варьироваться в зависимости от реализации и может включать перезагрузку системы, создание журналов ошибок, подачу сигналов тревоги или выполнение определенных действий для устранения проблемы.
Сторожевой таймер используется на различных компьютерных системах и устройствах, от операционных систем и серверов до устройств. встроенные и критически важные системы реального времени, включая Arduino. Его основная цель — повысить надежность и доступность системы за счет автоматического обнаружения проблем и реагирования на них, тем самым уменьшая необходимость ручного вмешательства в сбойных ситуациях.
Что такое сторожевой таймер Arduino?

Сторожевой таймер Arduino необходимо настроить в соответствии с потребностями приложения. Он Сторожевой таймер использует внутренний источник тактовой частоты 128 кГц (может варьироваться в зависимости от используемой платы и микроконтроллера). При активации он начинает отсчет от нуля до заданного пользователем значения. Если сторожевой таймер не сбрасывается при достижении этого значения, он сбрасывает микроконтроллер.
Сторожевой таймер ATmega328P, который реализован в Arduino UNO, предлагает 10 различных настроек времени, каждая из которых определяет, когда таймер переполнится и, следовательно, вызовет сброс. Различные временные интервалы следующие: 16 мс, 32 мс, 64 мс, 0.125 секунды, 0.25 секунды, 0.5 секунды, 1 секунда, 2 секунды, 4 секунды и 8 секунд, как мы увидим позже в таблице, которую я привожу.
Если вам все еще не понятно, что можно сделать с помощью Watchdog Timer Arduino UNO, посмотрим Пример чтобы вы поняли это графически. В этом примере мы будем использовать простое мигание светодиода. Светодиоды мигают в течение заданного периода времени перед входом в цикл while(). Этот цикл while() используется как альтернатива системе блокировки. Поскольку сторожевой таймер не сбрасывается в цикле while(), это приведет к перезагрузке системы, и светодиоды снова начнут мигать, прежде чем система выйдет из строя и перезагрузится. Этот цикл будет продолжаться...
Соображения и особенности
Сторожевой таймер отключен в начале кода. Перед включением сторожевого таймера предусмотрена задержка в x секунд. Эта задержка имеет решающее значение, поскольку загрузчик Arduino может проверить, загружается ли новый код, и дать достаточно времени для записи кода во флэш-память. Этот аспект важен в качестве меры предосторожности. Может возникнуть ситуация, когда из-за ошибочного кодирования или неправильных соображений написанный код бесконечно сбрасывает микроконтроллер через очень короткие промежутки времени. Это может повредить плату Arduino и помешать правильной загрузке на нее кодов. Если это произойдет, вам необходимо записать загрузчик, используя другой Arduino в качестве интернет-провайдера на заблокированном Arduino...
Когда мы используем сторожевой таймер Arduino, необходимо использовать битовые регистры для определения поведения чипа. Соответствующие регистры и их значение подробно описаны в таблице данных микроконтроллера, которая присутствует на плате Arduino. Однако интегрированная среда разработки (IDE) Arduino включает в себя некоторые функции и макросы, предназначенные для упрощения этого процесса, которые можно импортировать, включив библиотеку. #включать использовать сторожевой таймер чипа AVR.
Таким образом, мы можем настроить сторожевой таймер активируя его с помощью функции wdt_enable(). Аргумент этой функции определяет время до сброса платы, если таймер не был сброшен. Что касается значений, которые вы можете настроить в коде, я привожу их сюда:
| Время до срабатывания сторожевого таймера | аргумент wtd_enable() |
| 15 мс | WDTO_15MS |
| 30 мс | WDTO_30MS |
| 60 мс | WDTO_60MS |
| 120 мс | WDTO_120MS |
| 250 мс | WDTO_250MS |
| 500 мс | WDTO_500MS |
| 1 с | ВДТО_1С |
| 2 с | ВДТО_2С |
| 4 с | ВДТО_4С |
| 8 с | ВДТО_8С |
Пример использования сторожевого таймера в Arduino

Наконец, мы посмотрим, как сторожевой таймер используется на практике, на примере Arduino IDE. Как мы видим, все довольно просто: вы можете найти в Интернете различные подобные исходные коды, чтобы вы могли практиковаться, модифицировать и создавать свои собственные коды для использования сторожевого таймера в своих проектах. Давайте посмотрим наш пример:
#include <avr/wdt.h> // Incluir la biblioteca watchdog (wdt.h)
void setup()
{
wdt_disable(); // Desactivar el watchdog mientras se configura, para que no se resetee
wdt_enable(WDTO_2S); // Configurar watchdog a dos segundos
}
void loop()
{
wdt_reset(); // Actualizar el watchdog para que no produzca un reinicio
//Aquí iría el código de tu programa...
}
Как видно на этом примере скетча для Arduino, есть три функции из известных языков программирования для управления сторожевым таймером, а именно:
- wdt_disable() чтобы отключить таймер при настройке Arduino.
- wdt_enable(время) чтобы назначить интервал таймеру и запустить его, указав соответствующее время, как показано в предыдущей таблице.
- wdt_reset() чтобы продлить назначенный интервал и чтобы программа не перезапускалась.