Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: HELP! Watchdog Timer
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Петров
Не могу победить эту "штуку" smile.gif

микроконтроллер Mega 168 Использую энергосберегающий режим (Sleep mode - Power down)
Из того, что прочел понял что нужно инициализировать Watchdog. Делаю это так:

void watchdog_init(void)
{
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
WDTCSR = (1<<WDIE)
}


по переполнению таймера watchdogА возникает прерывание
#pragma interrupt_handler wdt_isr:7
void wdt_isr(void)
{
}

вот тут то я и перестаю, что либо пониматьsmile.gif
ОБРАБАТЫВАЕТСЯ ПРЕРЫВАНИЕ, А УЖЕ ПОСЛЕ НЕГО РЕСЕТИТСЯ КОНТРОЛЛЕР???
Достаточно выполнить WDR(); для того, чтоб отменить ресет?
и еще:

вот эта строка бат файла
avreal32 +mega168 -p1 -ab -e -w -v Sparta.hex -fCKSEL=2, WDTON=0
генерит ошибку: File "WDTON=0" not found ЧТО НЕ ТАК???
ReAl
Цитата(Петров @ May 23 2008, 22:48) *
void watchdog_init(void)
{
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
WDTCSR = (1<<WDIE)
}
по переполнению таймера watchdogА возникает прерывание
#pragma interrupt_handler wdt_isr:7
void wdt_isr(void)
{
}

вот тут то я и перестаю, что либо пониматьsmile.gif
ОБРАБАТЫВАЕТСЯ ПРЕРЫВАНИЕ, А УЖЕ ПОСЛЕ НЕГО РЕСЕТИТСЯ КОНТРОЛЛЕР???
Достаточно выполнить WDR(); для того, чтоб отменить ресет?
Читать, читать, читать внимательно описание.
При прошитом WDTON никаких прерываний не будет, WDT прибит гвоздями на reset mode
Если WDTON стёрт:
если хочется иметь только прерывания, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR  = (1<<WDIE) | (1<<WDP2) | (1<<WDP0);


если хочется иметь только сброс, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR  = (1<<WDE) | (1<<WDP2) | (1<<WDP0);


если хочется иметь прерывание, а в случае чего и сброс, то
Код
WDR();
WDTCSR | = (1<<WDCE) | (1<<WDE);
WDTCSR  = (1<<WDE) | (1<<WDIE) | (1<<WDP2) | (1<<WDP0);

Причём делать это после каждого прерывания, так как при входе в прерывание при взведённом WDE очищается WDIE и если программа вновь не взвела WDIE, то при следующем переполнении WDT будет сброс.

WDR сбрасывает счётчик, откладывая таким образом любые операции, что сброс, что прерывание.

Цитата(Петров @ May 23 2008, 22:48) *
вот эта строка бат файла
avreal32 +mega168 -p1 -ab -e -w -v Sparta.hex -fCKSEL=2, WDTON=0
генерит ошибку: File "WDTON=0" not found ЧТО НЕ ТАК???

Пробела между "-fCKSEL=2," и "WDTON=0" не должно быть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.