Что такое сторожевой таймер?
Компоненты и расходные материалы
| × | 1 |
Приложения и онлайн-сервисы
|
Об этом проекте
Какая ситуация, пока ваш микроконтроллер запутал в бесконечном цикле😖. Есть ли случай, например, зависание или застревание микроконтроллера при выполнении задачи😖. Каков обычный метод устранения неполадок? Кнопка сброса, правая ? Можно ли все время нажимать на кнопку? 😕. Итак, что насчет устройства для выполнения этой задачи? звучит отлично. Круто ...! 🙂.
Да ! Теперь поговорим о таком устройстве, которое уже находится внутри на микроконтроллере. Это сторожевой таймер .
Сторожевой таймер.
" Сторожевой таймер ( WDT ) - это аппаратный таймер, который автоматически производит сброс системы, если основная программа не заботится о ее периодическом обслуживании. Он часто используется для автоматического сброса встроенного устройства, которое зависает из-за программного или аппаратного сбоя. "(os.mbed.com/cookbook/WatchDog-Timer).
Покормите собаку!
Если у вас дома есть собака. Вам необходимо регулярно кормить эту собаку. если однажды ты не сможешь накормить, он тебя укусит! Как этот сторожевой таймер работает.
У нас есть основная часть программы, которая повторяется снова и снова ( цикл ). Мы включаем сторожевой таймер, который загружается с начальным значением, превышающим общую задержку в основной программе. Каждый раз основная программа сбрасывает этот таймер. Если в любом случае основная программа не возвращается, чтобы сбросить таймер до того, как он обратится к нулю, генерируется прерывание для сброса процессора. Точно так же сторожевой таймер защищает микроконтроллер от подвешивания.
Итак, давайте попробуем сторожевой таймер в Arduino ;)
В Arduino UNO используется ATMEGA328P микроконтроллер.
Библиотека сторожевого таймера
#include
Библиотека необходима для использования сторожевого таймера в Arduino
Включить сторожевой таймер:
wdt_enable (таймер сброса WDT);
Чтобы включить сторожевой таймер, WDT RESET TIMER варьируется от 15 мс до 8 с
Например: wdt_enable (WDT0_8S);
- Включен сторожевой таймер на 8 секунд
Сброс сторожевого таймера
wdt_reset ();
Эта функция используется для сброса сторожевого таймера. Функция сброса используется внутри loop () . Если ваша программа использует большую задержку delay () которая превышает пороговую задержку сторожевого таймера, добавьте функцию сброса перед этой задержкой. В противном случае он сбросит микроконтроллер перед выполнением этой задачи.
Отключение сторожевого таймера
wdt_disable ();
Пример кода:
#include
void setup () {
Serial.begin (9600);
Serial.println ("Установка началась:");
// делаем задержку перед включением WDT
// эта задержка помогает завершить все начальные задачи
delay (2000);
wdt_enable (WDTO_4S);
}
void loop () {
Serial.println ("ЦИКЛ запущен!");
for (int i =0; i <=5; i ++) {
Serial.print ( "Loop:");
Serial.print (i);
Serial.println ();
delay (1000);
wdt_reset ();
}
// бесконечный цикл для зависания MCU
while (1) {}
}
Вывод
Свои отзывы, вопросы, обсуждения снимайте в комментариях.
Код
- Полный код
Полный код Arduino
#includevoid setup () {Serial.begin (9600); Serial.println ("Установка началась:"); // делаем задержку перед включением WDT // эта задержка помогает завершить все начальные задачи delay (2000); wdt_enable (WDTO_4S);} void loop () {Serial.println («Цикл запущен!»); для (int я =0; я <=5; я ++) {Serial.print ("Цикл:"); Serial.print (i); Serial.println (); задержка (1000); wdt_reset (); } // бесконечный цикл для зависания MCU while (1) {}}
Производственный процесс