Универсальный сторожевой таймер на ATtiny13

3d-3Внешний сторожевой таймер это костыль для плохих разработчиков, которые не могут разработать нормально работающую программу для микроконтроллеров или стабильно работающую схему.

Тем более встроенный WDT имеется у большинства современных микроконтроллеров.

Но бывают случаи, когда приходится иметь дело с готовой платой или модулем с определенными проблемами. Свой первый WDT я сделал для борьбы с редкими, но все же иногда происходящими зависаниями ESP8266. Причем софтовый ресет тогда не спасал и ESP-шка не хотела переподключаться к WiFi. Передергивание питания внешним WDT решило проблему.

Вторая проблема возникла с GSM контроллером Elecrow ATMEGA 32u4 A9G. Здесь имели место быть очень редко случающиеся зависание SIM-карты. (Кстати эта же проблема бывает и с USB-модемами 3G и 4G). Для борьбы с таким зависанием нужно передернуть питание на SIM-ке. И вроде даже вывод у GSM модема для этого есть, но в схемотехнику устройства данная возможность не заложена. И для достижения максимальной надежность пришлось снова обращаться к внешней сторожевой собаке.

Схему на таймере 555 я не стал повторять. Слишком много недостатков у нее выявилось:

  • Большие габариты и довольно много обвязки
  • Неудобная  установка времени срабатывания подстроечным резистором
  • Довольно длительное время сброса (необходима разрядка конденсатора)
  • Ну и потенциальное зависание МК с низким уровнем на выходе таймера, когда таймер просто перестает срабатывать.

А проектов OpenSource в интернете, полностью соответствующих  моим требованиям, я не нашел. Значит судьба — делать все самому

Требования к новому WDT

  • Низкая цена устройства, простота изготовления  и малые габариты
  • Управление периодической сменой логического уровня 0/1 на входе
  • Простая настройка времени срабатывания (как вариант выбор из предустановленных интервалов)

Разработка железа

В качестве основной микросхемы выбрал микроконтроллер ATtiny13. Его возможностей оказалось более чем достаточно для моей задачи. А цена, с учетом уменьшения элементов обвязки — практически такая же как у 555 микросхемыСхема1

Пять выводов МК (RESET решил не трогать) распределились следующим образом:

  1. Выход таймера
  2. Вход для сброса
  3. Три оставшихся вывода — задания времени срабатывания

Для коммутации питания используется P-канальный MOSFET. Подойдет любой совместимый по корпусу, но желательно брать с так называемым «логическим уровнем управления» — то есть полностью открывающийся от низкого напряжения 3-5В:  IRLML5203, AO3415 и т.п. Несмотря на малые размеры, данный транзистор способен управлять нагрузкой в 4А. Если нужно коммутировать что-то другое, к этому выходу можно напрямую подключить реле на 5В.ветодиод загорается в момент срабатывания таймера и отключения основного устройства.

Основной разъем для подключения к плате микроконтроллера имеет четыре вывода

  1. Общая шина
  2. Вход — сброс таймера
  3. Выход  +5В (управляется таймером)
  4. Вход +5В

Два разъема — ICSP программатор и джамперы питания можно не устанавливать на плате. Микроконтроллер прошить в программаторе заранее, а время срабатывания задать постоянной перемычкой.

Список комплектующих

Изготовление

Платы получились маленькие — 18×22 мм. Я развел два варианта:

Для одностороннего изготовления ЛУТом

3d-1 3d-2

И для заказа на заводе с улучшенным дизайном и переходами меж сторонами. (Закажу у китайцев, при случае)

3d-3 3d-4

Домашние технологии дают примерно такой прототип.

100 101 102

Прошивка

200

Программировал я в среде ArduinoIDE с установленной поддержкой Attiny13 — MicroCore. В последней версии IDE были проблемы программатора ArduinoISP, но нормально заработало в версии Arduino IDE 1.6.13. Разбираться, что там накосячила наизменяла дружная команда arduino.cc желания не возникло )))

Arduino1

Тиньку настроил на работу от внутреннего резонатора с частотой 1.2МГц. Программа простая — настраиваем входы/выходы, считываем PB2 — PB4 и определяем время срабатывания, настраиваем таймер и переходим в режим IDLE. По прерыванию по таймеру определяем состояние контрольного входа. Если состояние изменилось на противоположное, сбрасываем счетчик. Если показания счетчика превысило установленное время срабатывания — передергиваем питание на выходе.

Весь код уместился в 340 байт — ровно треть от килобайта памяти тиньки. Работа таймера проверяется просто — в зависимости от времени установки — периодически загорается светодиод на 1 сек. В это время на выходе Vвых напряжение 5В пропадает. Если контакт «вход» с периодичностью 1 сек замыкать на землю — сброс не производится и светодиод не загорается.

Управление WDT в основной программе следующее

Вот собственно а все. Все исходные файлы, схемы и печатные платы можно скачать с GITHUBа

1000

Вы можете оставить отзыв или трекбек со своего сайта.

12 комментариев на «Универсальный сторожевой таймер на ATtiny13»

  1. ACE:

    На всякий случай, IRLML2502 — N-канальный. 6402, как вариант.

  2. Sinobi:

    Подскажите-ток потребления девайса какой?

  3. а почему сам тинка13 а лучше 13v … не защищен от зависаний ???
    то есть не защишен сам WDT !!!

  4. user003:

    Что за дичь!? ПИШИ В VSCODE+PLATFORMIO!!!

  5. NEMO:

    Alexey, на схеме и печатке ошибка!
    Резистор R3 на СБРОС должен быть Pull-Up (подтянут к + питания) а он у тебя — Pull-Down (притянут к GND). Контроллер будет в бесконечном СБРОСе…
    А так — схема очень полезная, спасибо!

  6. Михаил:

    Офигенная штука! Доработал все свои устройства. Работает как часы, автору большое спасибо!

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.