Ни для кого не секрет, что любая цифровая техника, рано или поздно, «зависает». Это всегда неожиданность для разработчика и это всегда неприятность для пользователя. Это всегда невовремя и это, увы, никак не прогнозируется. И неважно, самодельная ли это «мигалка на ёлку» на одной микросхеме-микроконтроллере или сложный сервер, работающий в нагруженной сети, — лучше бы этих зависаний не было. А бывают такие системы, зависание которых обходится очень и очень дорого.
Устройство, называемое «Watchdog» («Сторожевая собака»), призвано отслеживать факт зависания контролируемой им системы и, в случае обнаружения зависания, принудительно эту систему перезагружать.
Сначала я напишу коротенький абзац для «новичков», чтобы было понятно, о чём я вообще тут говорю. Потом будет абзац для более подготовленных, которые, дочитав дотуда, всё ещё не захотят закрыть вкладку с обзором :)
Сторожевой таймер, сам по себе — это маленькая и довольно простая схемка. До тех пор, пока ей на вход периодически приходят сигналы от контролируемого девайса («да-да», «всё нормально», «я тут», «я работаю») — собака ведёт себя спокойно и никак не вмешивается. Как только сигналы перестают приходить, собака ждёт положенное время (обычно несколько секунд) и, если сигналов так и не пришло, она считает, что устройство зависло и посылает ему сигнал Reset, перезагружая его. Очевидно, что некая условная система, оборудованная таким модулем, будет более устойчива, по сравнению с аналогичной системой без watchdog: от зависаний не застрахован никто, но первая будет сама выбираться из этих зависаний, вторая же будет ждать и простаивать до вмешательства человека.
Сторожевой собаке абсолютно всё равно, какой величины и значимости систему она контролирует. Это может быть и копеечная воьминогая микросхема-микроконтроллер, и «малинка»-«апельсинка», и роутер, и домашний стационарный компьютер, и большой навороченный сервер. Ей лишь бы приходили сигналы об активности системы, да чтоб система, соответственно, реагировала на её импульс «Reset».
Конец абзаца.
Почему внешний watchdog, если в любом современном микроконтроллере есть встроенный? По двум основным причинам. Во-первых, бывают такие зависания, которые изнутри единого кристалла отследить нельзя: прерывания по таймеру живут, watchdog исправно ресетится, а программа, допустим, крутится в бесконечном цикле. Или ждёт импульса на какой-нибудь ноге, который дойти никак не может из-за какой-то аварии. Да мало что… Внешний же аппаратный сторож никак не связан с процессами внутри: пока у него есть питание, он будет сторожить.
Во-вторых, ардуино… Нельзя не признать, что доля DIY-микроконтроллерных проектов, реализуемых публикой на arduino, занимает значительную нишу. И приверженцы ардуино, увы, прелестями встроенного в атмегу сторожевого таймера воспользоваться не могут. Проблема
описана. Вкратце: watchdog правильно работает только на некоторых Uno, остальные ардуины намертво «кладутся» при попытке использовать сторожевой таймер. Спасает только перешивка загрузчика внешним программатором. А новичков такая «хирургия», безусловно, пугает. Да и не у всех есть под рукой вторая ардуина, чтобы сделать из неё программатор для оживления первой, ушедшей в мёртвый цикл из-за использования встроенного watchdog. Все эти манипуляции новичка, вероятнее всего, попросту отпугнут.
Внешний же watchdog позволяет, используя arduino в своих проектах, в полной мере получать все прелести устойчивых систем, не заморачиваясь проблемами внутреннего сторожевого таймера.
Теперь, собственно, к самому обозреваемому модулю.
Размерами он сопоставим с Arduino Pro Mini:
С обратной стороны ничего интересного: только дорожки, соединяющие три переходных отверстия с пинами модуля. Да не очень качественно отмытый флюс:
Модуль построен на базе далласовского чипа DS1232.
Для тех, кто привык читать официальную литературу, вот
даташит.
Чип обеспечивает сразу три функции: мониторинг питания, сторожевой таймер и формирование правильного импульса Reset (нужных фронтов, амплитуды и длительности), даже при дребезге контактов ручной кнопки перезагрузки.
Коротко и сжато о назначении выводов чипа
На вывод ST должны приходить стробирующие импульсы от контролируемого устройства, говоряжие о его здоровом функционировании.
На выводах RST и /RST формируется перезагружающий импульс. Разница между выводами RST и /RST заключается исключительно в полярности перезагружающего импульса. Сигнал с вывода RST надо брать, если контролируемое устройство перезагружается логической единицей при нормальном нуле на линии сброса. Сигнал же /RST, наоборот, предназначен для устройств, перезагружаемых низким уровнем на линии сброса. Большинство современных микроконтроллеров (включая атмелловские, на базе которых построено и arduino) перезагружаются нулевыми импульсами, т.е. для них подходящим является сигнал /RST.
Вывод TOL выбирает приемлемость условий питающего напряжения.
— когда TOL прижат к земле, приемлемым считается пятипроцентный коридор отклонения напряжения. Т.е. сигнал перезагрузки придёт при снижении напряжения до 4,75V.
— когда TOL подключён к питающей линии, коридор питающего напряжения расширяется до 10%. Т.е. устройство будет перезагружено при снижении напряжения питания до 4,5V.
Выводом TD выбирается максимальное контрольное время, после которого сработает сторожевой таймер:
— когда TD прижат к земле, таймаут составляет 150ms (от экземпляра к экземпляру нормой будут значения 62,5ms — 250ms);
— когда TD висит в воздухе, таймаут составляет 600ms (от экземпляра к экземпляру 250ms — 1000ms);
— когда TD соединён с питанием, таймаут составляет 1200ms (от экземпляра к экземпляру 500ms — 2000ms). Выдержек свыше двух секунд данная микросхема не даст даже теоретически.
Продавец услужливо опубликовал схему модуля и его разводку:
Как видим из схемы, линии чипа ST, RST и /RST выведены, как одноимённые, и на пины модуля.
Производитель предоставил нам самое лояльное и комфортное включение чипа: максимально широкий коридор питающих напряжений (от 4,5 до 5V) и максимально возможный таймаут сторожевого таймера (1,2 секунды).
Теперь становится понятной схема подключения модуля к нашей условной ардуине:
— линии Vcc и Gnd на модуле подключаются к двум одноимённым линиям на arduino;
— линия /RST на модуле подключается к пину RST на ардуине
— линия ST подключается к любому свободному пину, желательно без аппаратного ШИМ, — допустим, у меня это пин 2.
Набросаем простенький скетч для проверки модуля. Я (исключительно для наглядности) при инициализации программно мигаю встроенным светодиодом. Этого можно было не делать, светодиод мигнёт и без нас. Но так — нагляднее и понятнее новичкам.
void setup() {
pinMode(13, OUTPUT); // Используем внутренний светодиод
pinMode(2, OUTPUT); // С этого пина Watchdog будет получать сигналы
digitalWrite(13, HIGH);
delay(50); // Коротко мигнём светодиодом при каждой перезагрузке
digitalWrite(13, LOW);
}
void loop() {
digitalWrite(2, HIGH);
delay(2); // Формируем короткий перепад
digitalWrite(2, LOW);
delay(1150); // Максимально длинный таймаут
}
При значении задержки 1150 миллисекунд (в моём конкретном случае) или меньших, наша ардуина спокойно крутится в рабочем цикле, ей ничто не мешает. Светодиод, мигнув вначале, не светится — перезагрузок нет. Как только мы увеличим эту задержку хотя бы до 1200 миллисекунд (или внесём значительную задержку в процедуру Setup), мы увидим, что светодиод начнёт циклически вспыхивать: время для собаки становится критическим и она перезагружает ардуину.
В реальных же условиях рабочего скетча, достаточно внести строчку
digitalWrite(2,HIGH); delay(1); digitalWrite(2,LOW);
в самый конец основного цикла, чтобы сторожевой модуль, подключённый к пину 2, чувствовал себя спокойно.
При инициализации ардуины все пины передёргиваются, поэтому собаке абсолютно всё равно, на каком логическом уровне зависло устройство: таймер был запущен и, значит, перезагружающий импульс неминуемо придёт.
Выводы.
1. Нужен ли сторожевой таймер в принципе? Если в проектируемом вами устройстве зависания могут привести к негативным последствиям, то да. С ним система будет, очевидно, более устойчивой, чем без него.
2. Является ли внешний сторожевой таймер панацеей? Конечно, нет. Он более эффективен, чем внутренний, имеющийся во многих микроконтроллерах, но и он не панацея. Для достижения максимальной эффективности его работы, важно его подключить в правильное место вашей системы. Лучше не подключать его к линиям, на которых сигналы формируются аппаратно (ШИМ, различные аппаратные порты со стробами), а также к сигналам внешнего или внутреннего тактового генератора. Ну и абсолютно бессмысленно подключать его к линиям, работающим на вход — так мы будем контролировать не свой микроконтроллер, а что-то другое.
3. Есть ли минусы у этого сторожа? Главным минусом внешнего сторожевого таймера, в общем случае, является потребность в выделении для его работы одного пина на вашем устройстве. Хотя на практике, этого очень часто удаётся избежать: если ваш микроконтроллер что-то постоянно пишет или рисует на дисплее, что-то постоянно посылает в порты, формирует какие-то управляющие импульсы для внешних устройств — подключайте сторожевую собаку к этим линиям, — ей абсолютно безразличны частота и скважность импульсов, ей лишь бы была постоянная движуха.
Главным минусом конкретно этой реализации таймера я назову, пожалуй, довольно короткий контрольный таймаут. Бывают случаи, когда хотелось бы иметь запас хотя бы в 3-5 секунд.
4. Надо ли покупать именно этот watchdog? Ну, каждый решит для себя. Сторожевую собаку, совершенно точно, можно получить дешевле $3. Кому-то проще купить один лишь только обозреваемый выше чип и с помощью ЛУТ сделать такой модуль самому. Кому-то проще взять легендарный
555 и сделать сторожевой таймер на рассыпухе: плюсы — дёшево и доступно, минусы — больше возни и времязадающие электролитические конденсаторы, а, значит, с годами гарантированно поплывут все параметры. Кому-то проще сделать одновибратор с таймером вообще на полупроводниках. Тут каждый решает сам.
Здесь же за вполне посильные деньги мы получаем полностью готовое и рабочее устройство с нормированными параметрами.
Так что резонность покупки каждый оценит самостоятельно.
Моей же задачей было рассказать о таких устройствах, о принципах их работы и, возможно, дать кому-то творческий импульс для самостоятельного построения новых интересных самоделок.
Никто ничего не предоставлял и не спонсировал, всё куплено на свои.
UPD: Пока писал обзор, продавец неожиданно поднял цену. Упс. Будем считать это временным приступом жадности. На этот товар у него периодически бывает скидка. Ну и ничто не мешает искать этот товар у какого-то другого продавца.
Сторожевые таймеры — очень простые устройства :)
Вероятность того, что одновременно зависнет и главное устройство и таймер-watchdog, вообще исчезающе мала.
В любом случае, речь идёт не о гарантиях, а о вероятностях. Устройство, оснащённое сторожевым таймером, с намного бóльшей вероятностью будет работать устойчиво. Не более :)
Если внутри этого куска был wd-ресет, то внутренняя собака будет молчать. Это один из сотни или тысячи возможных сценариев. Внутренние прерывания от таймера живут — внутренняя собака будет молчать.
Внешнему же таймеру абсолютно по барабану, что происходит внутри ядра: нет полезного сигнала — ресет.
А если вы в цикле внутренний таймер сбрасываете, так и внешний WDT так же будете сбрасывать )))
То что «программисты» все в loop() пихают, да еще и delay() разделяют, так это их проблемы.
Как люди живут без прерываний?..
Кстати интересно ценообразование таких модулей. DS1232 можно купить за 0.2$
Arduino Pro Mini с долларовым контроллером и кварцем стоит почти вдвое дешевле
запихнули =)
micropython.org
:)
И for, и switch и все остальное :)
А предохранитель имеет не несколько иную функцию. Он имеет несколько функций. И функция защиты устройства среди них тоже присутствует.
«У меня есть анти-анти-анти-анти определитель номера!»
Схема есть тут: www.freetronics.com.au/products/watchdog-timer-module
Либо у LTC есть специальная интегральная микруха TimerBlox LTC6995-1 — низкочастотный генератор с таймером до 5 секунд. Обвязка всего три резистора, но сама микруха дорогая, зараза…
шютка юмора
:) :) :)
1. Если вы используете устройство, которое переодически виснет, то:
— замените его на то, которое этим не страдает.
— разберитесь в причинах его зависания и устаните их (например внешние наводки и т.д.)
2. Если вы сами спроектировали устройство, которое может зависнуть, то:
— подумайте еще раз и перепишите управляющую программу к нему.
— если устройство вообще без прошивки и основано на какой-то дубовой логике, но все равно виснет, то найдите причину его зависания и устраните ее.
— не занимайтесь разработкой электроники вообще и поручите это более компетентным людям.
Приблизительно такие мысли приходят в голову сходу. А вот городить огород из таких вот костылей — это все равно, что протечки ремонтировать изолентой, а не заменой поврежденного узла.
И последнее — чем больше компонентов в устройстве, тем выше шанс его выхода из строя…
А если вы сумеете спроектировать такое вычислительное устройство, вы станете героем планетарного масштаба. Без шуток.
— Вчера на улице ко мне подошла старуха и предложила купить вечную иглу для примуса. Вы знаете, Адам, я не купил. Мне не нужна вечная игла, я не хочу жить вечно.
Только странно, что даже мировые софтверные гиганты не следуют этому совету, то и дело в их продукции находят баги и дыры :)
Вачдог — это не метод борьбы с зависанием, а метод минимизации возможного ущерба на тот случай если что-то пойдет не так и девайс зависнет.
Как только от мозга перестают поступать адекватные ответы — перезагрузка колотушкой по башке.
На сколько бы лучше мир бы стал!
Абсолютно две разные сущности.
И в доказательство — практически на всех платформах watchdog — это отдельная схема, никак не связанная с ядром.
Сделано это специально.
Автор коммента написал — «чем больше компонентов в устройстве, тем выше шанс его выхода из строя…» — хотел уточнить для него что это не всегда так.
Хотя идея так себе. При пропадании интернета роутер уйдет в вечную перезагрузку, врядли это ему понравится
Если от зависаний внутренней ОС роутера — то да, вполне защититесь.
который работает даже если процессор повис, иначе зачем он нужен.
СтОит 0 рублей, не требует дополнительного железа.
Статья называется
"«Сторожевая собака» для микропроцессорной техники"
У нормальных микропроцессоров имеется свой аппаратный ватчдог,
а другие использовать в ответственных приложениях не надо.
ЗЫ: посмотрел сейчас даташит на тиньки 24/44/84 (самый свежий из имеющихся у меня даташитов на AVR) — да, таки отдельный генератор на 128 кГц :)
Мне больше нравится сбрасывать сторожевик изменением уровня. Каждую секунду менять на противоположный.
Но позвольте с вами не согласится по поводу первой фразы.
Контроллер с хорошо вылизанной прошивкой и нормальной схемой не зависает.
Это вам не микропроцессоры с глючными операционками )))
А то что зависает, например кривая периферия, на 99% лечится встроенным таймером самого контроллера.
Эх, Алексей… Ваши бы слова… :)
Маловероятное принимается за невозможное
Поясняю
Есть вероятность зависания контроллера
Есть вероятность отказа сторожевого таймера.
Есть вероятность падения метеорита на голову или на контроллер
Когда я проектирую устройство, я рассчитываю надежность, то есть вероятность отказа за единицу времени.
И если вероятность отказа устройства (как единой системы всех компонентов) меньше требуемой — то я достиг требуемой надежности устройства.
Можно увеличивать надежность устройства снижая вероятность отказа основного контроллера (в том числе вылизыванием схемы им кода)
Можно ставить дублирующие узлы
Можно костыли вроде WDT
Все это приводит к увеличению надежности.
Кстати, если контроллер выйдет из строя, или будет входить в ошибочное состояние постоянно после загрузки, то никакой WDT не спасет
И повышением качества компонентов, сборки, контроля и испытаний.
Иногда экономят на развязках, конденсаторах, экранах и др. технических методах обеспечения ЭМС.
Тут актуальность сторожевой собаки сильно растет.
Там же по-сути только микросхема DS1232, которая стоит 15р в розницу без доставки.
А вообще можно на 2,5 рублевой NE555 сделать watchdog.
Прокрутите вверх. Вывод №4.
В любом случае там нет ссылок на альтернативы.
Он сбрасывается не сменой уровня, а каким то одним уровнем. Например, низким. И если зависание произойдет в этот момент, то вместе с таймером. Ну и время сброса для разрядки конденсатора тоже напрягает.
Программа может зависнуть в цикле дерганья ногой собаки, причем очень легко. При этом основной процесс может лежать. Так что — в программе ставят два watchdog — по времени и оконный. Смотрите не AVR, а ARM. ))
Программы, чаще всего, зависают при работе с аппаратурой. И исправлять свои ошибки должны сами модули обработки железа, а не какой-то внешний супервизор. И вообще, попытка свалить на watchdog сродни капитуляции — я программить не умею, сделайте это за меня. ))
Итак, два недостатка у subj:
1. девайсу требуется серьезная переработка программы микроконтроллера, чтобы дерганье ногой было в основном процессорном цикле, и с учетом всех нюансов исполнения модулей. После прочтения конца фразы становится ясно, что реализация обработчика нюансов исполнения (менеджер то бишь) практически устраняет нужду в watchdog. Неожиданно. ))))))))))))))))
Ну а без =серьезной= переделки программы, этот костыль будет только вредить.
2. девайс не спасает от слишком частых импульсов. Т.е. неправильная работа системы, понадеялись на watchdog и получили fail. Лучше уж без него. Халявы не будет — исправляйте код, без костылей.
Все сказанное IMHO, естественно.
Единственное применение subj — прилепывание его к устройствам, к которым нет доступа к правке firmware. Для остального — ручками, ручками, не ленитесь. ))
Первое моё серьёзное устройство на 90s2313 (не путать с Attiny2313) уже отпраздновало 15-летний юбилей и продолжает жить.
Я на кривость своего кода нигде по тексту не жаловался.
Смысл обзора — рассказать о существовании такого.
А уж кто и к чему его применит — дело каждого. Верно?
На самом деле есть куча мест, куда нельзя залезть программно/аппаратно. Когда железо/софт чужой и без исходников, а может быть и даташитов. А менять не целесообразно. Вот тогда и идут в ход костыли.
Помню народный DIR-340 у которого периодически подвисали USB 3G модемы. Причем простой перезагрузкой это не лечилось ни в какой прошивке. Только передергивание шины питания USB. Так я и собрал свой первый сторожевой таймер )))
А вообще тема интересная. Прочитал с удовольствием.
Потом мы эту железку в других приложениях использовали, а потом вообще пошли микроконтроллеры с аппаратным ватчдогом.
Если пинг не проходил, компьютер открывал CD-ROM, а тот при открытии нажимал на ресет сервера )))
Админы, они такие ленивые
А сервера у нас, почему-то никогда так не зависали (на NT4 были), поэтому до CD-ROMа, мы жаде и не дошли.
Видимо муськоэффект — дофига народа в корзину это в корзину положили. Вот продавец и думает — нужно рвать!
До сегодняшнего утра точно было так, как я указал в заколовке обзора — $3,08. Я точно проверял.
Он поднял цену уже потом.
Ядро ARM имеет аппаратную поддержку собаки. Чипы от st — имеют максимальное количество аппаратной поддержки на одном кристалле. Если к старому атмелу подключить все актуальные для современных мк внутри_кристальные технологии — то получится самая настоящая рождественская ёлка метровой высоты. Как побочный эффект — разбогатеет продавец шилдов.
Юзайте современное, хватит использовать костыли для старичков.
«ффу, бампер от Жигулей? Он же подходит только к Жигулям. Юзайте современные Бентли, они намного лучше».
Давайте, сделайте нам Кортексы М такими же доступными, как ардуины. Сделайте, чтобы готовая плата под STM32 стоила столько же, сколько ProMini, т.е. 2 бакса. Напишите море либ, подо всё, — от старого утюга до последнего космического корабля. Включительно. Напишите тучу туториалов, экзамплов, форумов и ресурсов. Сделайте всё это доступным и бесплатным. И мы все с радостью пересядем со старой Атмеги на что-то современное.
И стоят они дешевле старых (если не про watchdog — пример attiny 13 и attiny13a).
Но коешн, лучше на старом все делать, чем учиться новому, ага? — ибо роднее. :D
Но вот мозги с ними нужно поднапрячь посильнее, чем с ардуиной, это да. Придется думать, а не просто складывать кубики.
Имеет настолько жёсткую привязку к архитектуре атмела — что просто неспособно работать на чём-то ещё кроме самого атмела. Ещё в самом начале пути была допущена одна громадная ошибка — слияние программной и аппаратной части кода в единое целое. Естественно — так код получается быстрее и проще, но работать он будет только на атмел.
Подобная ошибка повторилась с чипами st. Потом её безуспешно пытались исправить халом, а теперь уже и LL. Но проблема в другом — в старой школе программирования.
Есть простейший пример — рисование графики на экране жк.
Практически все существующие GL имеют жёсткую привязку к типу жк индикатора, как и к самому чипу мк. У них есть перечень устройств поддержки, который завсегда висит на главной странице проекта. Шаг в сторону — и весь проект бесполезен.
А между прочим есть простое решение — железо отдельно — код отдельно.
Код содержит стандартные функции, с жёстко закреплёнными аргументами и их типом. Совершенно никого не волнует, как железо будет выполнять полученные команды — важно наличие стандарта интерфейса.
Аппаратный уровень — наличие стандартных программных функций позволяет реализовать максимально быстрое выполнение простейших операций с внешним интерфейсом мк. Это может быть ногодрыг, может быть прямая запись в целый порт, может быть использование FMC, или даже DMA2D.
Суть в том что простейшую операцию для конкретного железа можно написать за десять минут.
Перелопачивать всю графическую библиотеку можно несколько дней.
То, что вы написали — палка о двух концах. Прямая работа с железом — это скорость и надёжность. А лишние прокладочные сущности облегчают работу, но ухудшают другие параметры.
И в конце концов «стандартные интерфейсы» всёравно устаревают.
Нет уж, так тоже плохо.
Вам просто трудно провести черту, разделяющую программный и аппаратный уровень.
Но я попробую.
Например есть функция которая рисует круг на дисплее, если она имеет прямое обращение к регистрам жк дисплея — то это стиль аурдино.
Однако если та-же функция будет обращаться к дисплею как к линейной памяти — то функция получится настолько гибкой, что способна работать абсолютно на любых мк и с абсолютно любыми дисплеями. Для стыковки с реальным железом необходима инлайн функция написанная для конкретного мк и дисплея. Инлайн функция уникальная, для конкретного проекта. Повторно применить на другом проекте — скорей всего уже не получится, да это и не требуется. В любом случае написание новой — дело 10 минут.
Кстати, алгоритмы с больших машин могут использоваться на мк, нужно просто уметь их готовить.
А вот для конкретной железки производитель её не написал. Забил. Забыл. А код — закрытый. Ваши идеи?
Вот хотите жизни?
У меня есть железяка. Плата с PCI разъёмом. Ей много лет. Она до сих пор рабочая и заменить её нельзя. Под неё есть драйверы на win3.1, win95, win98 и winNT. Больше производитель на неё забил.
Под Виндой 2000 она у меня работала с дровами под NT.
Под XP народ плясал с бубнами, нашлись энтузиасты, прикрутили какие-то неофициальные драйвера с извратами и костылями. Плата работает и по сегодняшний день.
Под чем-то новее, чем XP, она уже гарантированно не заработает. Никаких энтузиастов уже не найти. Никаких дров уже физически не найти. Она работает. Она исправна. Смена ОС по любой из причин — и всё, в помойку безальтернативно.
Ну, мистер ДиванныйТеоретик, что мне прикажете делать? Советы типа «поменяй железку на современную», «вложи денег и поменяй всё», «забей», «что за железка такая» и прочего не предлагать. Ответьте мне на конкретный вопрос. Есть железо, есть аппаратный интерфейс (PCI), есть ОС, есть софт. Нету программной прослойки низкого уровня, чтобы железку заставить работать. И я не уникален. Огромное количество железа выбрасывается исключительно из-за устаревания того, о чём вы тут красиво размышляете, а не из-за физического износа и поломок.
Так что ваша идея — тоже далеко не идеал. Не надо так форсить её.
В чем проблема?
Я вот для WS2812 совсем недавно взял и написал, т.к. с тем, что «предлагает производитель» у МК ни прерываниями нельзя пользоваться ни вообще дышать, когда данные отправляются.
Слава Богу протоколы сейчас простые, а МК — умные.
Даже если проприетарщина — отреверсить сейчас с machine learning стало гораздо проще. Пример — работа с дисплеем на Kindle. Вообще нет ни какой документации. Сложный wave-режим, 7! источников напряжения. Ниче, собрался народ на хакадее, отреверсил и сделал.
А, конечно, сидеть и пространно рассуждать — тогда да, ничего нельзя поделать, ага.
Вот потом такие умельцы и выкладывают сови «раскривушки» и юзают аппартаный ватчдог, потому как ISP программатора у них нет, че это — они не знают и разбираться не хотят.
Пример про девайс Вы конечно привели ни к селу ни к городу, но отвечу.
Если уж сильно надо — можно в виртуалку, на которой система стоит, под которую есть дрова, прокинуть эту карту и завести ее там. А дальше запросы проксировать через эту виртуальную машину. Так и делают, когда вот никак нельзя заменить.
Нет, молодой человек, это не мигалка на WS2812, с которой вы так геройски справились.
Это сложное технологическое оборудование со специально под него сделанным контроллером на PCI и специфическим софтом. И даже, не поверите, на ютубе про это нет уроков, совсем-совсем.
И уж конечно, нашли пути, всё работает и эксплуатируется. То, что я об этом тут написал для примера, ещё не значит, что в реальности все стоят вокруг этой железки, плачут, и не знают, что делать.
То, что я написал — лишь иллюстративный пример. Коих — море.
Мне, дедушка, уж 8 лет как за 30, за плечами куча программерской и железячной работы. В том числе — и в команде.
Откуда, собственно я и знаю про все эти костыли.
По этому Ваш старческий снисходительный тон как раз у меня вызывает улыбку.
Под любую железку — если она РЕАЛЬНО нужна можно написать или эмуляцию, или то, что выше обозначил.
В одном цеху стояла печь для литья, хитрая, старая. У нее было 8 различных датчиков температуры, 3 датчика аварийного состояния и система управления местами нагрева. Все это по RS485 (Вы, как дедушка, должны знать этот интерфейс) подавалась на хитрую платку, воткнутую в PCI. Дрова безнадежно устарели, а вот печь со своей работой справлялась, но надо было как-то воткнуть все это на новую машину и систему. У нас ушло 3 дня на реверс, потом еще пару дней на проработку концепции эмуляции и месяц на реализацию драйвера, который эмулировал платку на компе, чтобы родной софт не почуял разницы и контроллер с USB с обвязкой вместо PCI платки.
Так что если надо — все решается.
А если сидеть на заднице ровно — то да, можно бесконечно болтать да возраст по комментариям определять :D
Забыл написать, что WS2812 была тоже для примера.
Надеюсь, литейная печь подходит под ваши «Это сложное технологическое оборудование» :D
Клево! Вот потом и рождается поколение, которое вместо того, чтобы разобраться с причиной подвисания и устранить, ставит ватчдог на перезагрузку — отличный вариант :)
Если делать что-то серьезное — программатор все равно рано или поздно покупается — с ним перепрошить загрузчик — раз плюнуть.
Watchdog у ATMEGA — абсолютно самостоятельное и отдельное устройство, просто находящееся на той-же подложке, что и кристалл.
И это вообще у большинства современных процессоров.
По-этому нужность отдельного аппаратного ватчдога в современной цифровой технике практически нулевая.
Единственное, где он сейчас может применяться — это у криволапых программистов-железячников, не желающих искать проблемное место и повсюду использующих костыли или же в очень сложной и модульной децентрализованной системе, где нет выделенного ядра — тогда да, этот watchdog будет просто одним из модулей.
Думаю, я не очень ошибусь, если скажу, что несколько сот тысяч людей на планете не имеют даже UART-TTL конвертера, а чтобы вливать свои скетчи в Уны, Наны и Мега-ардуины, обходятся только USB-шнурками.
Они все недочеловеки и недостойны embeddeв области?
Я, если не заметили, никому ничего не предлагаю. Я лишь потратил своё время, чтобы написать обзор и рассказать о таком устройстве, как сторожевой таймер. А уж решать, нужен он кому-то или нет, и вообще целесообразность приобретения я оставил на усмотрение читателей. Чем же я вызвал ваш праведный саркастический тон?
Не решайте за людей, что и как им надо делать. Рассказать и поделиться знаниями — да. А вот оценивать, какое рождается поколение и что оно должно делать — этого лучше не надо.
Мало того — USB ASP программер стоит на Ali 1.25$, что почти в два раза дешевле вашей платки + человек разберется хоть чуть-чуть в предметной области.
А за обзор я Вам плюсик поставил — как раз за время и старание.
А вот это — как раз и есть зло :)
Возможно, Вы, как человек в предмете разбирающийся и применит эту плату и по назначению, но большинство — нет.
Я не решаю, но если я потенциально вижу проблемы — я честно об этом предупреждаю.
У Вас-же тон статьи примерно такой «используйте это» ИМХО, конечно.
Хинт — правильная защита — аппаратная.
Я рассказал о существовании таких устройств, я рассказал, как они работают. На простом коде из пяти строк я показал, что обозреваемое устройство действительно работает и работает правильно.
Где я показывал какую-либо конструкцию? Где я говорил, что я это куда-то впаивал? Где я говорил, что вообще планирую на базе предмета обзора что-либо делать?
Я лишь потратил время на написание и вылизывание обзора. Чем же я, по-вашему, виноват?
вам бы пример замутить как его к pc прикрутить, чтоб следить не завис ли комп — получили бы тысячу плюсов. а так приделали к avr то что у него из коробки есть. не правиль но это учить молодеж как делать не надо.
я вам минус не ставил.
Даже прохождение испытаний по ЭМС не дает гарантий что изделия будут работать как надо. :)
2. WDT может быть занят для пробуждения из спящего режима.
shop.open-dev.ru/product/usb-watchdog-pro2
Есть ли такие-же только на 3.3V для ESP чипов?
В МК ждунпёс уже есть, для компа особого смысла не вижу, надо искать и устранять проблему зависаний, а не костыли допаивать.
Так и не придумал, куда ЭТО можно использовать, лучше за эти деньги реально полезный какой модулёк купить.
Поясню вопрос. Модуль формирует сигнал перезагрузки, в том числе, и при падении напряжения ниже 4,5v. Посмотрите осциллографом, возможно, на старте у вас есть провалы по питанию.
Потому что загрузчик Уны а) не работает дольше секунды, б) модуль не начинает следить, пока не придёт первый импульс, а если загрузчик не отработал(сколько бы долго это не продолжалось), то и импульсы не начались.
К пину D2 и подключайте…