реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблемы с WatchDog ATMEGA2560
Vladimir_J
сообщение Nov 25 2009, 20:41
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 9-01-07
Из: Украина
Пользователь №: 24 228



Доброе время суток 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
В чем трабл ....
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 25 2009, 20:42
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



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

А фуз WDTON проверяли? Если он установлен то wdt всегда работает.
Go to the top of the page
 
+Quote Post
Vladimir_J
сообщение Nov 25 2009, 21:04
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 74
Регистрация: 9-01-07
Из: Украина
Пользователь №: 24 228



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

И есще вопрос, как моно настроить watchDog, на ресет камня, только когда нуна smile.gif
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 25 2009, 21:08
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



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

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

Попробуйте сюда, кстати там ответили
http://electronix.ru/forum/index.php?showtopic=70019&hl=


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Ronin
сообщение Nov 26 2009, 09:51
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 72
Регистрация: 10-02-05
Из: Краснодар
Пользователь №: 2 558



А точно через WDT рестарт происходит ?
А если вообще WD не трогать то рестартует ? fuse WDTON=1(off) должен быть.

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


Выставляете биты WDP3 WDP2 WDP1 WDP0 по таблице 12-2, и где надо ставите wdrы.

Сообщение отредактировал Ronin - Nov 26 2009, 09:55
Go to the top of the page
 
+Quote Post
kiv121
сообщение Nov 26 2009, 13:05
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586



Я так Мегу 1281 так и не заставил перегружаться
из проги через WDT. M128 работает без вопросов.
Позвонил друзьям в питер, сказали что есть такая партия.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 26 2009, 13:51
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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;


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
kiv121
сообщение Nov 26 2009, 14:11
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586



А что может быть, если прескаллер WDT
настроен на 8 сек, стартую внутри программы,
засекаю, через 8 сек проиходит сброс и (или)
зависание программы. Запуск только через
выключение питания?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 26 2009, 15:41
Сообщение #9


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(Vladimir_J @ Nov 25 2009, 23:41) *
При старте всей программы...
Когда именно? В main()? Проверьте, что успеваете. Быть может надо еще раньше выключать.
Go to the top of the page
 
+Quote Post
kiv121
сообщение Nov 26 2009, 16:03
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586



Программа работает: графика, измерения, обмен и тп.
Восстанавливаю "заводские" настройки в eeprom и
хочу перезапустить прибор.
Вот так перезапустится?

__disable_interrupt();
__watchdog_reset();
WDTCSR = (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP0) | (1<<WDP3);
__enable_interrupt();
while(1) {}
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 26 2009, 16:07
Сообщение #11


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



kiv121, вам уже отвечали (один и тот же вопрос вы задаёте третий раз): http://electronix.ru/forum/index.php?showtopic=69501
Go to the top of the page
 
+Quote Post
kiv121
сообщение Nov 26 2009, 16:24
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 12-11-09
Пользователь №: 53 586



Все что было сказано сейчас и раньше
перепробывал. Поставил опять 128.
Все заработало. Всем спасибо.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 05:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016