Здравствуйте! Учусь программировать микроконтроллеры AVR.Хочу узнать у практиков можно ли в своей программе запрограммировать Reset или это делается только аппаратно? Я если да,то подскажите как? Спасибо заранее!
Здравствуйте! Учусь программировать микроконтроллеры AVR.Хочу узнать у практиков можно ли в своей программе запрограммировать Reset или это делается только аппаратно? Я если да,то подскажите как? Спасибо заранее!
Комментарии: 21
Indr1x
не до конца понятно что вы спрашиваете. что значит запрограмировать reset? сбросить контроллер? использовать ногу reset как gpio?
Filatov
В процессе выполнения моей программы мне нужно сбрасывать контроллер для перезапуска его работы.В даташите я кроме сторожевого таймера,сброса по пониженному питанию и сброса по получению питания я ничего больше не нашел.И все это не то.Поэтому решил спросить у опытных может всё-таки есть решения
Byte
Можно через WDT резетнуть: void ResetFunc() { cli(); wdt_enable(WDTO_15MS); Включили вочдог с 15ms интервалом while(1); //…и застряли в цикле. } Можно просто дёрнуть ResetHandler. Примерно так: void(* ResetFunc) (void) = 0; // Объявили. ... ResetFunc(); // — вызвали, ушли в reset. Лучше через WDT. Прыжок на 0 адрес не посбрасывает таймеры и т.д., могут быть, гхм, внезапности.
Nikolay
Через WDT есть нюанс - быстро сбросить не получится. Нужно будет выждать время WDT. Проще тогда уж сделать функцию которая отключит всю критическую периферию (таймеры и т.д.) и уже прыгнет на 0.
Byte
Ну 15мс погоды не сделают, думаю. Зато не будет болеть голова: «А всё ли я отключил».
Humka
А чего это таймеры не инициализируются как надо что-ли?
Byte
Регистры не обнулятся, данные в обработчиках прерываний не изменятся… а сброс через WDT полностью аналогичен дёрганию NRST.
Indr1x
дернуть ногу reset через транзистор
Nikolay
Вопрос был программно.
Indr1x
не вижу. https://t.me/ru_electronics/176279
Byte
https://t.me/ru_electronics/176194
Andrey
Выполнить недопустимую инструкцию ? Через транзистор подключить делитель на затвор нога и ресет по пору или низкому напряжению
Byte
…, зависнуть и перезагрузиться вочдогом? Интересный план, но слишком долгий. Проще уж сразу вочдогом. Ну и с недопустимыми инструкциями/операциями сложно. Делить на ноль не получится, а остальное себя будет непрогнозируемо вести :)
Andrey
Ну вообщем согласен Можно внешне самому же ресет свой же дернуть
Byte
Уже обсуждалось.
Andrey
Чем плохо ?
Byte
https://t.me/ru_electronics/176291
Andrey
Железный хард ресет Да там можно поставить микрофет 2х2 в цепь задержки старта кондер и резистор Но это дело каждого, я бы в критической ситуации со временем и необходимостью дёрнул бы свой ресет На самом деле если ресет идёт при определённом пройденном времени какждый раз , rc и Мосфетом опять же , и есть аппаратные вотчдогикоторые дергают ресет
Byte
WDT выполняет абсолютно те же действия, что и при дёргании NRST. Тоже уже обсуждалось . А если глянуть на блоксхему МК — станет понятно, как он это делает ;)
Andrey
Задержку можно сократить я вот к чему если делать это хардварно когда нужно
Sanchez
Запустить функцию по адресу 0, активировать собаку (wdt) и подождать.