Сторожевой таймер
Сторожевой таймер (Watchdog timer или WDT) давно стал одним из привычных и полезных устройств, входящих в состав схемы микроконтроллеров. Выполняя функцию сброса, в случае зависания программы, он позволяет защитить оборудование от неприятных последствий. К сожалению, не каждое готовое устройство имеет в своем составе подобный элемент. В некоторых случаях это становится большой проблемой.
Необходимость в разработке данного устройства возникла после покупки промышленных модулей связи одной известной фирмы, которые с завидным постоянством зависали в процессе работы. Срочность заказа не позволяла разбираться с поставщиком и выполнить замену, зато оказалось вполне приемлемым перезапускать железо при отсутствии реакции с его стороны. Конечно, такой подход не самый лучший, но иногда заказчик просто не может ждать.
В основе сторожевого таймера лежит неплохой микроконтроллер PIC12F629. Его питание осуществляется от готового модуля TracoPower. Такое решение не требует распайки большого числа элементов и отличается завидной компактностью и простотой монтажа. Сброс внешнего устройства реализован через реле типа RE03, управляемое микроконтроллером. Сигнал от внешнего устройства заведен на вход процессора и подразумевает применение внешнего "сухого" контакта. В принципе, схема не представляет из себя чего-то особенного и легко может быть повторена.
Программное обеспечение написано на microPascal. В процессе работы, микроконтроллер большую часть времени находится в состоянии сна. Выйти из него он может по срабатыванию внутреннего сторожевого таймера, либо при поступлении сигнала на вход. Так как внутренний сторожевой таймер имеет относительно малое время работы, количество его срабатываний отражается в переменной-счетчике. Как только ее значение достигнет необходимой величины, произойдет отключение реле на непродолжительное время. Что бы этого не произошло, до окончания счета должен поступить сигнал на вход, который обнулит счетчик. Для контроля работоспособности таймера применен светодиод, который переключается по событию от внутреннего WDT.