Страница 1 из 1
watchdog atmega328
Добавлено: Пт апр 21, 2017 08:13:43
рокки1945
Здравствуйте ! подскажите
Не получается ресетить контроллер при помощи собаки через 2 секунды, вернее - 1 раз ресетит а потом цикл while крутит.
Делал всё по даташиту
WDTCSR = (1<<WDCE) |(1<<WDE);
WDTCSR = (1<<WDE) | (1<<WDP2) |(1<<WDP1) |(1<<WDP0);
Спасибо
Re: watchdog atmega328
Добавлено: Пт апр 21, 2017 08:59:47
pyzhman
Как бэ, если в цикле или в прерываниях (если они есть) вачдог сбрасывается, то почему бы и не крутить?
Re: watchdog atmega328
Добавлено: Пт апр 21, 2017 09:08:22
рокки1945
pyzhman писал(а):Как бэ, если в цикле или в прерываниях (если они есть) вачдог сбрасывается, то почему бы и не крутить?
А я его нарочно вот этим asm("wdr"); - не сбрасываю - хочу посмотреть как он работает.
В цикле asm("wdr"); - нету...........
Я запускаю "собаку" потом цикл While без asm("wdr");
Он у меня всего один раз перезагружается(контролер) - а должен постоянно.......
Re: watchdog atmega328
Добавлено: Пт апр 21, 2017 09:51:58
pyzhman
Делал всё по даташиту
А я в даташите прочёл следующее:
C Code Example
Код: Выделить всё
void WDT_Prescaler_Change(void)
{
__disable_interrupt();
__watchdog_reset();
/* Start timed sequence */
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Set new prescaler(time-out) value = 64K cycles (~0.5 s) */
WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
__enable_interrupt();
}
Note: The Watchdog Timer should be reset before any change of the WDTCSR.WDP
bits, since a change in the WDTCSR.WDP bits can result in a time-out when switching to
a shorter time-out period.
Re: watchdog atmega328
Добавлено: Пт апр 21, 2017 10:03:42
ARV
я пользуюсь
avr-gcc, а там есть "стандартная" функция wdt_enable() - пользуюсь и горя не знаю

Re: watchdog atmega328
Добавлено: Сб апр 22, 2017 07:41:10
COKPOWEHEU
Вероятно, дело не в настройке собаки (один-то раз сработала) а в остальном коде.