Обсуждаем контроллеры компании Atmel.
Ответить

watchdog atmega328

Пт апр 21, 2017 08:13:43

Здравствуйте ! подскажите
Не получается ресетить контроллер при помощи собаки через 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

Как бэ, если в цикле или в прерываниях (если они есть) вачдог сбрасывается, то почему бы и не крутить?

Re: watchdog atmega328

Пт апр 21, 2017 09:08:22

pyzhman писал(а):Как бэ, если в цикле или в прерываниях (если они есть) вачдог сбрасывается, то почему бы и не крутить?

А я его нарочно вот этим asm("wdr"); - не сбрасываю - хочу посмотреть как он работает.
В цикле asm("wdr"); - нету...........
Я запускаю "собаку" потом цикл While без asm("wdr");
Он у меня всего один раз перезагружается(контролер) - а должен постоянно.......

Re: watchdog atmega328

Пт апр 21, 2017 09:51:58

Делал всё по даташиту

А я в даташите прочёл следующее:
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

я пользуюсь avr-gcc, а там есть "стандартная" функция wdt_enable() - пользуюсь и горя не знаю :)))

Re: watchdog atmega328

Сб апр 22, 2017 07:41:10

Вероятно, дело не в настройке собаки (один-то раз сработала) а в остальном коде.
Ответить