Первичные часы 2 - микроконтроллер наносит ответный удар
Автор: Gordon Shumway Давным-давно (кажется в позапрошлую пятницу), в одной Солнечной системе на окраине галактики, методом проб и ошибок, нещадных экспериментов над микроконтроллерами со спецэффектами были разработаны... первичные часы (часовая станция), которая умеет рулить вторичными часами и не боится отключения питания.
Часовая станция построена на I2C-часах реального времени DS1307 и “народном“ микроконтроллере Atmel Atmega8. Управление вторичными часами происходит через ключи IRF7343. Благодаря резервной батарейке на DS1307 часы не боятся пропадания основного питания. При старте на выходе SQW/OUT DS1307 включается 1 Гц, который заведен на INT0 микроконтроллера. Каждую секунду по прерыванию микроконтроллер считывает время с DS1307. Если число минут равно 0, то идет команда на отработку импульса для вторичных часов (импульс на PB1 или PB2). Соответственно на выходах IRF7343 формируется импульс нужной полярности. IRF7343 по даташиту держат до 1 ампера, сопротивление вторичных часов (моих) ~1 ком. Получается больше 30 штук вторичных часов можно подключить к этой часовой станции, хватило бы основного питания. (количество вторичных часов не проверялось на практике, у меня включено 5 штук).
При пропадании основного питания в первую очередь пропадает питание на выводе 1 Atmega8 (INT 1), срабатывает прерывание, микроконтроллер бросает все дела и бежит записывать в свою EEPROM текущее состояние вторичных часов (часы, минуты, полярность последнего импульса управления). Он успевает это сделать благодаря цепочке питания VD2-C2. После этого программа останавливается. При первом включении и при последующих включениях часовой станции в течение пяти секунд можно сделать выбор – корректировать вторичные часы или нет. Если корректировать не требуется, нужно нажать кнопку S1. Иначе через пять секунд произойдет коррекция вторичных часов, как после отключения основного питания. Для установки времени на часовой станции нужно нажать S1 из рабочего режима. Кнопками S2 и S3 корректируются часы и минуты, S1 – выход в основной режим.
После установки времени вторичные часы не корректируются. Для установки времени на вторичных часах нужно нажать S4 из рабочего режима.
Кнопками S2 и S3 устанавливаются часы и минуты (то неправильное время, которое показывают вторичные часы в данный момент), S1 – запуск коррекции вторичных часов. Сразу после нажатия кнопки S1 рассчитывается разница между текущим временем и установленным для вторичных часов и запускается коррекция. Если время коррекции продолжалось больше 59 секунд, то по окончании ее делается поправка на время, которое прошло с момента начала коррекции. Таким образом, время на вторичных часах будет равно времени на часовой станции. При восстановлении основного питания программа считывает текущее время, сравнивает с тем, что записано в EEPROM и выполняет подгон или удержание вторичных часов (что из этого будет быстрее для коррекции времени) аналогично ручной коррекции, описанной выше. Импульсы коррекции следуют раз в секунду. На дисплее показано время подгона или удержания в секундах. При удержании импульсы не подаются.
Все события и нажатия кнопок радостно озвувчиваются спикером со встроенным генератором. Автоматический переход на летнее/зимнее время пока не делался, но есть в планах. В любом случае ручная коррекция делает этот процесс легким. В режиме ручной коррекции увеличили/уменьшили час и запустили коррекцию.
На печатной плате разведен разъем ISP для программирования распаяного микроконтроллера. О фьюзах: микроконтроллер тактируется от внутреннего генератора 1мгц, обязательно включаем монитор порога питания 2,7 вольт.
В планах на будущее: 0. Если новый руководитель страны вернет зимнее/летнее время, придется поднапрячься и сделать перевод автоматически; 1. пофиксить выявленные глюки; 2. добавить новые глюки. PS: во время экспериментов ни одного микроконтроллера не пострадало!
Файлы: Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
|||||||||||||||
|
||||