Это ни что иное, как таймер, который позволит задать до 100 различных временных интервалов в течение суток, когда какая-либо нагрузка должна быть включена. Схема на рисунке 1 показывает лишь главное: три основных элемента, составляющих основу - микроконтроллер U1 типа Atmega8, интегральные часы U2 типа DS1307 и жидкокристаллический индикатор LCD1 любого типа, лишь бы он поддерживал 2 строки и не менее 16 символов в строке. Остальные элементы схемы, хотя и нужны, но не заслуживают отдельного рассказа, кроме пары слов: R1...R3 - любые резисторы сопротивлением 5,1К; RV1 - так же любой подстроечный (уточните номинал по документации на индикатор); кнопки - любые тактовые.
На схеме показана линия OUT, которая никуда не идет. Но на самом деле она должна идти к исполнительному элементу: транзисторному ключу, нагруженному на реле; оптореле; сирене; тиристору и т.п., - в общем, к любому исполнительному элементу с током потребления не более 40 мА. Я надеюсь, что прикошачить одну из многих сотен готовых схем, которые могли бы быть исполнительными для этой схемы - не проблема для любого самодельщика. Так же и той же причине на схеме не показан источник питания. Надеюсь, подобные упрощения мне будут прощены...
Несколько слов о DS1307. Эта микросхема требует особой аккуратности при разводке кварцевого резонатора X1 (т.н. часовой кварц). Рекомендации в общем просты: надо стремиться подключить его как можно более короткими проводниками к выводам микросхемы, и по мере возможности все свободное пространство под ней и вокруг нее залить площадкой меди, соединенной с общим проводом схемы. Батарейка BAT1 - любая литиевая 3В, она обеспечит верный ход часов при отключении питания прочей схемы. Т.е. если питание случайно пропадет, а потом снова появится, корректность работы таймера не будет нарушена. Если по каким-либо причинам батарейку решено не использовать, то 3-й вывод микросхемы часов надо соединить с общим проводом, иначе часы не "запустятся".
Конечно, главное в данной конструкции - программа микроконтроллера. Она разработана так, чтобы не нужно было программировать знаменитые фьюзы, т.е. верно работает с теми значениями, которые "прошиты" в микроконтроллере при изготовлении. Если используется не новый МК, то придется задать ему работу от встроенного генератора 1 МГц, т.е. запрограммировать CKSEL=0001. Все прочие фьюзы некритичны.
Управление всеми функциями осуществляется при помощи 4-х кнопок, условно обозначенных символами:
[*] [#] [>] и [<]
Первая строка дисплея предназначена для вывода основной информации, а вторая - для вывода подсказки. Подсказка - это краткое название функции, рядом с которым выводится символ соответствующей кнопки:
На рисунке показан вид изображения в обычном режиме работы таймера. Как видите, подсказка намекает, что нажав [*], мы попадем в меню. Если мы это сделаем, то увидим следующее:
Это пункт меню программирования таймера. Теперь подсказка уже более занятная: при помощи кнопок [>] и [<] (влево-вправо) мы можем перемещаться по системе меню, кнопка [*] теперь приведет к "входу" в выбранный пункт меню, а [#] играет роль Esc - выхода из меню. В меню всего 3 пункта, следующие 2 рисунка показывают оставшиеся пункты:
CLOCK - это пункт управления часами, а RESET - это пункт сброса всех настроек таймера.
В общем, система меню напоминает ту, что была в древних мобильных телефонах, когда их дисплеи были еще не графическими...
"Вход" в один из пунктов меню приведет к включению одного из трех режимов соответственно. Рассмотрим их поочередно.
1. TIMER - программирование таймера.
Это наиболее важный режим. Он позволяет управлять промежутками времени, когда нагрузка (исполнительный механизм) должна быть включена. В этом режиме мы будем видеть следующее изображение на дисплее (черный прямоугольник - на самом деле мигающий курсор):
В первой строке после символов "Т-" указан номер интервала таймера, а затем два времени - включения и отключения нагрузки. Номер интервала может быть от 0 до 99 (т.е. 100 интервалов всего), а моменты включения и отключения задаются с шагом в 1 минуту. Ввод недопустимых значений (например, 32 часа или 60 минут) блокируется.
Назначение кнопок в этом режиме другое: влево-вправо позволяют передвинуть курсор к следующей позиции, [*] изменяет на 1 значение числа в позиции, где находится курсор, а [#] - осуществляет запоминание всех сделанных изменений и возврат к основному режиму.
Программирование осуществляется очень просто: ставим курсор в позицию номера интервала и кнопкой [*] задаем нужный интервал (учтите, десятки и единицы всех чисел изменяются отдельно!). Затем сдвигаем курсор к времени включения и аналогично задаем его (снова десятки и единицы часов и минут редактируются независимо). Затем повторяем эти же действия для времени отключения. Если нужно, то можно выбрать другой интервал и задать его моменты времени и т.д. - хоть все 100 интервалов. Когда все задано, нажимаем # - происходит запись программы таймера в EEPROM, после чего включается основной режим.Запись в EEPROM длится заметное время, о чем вы будете уведомлены соответствующей надписью на дисплее.
Вернитесь к рисунку 2 - видите небольшой кружочек во второй строке справа? Это символ состояния нагрузки. Пустой кружочек означает, что в текущее время нагрузка не должна быть включена (т.е. ни один из 100 интервалов не включает текущее время). Если наступит один из моментов, когда нагрузка должна включаться, кружочек приобретет вид жирной точки, т.е. будет закрашенным. Таким образом, глядя на дисплей, мы можем знать, включена ли нагрузка или нет (она же не обязательно должна находиться рядом).
2. CLOCK - установка времени.
Это режим коррекции времени. Изображение на дисплее будет следующим:
Ввод времени осуществляется аналогично ранее рассмотренному режиму TIMER. Значение секунд не отображается, но в момент нажатия [#] счетчик секунд обнуляется - это следует учитывать при коррекции времени.
3. RESET - сброс программы таймера.
В этом режиме вы можете стереть сразу все запрограммированные ранее моменты включения нагрузки. Это нужно, если возможности просмотреть все 100 событий нет возможности, а изменить программу таймера необходимо. Т.е. быстрее стереть все и ввести пару новых, чем проконтролировать, что все 100 событий пусты. После включения этого режима на дисплее появится требование подтвердить свое намерение:
Соответственно, нажатие [*] приведет к очистке всей программы, а [#] просто выключит режим стирания.
Теперь несколько слов о том, как происходит вообще работа таймера.
Программа каждую секунду перебирает все запрограммированные события и проверяет, попадает ли текущее время в один из этих интервалов. Если попадает - нагрузка включается. Если же не попадает ни в один - нагрузка отключается. Интервал должен быть правильным - время включения хотя бы на 1 минуту должно быть меньше времени отключения. Если это не так, то интервал не анализируется. Т.е. задав момент включения 20 часов при моменте выключения в 19 часов, вы "отключите" данный интервал (это может помочь при редактировании программы таймера).
Да, если войти в любой пункт меню и не нажимать ни одну кнопку в течение 20 секунд, произойдет возврат в основной режим без выполнения любой начатой, но не законченной нормально функции.
Изначально таймер задумывался для управления насосом подкачки воды для многоквартирного дома, но в процессе было решено расширить его функции разными способами, один из которых (наиболее простой) предложен вам.
P.S. Все рисунки взяты из протеуса, в нем же производилась и отладка проекта. До финальной стадии был доведен более сложный проект (5-канальный таймер с термометром), но "пайку" производил совершенно другой человек, поэтому у меня нет "документального" подтверждения...
Файлы:
Файлы проекта Proteus.
Прошивка МК.