Здравствуйте! Учусь программировать микроконтроллеры AVR.Хочу узнать у практиков можно ли в своей программе запрограммировать Reset или это делается только аппаратно? Я если да,то подскажите как? Спасибо заранее!

Комментарии: 21

  1. 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.

            • Andrey

              Выполнить недопустимую инструкцию ? Через транзистор подключить делитель на затвор нога и ресет по пору или низкому напряжению

              • Byte

                …, зависнуть и перезагрузиться вочдогом? Интересный план, но слишком долгий. Проще уж сразу вочдогом. Ну и с недопустимыми инструкциями/операциями сложно. Делить на ноль не получится, а остальное себя будет непрогнозируемо вести :)

                • Andrey

                  Ну вообщем согласен Можно внешне самому же ресет свой же дернуть

                  • Byte

                    Уже обсуждалось.

                    • Andrey

                      Чем плохо ?

                      • Byte

                        https://t.me/ru_electronics/176291

                        • Andrey

                          Железный хард ресет Да там можно поставить микрофет 2х2 в цепь задержки старта кондер и резистор Но это дело каждого, я бы в критической ситуации со временем и необходимостью дёрнул бы свой ресет На самом деле если ресет идёт при определённом пройденном времени какждый раз , rc и Мосфетом опять же , и есть аппаратные вотчдогикоторые дергают ресет

                          • Byte

                            WDT выполняет абсолютно те же действия, что и при дёргании NRST. Тоже уже обсуждалось . А если глянуть на блоксхему МК — станет понятно, как он это делает ;)

                            • Andrey

                              Задержку можно сократить я вот к чему если делать это хардварно когда нужно

  2. Sanchez

    Запустить функцию по адресу 0, активировать собаку (wdt) и подождать.

Не нашли ответ?

Вам также может быть интересно