РадиоКот >Схемы >Цифровые устройства >Автоматика >

Теги статьи: Первичные часыAVR

Первичные Часы

Автор: LEVV2006
Опубликовано 10.02.2022
Создано при помощи КотоРед.

Всем привет!

История проекта берет свое начало с обычного объявления на АВИТО.
Некто продавал первичные часы собственного изготовления за 5000р. Все бы ничего, и я бы прошел бы мимо, но в описании к объявлению было столько изящных слов, что они заставили меня задумать. А действительно ли так сложно сделать первичные часы?

Вот эта мысль и натолкнула меня на этот проект «Выходного дня».

Техническое задание, которое я сформировал:

  1. Удобное управление и корректировка времени
  2. Питание от USB (Как было в объявлении)
  3. Автоматическая корректировка времени после выключения/включения питания.

Поговорим о комплектующих:

  1. Часы: Реализованы на микросхеме DS3231 в корпусе SO-8. Редкая, но очень удобная из-за своих размеров. Эту микросхему вы все знаете Стабильнее её я пока не встречал.
  2. Преобразователь: Реализован на микросхеме MAX1771. Только потому, что их у меня много.
  3. Драйвер часов: Микросхема DRV8870DDA. Это драйверы управления электродвигателем.
  4. Контроллер: ATTINY841. Выбирал из-за размеров и функционала. Но, к сожалению, микросхема мне не очень понравилась. Показалась что она еще сыровата. Были некоторые необъяснимые глюки.
  5. Память: Нашел эту крошечную микросхему 24LC01. Про неё могу сказать только одно, она ОЧЕНЬ медленная. Но для наших задач пойдет.

Поговорим о логике работы всей системы.

При инициализации ножка 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 - микроконтроллер наносит ответный удар

Первичные часы.

Универсальный AVR-программатор на Arduino.

Удобный программатор для AVR

AVR ISP MK2 - Power Mod / доработка программатора

RS-485 ATmega BootLoader

Контроллер стиралки на ATMEGA8

Простой велокомпьютер с цветным 320x240 LCD

Доработка программатора HVProg.

Шим для начинающих - аппаратный шим, практическое применение на примере Tiny13A

Дельта-Сигма АЦП для МК на примере ATtiny2313

Термоконтроллер "Мурка"

Простые часы на микроконтроллере.

Термостат для теплых полов.

Автомобильные часы.

Часы из амперметров

"Поехали кататься!" или машинка на радиоуправлении

Одноламповые часы

Очень маленькое, но очень полезное устройство.

Часы "GadgetClock" для офисного стола

Минирадио FM

Часы-термометр на микроконтроллере ATmega8. V 2.0

Портативный FM приемник на радиомодуле RDA5807M с RDS

Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21

Часы на вакуумных лампах ИВ-12