Watchdog. Не дадим контроллеру зависнуть.
Приветствую, уважаемые!
Научите пользоваться этим механизмом. Крайне простая задача: при зависании МК - перезагрузить оный.
Рытие просторов глобальной сети привело к каше в голове.
Регистр WDTCR вроде понятен, но общая схема применения не очень.
Если можно в двух вариантах: при вшитом WDTON и не вшитом.
Заранее спасибо!
Re: Watchdog. Не дадим контроллеру зависнуть.
WDT это не зависимый от основного генератора таймер.
У него есть делитель частоты, с этой выбранной частотой происходит сброс контроллера. И ключевой момент, Основная программа контроллера должна всегда успевать сбрасывать WDT что бы он не успел ресетнуть контроллер.Для чего это нужно? Для того если вдруг контроллер повиснет , то WDT его реанимирует
Вот вроде и все
Re: Watchdog. Не дадим контроллеру зависнуть.
Меня программная реализация интересует.
Так правильно?
PHP код:
void setup() {
cli();// wdr
WDTCR=(1<<WDCE) | (1<<WDE);
WDTCR=(1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
sei();
...
}
void loop()
{
__asm__ __volatile__ ("wdr");
...
}
sei();
Re: Watchdog. Не дадим контроллеру зависнуть.
Честно говоря на AVR никогда не пробывал WDT, сейчас посмотрю
Re: Watchdog. Не дадим контроллеру зависнуть.
Внедрил этот код в мегу8. Сижу туплю, как ее заставить зависнуть, но так, чтобы это было понятно.
Re: Watchdog. Не дадим контроллеру зависнуть.
Сделай бесконечный цикл, в цикле включи светодиод D13
Re: Watchdog. Не дадим контроллеру зависнуть.
да очень просто - при резете шлешь в uart символ, дальше можешь зажечь светодиод и загнать МК в бесконечный цикл. И слушаешь терминалку. Можно при старте мигнуть светодиодом и дальше бесконечный цикл...
Re: Watchdog. Не дадим контроллеру зависнуть.
Вот пример скетча
ардуино через 8сек. должен сбросится , или попасть в ступор
Скорее всего второе так как основная масса Arduino прошиты старой версией bootloader
PHP код:
#include <avr/wdt.h>
int n = 0;
void setup()
{
Serial.begin(115200);
wdt_enable (WDTO_8S);
}
void loop()
{
Serial.println(n, DEC);
++n;
delay(1000);
//wdt_reset();
}
Re: Watchdog. Не дадим контроллеру зависнуть.
Re: Watchdog. Не дадим контроллеру зависнуть.
Попробовал. Работает. Спасибо!
Кстати, тот код, что запостил я, тоже работает :)