Обсуждаем контроллеры компании Atmel.
Ср сен 11, 2013 14:37:56
Так а с чего вы взяли, что сторож не работает? Может, он работает — просто вы не замечаете?
Сложно разобраться в проге по 3-м кускам кода.
Ср сен 11, 2013 14:43:27
Ну с того что когда ресетит МК, то видно как LED моргает. Есть же строчка
LED = 1; delay_ms(25); LED = 0; // когда контроллер спит, строж. таймер работает как надо, тому подтверждение работа этого светодиода (кратковременное моргание раз в 4 секунды)
А в основном цикле просто горит LED постоянно, что указывает на то, что МК не ресетится.
В осн. цикле стоит задержка несколько секунд перед включением светодиода (в первом посте не указал)
Ср сен 11, 2013 14:49:06
С чего взяли, что не ресетится? Между LED= 0 в настройках и LED= 1 в теле проходит доля секунды. Вот и кажется, что не моргает.
Ср сен 11, 2013 14:50:27
Я уже написал об этом.
while (1)
{
delay_ms(8000);
LED = 1;
}
Просто изначально в первом посте забыл вписать.
Ср сен 11, 2013 14:51:01
стало интересно-почему так,погуглил-почитал,после повер-доун проц долго просыпается,по идее пваш проц должен проснуться от сторожевого таймера но этого не происходит,значит както отключается,как?
нашел похожую проблему
http://530.ru/wwwboards/mcontrol/2233/messages/673767.shtml
Ср сен 11, 2013 14:51:39
Кажется, я начал доезжать на своём бронепоезде.
Без внешнего прерывания МК засыпает, и через 4 секунды его ресетит сторож?
После ресета светодиод вспыхивает на 25 мс и гаснет.
Без внешнего прерывания так продолжается бесконечно долго. Правильно?
НО!
Если во время сна дёрнуть прерыванием, то после его обработки МК зависает в основном цикле с зажжёным светодидом, и МК не ресетится?
Ассемблерный файл смотрели? Может, компилятор где-то что-то отключил? Фьюз сторожа выставлен?
Ср сен 11, 2013 14:53:15
Да, все правильно )))
Фьюз WDTON выставлен.
Ср сен 11, 2013 15:01:24
VNN84 писал(а):Фьюз WDTON выставлен.
В смысле, запрограммирован? Т.е. работает по нижней строчке таблицы?
Ср сен 11, 2013 15:02:04
Да, верно.
Но и без него тоже пробовал - та же хрень.
Ср сен 11, 2013 15:07:05
Я уже с этой проблемой неделю бьюсь, уже перепробовал все ))). Вот и решил узнать в форуме, может я в упор не вижу ошибку.
Для чего это все: без сторожа МК бывает виснет из-за внешних помех и не реагирует вообще, а такого допускать совсем нельзя, ибо схема (аварийное питание) пойдет на монтаж и потом проблемно будет ее от туда доставать.
Ср сен 11, 2013 15:13:29
Посмотрите ассемблерный файл.
Не ресетит ли сторож delay_ms или ещё кто.
Ср сен 11, 2013 15:14:50
СПС. Попробую.
Но ассемблер уже хорошенько подзабыл )))
Последний раз редактировалось
VNN84 Ср сен 11, 2013 15:16:37, всего редактировалось 1 раз.
Ср сен 11, 2013 15:16:26
Ищите "WDR".
Ср сен 11, 2013 15:49:44
Уже было.
В CodeVisionAVR функции delay_ms ресетят WD однозначно (содержат команду WDR в цикле).
Переходите на WinAVR

или делайте задержку иным образом.
Ср сен 11, 2013 15:50:29
Во как...
А от куда информация?
Завтра попробую сделать другую задержку ))). Попробую, наверное, таймером 16-битным.
Ср сен 11, 2013 16:03:37
Блин, убрал в основном цикле delay_ms и все заработало!
СПС друзья! Буду думать как переделать задержки.
Ср сен 11, 2013 17:13:10
Компилятор в delay_ms() ставит команду wdr. Посмотрите ассемблерный код, убедитесь сами. Может это поможет в понимании того, что происходит.
Чт сен 12, 2013 08:49:00
pyzhman писал(а):Компилятор в delay_ms() ставит команду wdr
Хотя я искал, но нигде не нашёл упоминания об этом. Может, я слепой?
А похожая проблема вроде уже всплывала у кого-то, потому я и предложил.
Чт сен 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
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.