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

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:37:56

Так а с чего вы взяли, что сторож не работает? Может, он работает — просто вы не замечаете?
Сложно разобраться в проге по 3-м кускам кода.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:43:27

Ну с того что когда ресетит МК, то видно как LED моргает. Есть же строчка

LED = 1; delay_ms(25); LED = 0; // когда контроллер спит, строж. таймер работает как надо, тому подтверждение работа этого светодиода (кратковременное моргание раз в 4 секунды)

А в основном цикле просто горит LED постоянно, что указывает на то, что МК не ресетится.
В осн. цикле стоит задержка несколько секунд перед включением светодиода (в первом посте не указал)

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:46:09

Полный код такой:

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:49:06

С чего взяли, что не ресетится? Между LED= 0 в настройках и LED= 1 в теле проходит доля секунды. Вот и кажется, что не моргает.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:50:27

Я уже написал об этом.

while (1)
{
delay_ms(8000);
LED = 1;
}

Просто изначально в первом посте забыл вписать.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:51:01

стало интересно-почему так,погуглил-почитал,после повер-доун проц долго просыпается,по идее пваш проц должен проснуться от сторожевого таймера но этого не происходит,значит както отключается,как?
нашел похожую проблему http://530.ru/wwwboards/mcontrol/2233/messages/673767.shtml

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:51:39

Кажется, я начал доезжать на своём бронепоезде.
Без внешнего прерывания МК засыпает, и через 4 секунды его ресетит сторож?
После ресета светодиод вспыхивает на 25 мс и гаснет.
Без внешнего прерывания так продолжается бесконечно долго. Правильно?
НО!
Если во время сна дёрнуть прерыванием, то после его обработки МК зависает в основном цикле с зажжёным светодидом, и МК не ресетится?
Ассемблерный файл смотрели? Может, компилятор где-то что-то отключил? Фьюз сторожа выставлен?

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 14:53:15

Да, все правильно )))
Фьюз WDTON выставлен.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:01:24

VNN84 писал(а):Фьюз WDTON выставлен.

В смысле, запрограммирован? Т.е. работает по нижней строчке таблицы?
Изображение

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:02:04

Да, верно.

Но и без него тоже пробовал - та же хрень.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:07:05

Я уже с этой проблемой неделю бьюсь, уже перепробовал все ))). Вот и решил узнать в форуме, может я в упор не вижу ошибку.

Для чего это все: без сторожа МК бывает виснет из-за внешних помех и не реагирует вообще, а такого допускать совсем нельзя, ибо схема (аварийное питание) пойдет на монтаж и потом проблемно будет ее от туда доставать.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:13:29

Посмотрите ассемблерный файл.
Не ресетит ли сторож delay_ms или ещё кто.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:14:50

СПС. Попробую.
Но ассемблер уже хорошенько подзабыл )))

Последний раз редактировалось VNN84 Ср сен 11, 2013 15:16:37, всего редактировалось 1 раз.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:16:26

Ищите "WDR".

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:49:44

Уже было.
В CodeVisionAVR функции delay_ms ресетят WD однозначно (содержат команду WDR в цикле).
Переходите на WinAVR ;) или делайте задержку иным образом.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 15:50:29

Во как...
А от куда информация?

Завтра попробую сделать другую задержку ))). Попробую, наверное, таймером 16-битным.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 16:03:37

Блин, убрал в основном цикле delay_ms и все заработало!
СПС друзья! Буду думать как переделать задержки.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Ср сен 11, 2013 17:13:10

Компилятор в delay_ms() ставит команду wdr. Посмотрите ассемблерный код, убедитесь сами. Может это поможет в понимании того, что происходит.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Чт сен 12, 2013 08:49:00

pyzhman писал(а):Компилятор в delay_ms() ставит команду wdr

Хотя я искал, но нигде не нашёл упоминания об этом. Может, я слепой? :dont_know:
А похожая проблема вроде уже всплывала у кого-то, потому я и предложил.

Re: Проблемы со сторожевым таймером. Что я делаю неправильно

Чт сен 12, 2013 15:48:42

С текущего проекта содрал:
Код:
                 _delay_ms:
000340 91e9         ld   r30,y+
000341 91f9         ld   r31,y+
000342 9630         adiw r30,0
000343 f039         breq __delay_ms1
                 __delay_ms0:
                +
000344 ea80     +LDI R24 , LOW ( 0xFA0 )
000345 e09f     +LDI R25 , HIGH ( 0xFA0 )
                +__DELAY_USW_LOOP :
000346 9701     +SBIW R24 , 1
000347 f7f1     +BRNE __DELAY_USW_LOOP
                    __DELAY_USW 0xFA0
000348 95a8         wdr
000349 9731         sbiw r30,1
00034a f7c9         brne __delay_ms0
                 __delay_ms1:
00034b 9508         ret
Ответить