|
Теги статьи: | Первичные часыAVR |
Первичные Часы
Автор: LEVV2006
Опубликовано 10.02.2022
Создано при помощи КотоРед.
Всем привет!
История проекта берет свое начало с обычного объявления на АВИТО.
Некто продавал первичные часы собственного изготовления за 5000р. Все бы ничего, и я бы прошел бы мимо, но в описании к объявлению было столько изящных слов, что они заставили меня задумать. А действительно ли так сложно сделать первичные часы?
Вот эта мысль и натолкнула меня на этот проект «Выходного дня».
Техническое задание, которое я сформировал:
Поговорим о комплектующих:
Поговорим о логике работы всей системы.
При инициализации ножка SQW микросхемы DS3231 настраивается на импульсы с частотой 1Гц.
Эти импульсы подаются на ножку микроконтроллера, который в свою очередь запрашивает время с микросхемы часов и обрабатывает алгоритм корректировки вторичных часов.
Если алгоритм говорит о необходимости корректировки времени на вторичных часах, то МК включает преобразователь MAX1771, корректирует время и выключает преобразователь.
В целом ничего сложного по основному алгоритму нет.
А вот возможность отключать/включать питание с последующий корректировкой заставил задуматься.
Для реализации этой функции необходимо записывать в память текущее состояние вторичных часов и полярность. И запись нужно производить каждый раз при изменении любого из параметров.
Изначально для этого хотел использовать EEPROM микроконтроллера, но циклов записи/перезаписи слишком маленькое. Да еще в МК ATTINY841 какая-то ерунда с памятью. 8 из 10 перезаписей корректны, а 2 нет. И это происходит рандомно!
В этой ситуации нам поможет микросхема 24LC01. У неё гарантированных 1000000 циклов перезаписей (А это 2,5 года непрерывной работы часов).
С данными мы разобрались.
Но для стабильности работы алгоритма нам нужен еще датчик наличия напряжения.
На плате часов по сути 2 цепи питания. Одна с конденсатором на 100 uF питание преобразователь. Другая через диод имеет гирлянду из конденсаторов на 470 uF.
Когда отключается питания, то контроллер понимает, что питания нет и на запасённой энергии в гирлянде успевает дозавершить выполнение всех алгоритмов и прекратить выполнять новые.
Тем самым мы избавляемся от ненужных ошибок при пропадании питания.
При появлении питания МК сравнивает показания часов (DS3231 продолжают идти так как они с батарейкой) и тем, что записано в памяти 24LC01. И если требуется, то автоматически корректирует время.
Настройка часов:
Предусмотрено 2 режима.
Режим 1: Бываю случае когда время может отставать на 1-2 минут. Это часто связано с тем, что механизм может подклинивать. Для быстрой корректировки нужно зажать кнопку (2) на 5с. Стрелка перескочит на 1 минуту вперед.
Режим 2: Полная корректировка. Зажать кнопку 1 на 5с. Загорится зеленая лампочка. Ход времени остановиться и кнопкой 2 уже можно выставить необходимое время. Для применения настроек нужно зажать кнопку 1 до погасания лампочки.
В целом ничего сложного по итогу нет. Получилась крохотная платка с необходимом функционалом.
Прикрепляю к статье все исходники что у меня есть + максимально документированную прошивку.
Я не исключаю что можно написать пришивку и лучше и избавиться от некоторых микросхем, но это уже совсем другая история!
Спасибо что дочитали до конца! Надеюсь, было полезно и интересно.
Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться:
Первичные часы 2 - микроконтроллер наносит ответный удар