Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с WatchDog ATMEGA2560
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Vladimir_J
Доброе время суток smile.gif
Столкнулся с проблемой работы WatchDog-a. При старте всей программы пытаюсь отключить WatchDog, как написано в доке:

Код
void WDT_off(void)
{
__disable_interrupt();
__watchdog_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out
*/
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCSR = 0x00;
__enable_interrupt();
}


Но к огромному сожалению, камень все равно рестартует sad.gif
В чем трабл ....
mempfis_
Цитата
Но к огромному сожалению, камень все равно рестартует sad.gif

А фуз WDTON проверяли? Если он установлен то wdt всегда работает.
Vladimir_J
Доброго дня smile.gif
Что то случилось с темой sad.gif
Убрал я WDTOn, но все равно идет перегруз процессора.

И есще вопрос, как моно настроить watchDog, на ресет камня, только когда нуна smile.gif
ILYAUL
Цитата(Vladimir_J @ Nov 26 2009, 00:04) *
Доброго дня smile.gif
Что то случилось с темой sad.gif
Убрал я WDTOn, но все равно идет перегруз процессора.

И есще вопрос, как моно настроить watchDog, на ресет камня, только когда нуна smile.gif

Попробуйте сюда, кстати там ответили
http://electronix.ru/forum/index.php?showtopic=70019&hl=
Ronin
А точно через WDT рестарт происходит ?
А если вообще WD не трогать то рестартует ? fuse WDTON=1(off) должен быть.

Цитата(Vladimir_J @ Nov 26 2009, 00:04) *
И есще вопрос, как моно настроить watchDog, на ресет камня, только когда нуна smile.gif


Выставляете биты WDP3 WDP2 WDP1 WDP0 по таблице 12-2, и где надо ставите wdrы.
kiv121
Я так Мегу 1281 так и не заставил перегружаться
из проги через WDT. M128 работает без вопросов.
Позвонил друзьям в питер, сказали что есть такая партия.
Сергей Борщ
Цитата(Vladimir_J @ Nov 25 2009, 22:41) *
Но к огромному сожалению, камень все равно рестартует sad.gif

Код
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCSR = 0x00;
между этими двумя командами должно пройти не более 4 тактов. Как правило операция |= компилится в нечто большее, чем пара команд. Замените эту конструкцию на
Код
WDTCSR = (1<<WDCE) | (1<<WDE)|(тут ваши установки прескаллера);
/* Turn off WDT */
WDTCSR = 0x00;
kiv121
А что может быть, если прескаллер WDT
настроен на 8 сек, стартую внутри программы,
засекаю, через 8 сек проиходит сброс и (или)
зависание программы. Запуск только через
выключение питания?
SysRq
Цитата(Vladimir_J @ Nov 25 2009, 23:41) *
При старте всей программы...
Когда именно? В main()? Проверьте, что успеваете. Быть может надо еще раньше выключать.
kiv121
Программа работает: графика, измерения, обмен и тп.
Восстанавливаю "заводские" настройки в eeprom и
хочу перезапустить прибор.
Вот так перезапустится?

__disable_interrupt();
__watchdog_reset();
WDTCSR = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP0) | (1<<WDP3);
__enable_interrupt();
while(1) {}
SysRq
kiv121, вам уже отвечали (один и тот же вопрос вы задаёте третий раз): http://electronix.ru/forum/index.php?showtopic=69501
kiv121
Все что было сказано сейчас и раньше
перепробывал. Поставил опять 128.
Все заработало. Всем спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.