Watchdog или как подружить ардуино со сторожевым псом
- Войдите на сайт для отправки комментариев
Здравствуйте друзья.
Сделал я ответственный проект и появилось у меня необходимость использовать защиту от зависания. В процессе отладки программы и настройки ИМ я единожды заметил зависание МК. Дабы этого не повторилось установил на свою Pro mini Watchdog. К сожалению в этом процессе имеются подводные камни, о которых я сейчас расскажу.
За основу я взял материал из этого сайта: https://geektimes.ru/post/255800/ . Но там не совсем точно и понятно описан процесс лечения ардуино. И делается это следующим образом:
1. Открываем среду ардуино и далее Файл - Настройки и в строчку Boards Manadger копируем ссылку https://github.com/Optiboot/optiboot/releases/download/v6.2/package_optiboot_optiboot-additional_index.json
2. Далее Инструменты - Платы - Менеджер плат, листаем в низ и там находим:
Устанавливаем данное преложение.
3. После чего в меню Платы появляются дополнительные пункты и названия их начинаются со слов Optiboot.
4. Далее подключаем пациента для прошивки загрузчика через ISP порт. Этот процесс детально рассмотрен, повторять не буду.
5. Прошиваем загрузчик, предварительно выбрав соответствующий контроллер:
6. После замены загрузчика, МК полность готов для работы с WatchdogОМ) Единственно, при прошивке обычным способом нужно указывать ту плату, чей загрузчик вы в неё прошивали, т.е. в моем случае это уже не "Pro mini" а "Optiboot on 32-pin cpus " в остальном все аналогично.
Надеюсь был полезен! Удачи! :)
Emeljanowich, молодец! Но можно было просто залить загрузчик от Уно :)
в про-мини такого нету как в уно?
в про-мини такого нету как в уно?
Зальете и будет.)))) Смотрите, на что в IDE откликается.
нет, в смысле в пршивке про-мини - вочдога нет?
Watchdog есть, но он работает не корректно. Прочитайте статью по ссылке в первом посте.
Здравствуйте.
Делаю всё вышеуказанным способом.
Программатор (uno) прошила Arduino ISP
К программатору подключаю свою плату nano
.
Загрузка успешно авершена
Заливаю скетч
Ардуина зависает. Что я не так сделала?
Ардуина зависает. Что я не так сделала?
кто ж знает, что вы не так сделали? - по описанию все должно работать.
Хотя я вон на ватчдог неделю потратил только что :)
А "зависает" - это как выглядит? Вообще должно не зависать, а сваливаться в бесконечный ресет
5. Прошиваем загрузчик, предварительно выбрав соответствующий контроллер:
Я на этом этапе выбираю Ардуино Нано, верно?
5. Прошиваем загрузчик, предварительно выбрав соответствующий контроллер:
Я на этом этапе выбираю Ардуино Нано, верно?
неверно, нужно выбирать Уно. В загрузчике Нано нет поддержки ватчдога
Сорри, был невнимателен и не увидел на картинке, что вы Нано выбираете. Выбирайте Уно и все получится.
Благодарю. Работает.
Теперь при прошивке Nano нужно выбирать плату Uno
Еще вопрос, wdt_reset(); лучше вызывать в LOOPe постоянно или сделать так
я бы без всяких условий вызывал. Если ЛУП длинный, иногда даже по несколько раз вызывают в разных местах.
wdt_reset() - это одна единственная запись в регистр ватчдога, контроллер он не перегрузит.
Я не поняла вторую Вашу строчку, текст "контроллер он не перегрузит."
wdt_reset() сбрасывает сторожевой таймер, чтобы не произошла перезагрузка, так?
Перво наперво найди и убей автора вот этого
if
(!(millis()%5000)){
и переделай правильно.
Еще вопрос, wdt_reset(); лучше вызывать в LOOPe постоянно или сделать так
Это транслируется в 1 инструкцию процессора. вызывать можно какугодно
Перво наперво найди и убей автора вот этого
if
(!(millis()%5000)){
и переделай правильно.
А почему только жэтого?
А как же?
А почему только жэтого?
А как же?
И этого тоже :)
Фразу "контроллер он не перегрузит" надо понимать как "он не слишком сильно загрузит контроллер" , а не отсутствие ресета :)
Виновата...прочитала не ПЕРЕзагрузит
Буду вызыввать в loop-e)))
if
(!(millis()%1000)){
if
(!(millis()%5000)){
Так?)))
можно и так.
Irinka. мы ж вам оба с Дедом говорим, что можно вызывать wdt_reset() без всяких миллис. Из строк 21-24 оставьте только 22
Irinka. мы ж вам оба с Дедом говорим, что можно вызывать wdt_reset() без всяких миллис. Из строк 21-24 оставьте только 22
А я и напсиала:
Буду вызыввать в loop-e)))
Это я к тому, что вы сказали убрать
if
(!(millis()%1000)){ и
if
(!(millis()%5000)){
вот и спросила, будет правильно как выше код написала
wdt_disable();
нужна ли эта строка?
wdt_disable();
нужна ли эта строка?
по документации, прежде чем менять параметр ватчдога, нужно выполнить
wdt_disable();
Спасибо
Здравствуйте, подскажите как использовать watchdog? Я собираю свою плату на базе atmega328p и прошиваю ее под Arduino pro mini с 3.3 вольт с помощью программатора.
Здравствуйте, подскажите как использовать watchdog? Я собираю свою плату на базе atmega328p и прошиваю ее под Arduino pro mini с 3.3 вольт с помощью программатора.
и с 2016 года ни разу не потребовался WDT ? завидую....
в setup прописываете wdt_enable(WDTO_4S); - это 4 секунды
в loop прописываете wdt_reset();
в loop прописываете wdt_reset();
Жестко Вы так. Где нибудь while запихнет и будет за бобиком гоняться.)))
в loop прописываете wdt_reset();
Жестко Вы так. Где нибудь while запихнет и будет за бобиком гоняться.)))
ну это будет не мои проблемы, ТС спросил как использовать, я и написал, а то что мозг надо включать - это по умолчанию требование.
Опять же не знаю как другие, а я сначала полностью код до рабочего состояния довожу, а только потом добавляю WDT на всякий случай.
To electro216, если будете на 8мГц перешивать, здесь загрузчик, да и вообще ту тему почитайте.
Здравствуйте, подскажите как использовать watchdog? Я собираю свою плату на базе atmega328p и прошиваю ее под Arduino pro mini с 3.3 вольт с помощью программатора.
и с 2016 года ни разу не потребовался WDT ? завидую....
в setup прописываете wdt_enable(WDTO_4S); - это 4 секунды
в loop прописываете wdt_reset();
Спасибо за ответ. В общем без bootloader`a не нужно будет морочить голову, а прописать код как вы написали? Мне с ним еще не приходилось работать. Меня смутило, что в bootloader`e функция стоит wdt_disable(), а потом в setup активируем wdt_enable(WDTO_4S).
Никогда bootloader не смотрел, так что не скажу.
А вообще логично, перед любым изменением WDT его необходимо disable
В 29 сообщении тема - к прочтению обязательно, иначе может не заработать
Вот именно у меня не используется загрузчик, у меня такая конфигурация atmega328p + кварц 8Мгц птание 3.3 вольт. Прошиваю программатором из Arduino IDE (программатор из другой arduino :) ).
И что это меняет? Я аналогично шью через usbasp и это не отменяет прочтения литературы чтоб WDT работал
Здравствуйте товарищи.
Загрузила в Нано код проверки WDT
Теперь нано ниначто не реагирует, не могу зилить ни один скетч.
Горит POW и моргает L
Вопрос решен, помогла заливка загрузчика.
Еще вопрос, можно прошивать не через разъем SPI&
Не так:
А так:
Возможно, только 10 пин unо к контакту reset nano
Вопрос решен, помогла заливка загрузчика.
Еще вопрос, можно прошивать не через разъем SPI&
А на потом, купить переходник на СH340 (рублей 50-80), выводить наружу RX, TX, RESET и шить в свое удовольствие прямо в девайсе.
Можно ссылку на переходник?)
Можно ссылку на переходник?)
https://ru.aliexpress.com/store/product/CH340G-5V-USB-to-TTL-UART-Serial...
Первый попавшийся. Если нет выхода RESET, проводок и конденсатор 0,1мкФ от линии DTR (вроде не ошибся).
У рободиновского точно есть ресет - сам пользуюсь таким.
Ааа, такой купила. Спасибо.
А какой загрузчик зашили, а то тут у меня аж два оказалось
Всё как в инструкции в начале темы
Получила две платы ардуино нано.
На одну плату невозможно было залить скетч, помогла заливка загрузчика.
А вторую плату компьютер не видит, ком порт не определяется. (загрузчик залила через ардуино уно, всё нормально залилось).
Можно ли залить скетч через переходник BTE13-009B
Либо иным спосбом)
USB-TTL переходник поможет, если в чипе есть загрузчик. Соединяете RX-TX-GND-RESET и, может быть VCC да и льёте штатным способом через ^U Arduino IDE.
Если загрузчика нет - пишете его через ICSP и вторую ардуину (скетч Arduino ISP), а затем действуете как в первом абзаце.
Т.е. загружаю в UNO скетч ArduinoISP
А дальше как?
http://wiki.amperka.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%...