Часы на DS3231-чипе своими руками
Часы на DS3231-чипе своими руками
Часы на Atmega8, DS3231, термометром и дист.управлением
Автор: U.Z
Опубликовано 10.04.2012
Создано при помощи КотоРед.
Проект часов на Atmega8 и DS3231 с термометром на DS18B20 и дистанционным управлением.
Индикация – на 4-разрядном индикаторе (на разъемах ХР6-ХР9) с управлением от ULN2803, что позволяет подключить индикаторы любого размера с питанием сегментов до 50В 500мА.
Автоматическое управление яркостью с использованием внешнего фоторезистора, подключенного к разъему ХР4 (напр. СФ2-5).
Управление – от 3х локальных кнопок или пультом дист.управления (применен Sony RM887).
Датчик температуры – внешний DS18B20 (на разъеме ХР2), или внутренний в DS3231.
Применение точных часов DS3231 позволило отказаться от еженедельной коррекции, точность хода – ±15сек/месяц.
Работа происходит в 4х режимах:
1. Нормальный. Поочередная индикация часов/минут, даты/месяца, температуры (если подключен DS18B20 или разрешено использование внутреннего термометра DS3231 (параметр конфигурации №1 равен 1). Период чередования (10сек по умолч.) задается параметром №0. Если кнопка “+“ нажата дольше 2сек, на индикаторе отображается текущая температура с точностью 0.1˚С. Если кнопка “–“ нажата дольше 2сек, на индикаторе отображаются минуты/секунды;
2. Натройка часов. В этом режиме редактируются текущие часы/минуты, дата/месяц , год . Для выбора параметра кратковременно нажмите “Set“ на клавиатуре или “Menu left“/“Menu right“ на пульте. Выбранный параметр начнет мигать. Для установки параметра нажмите “+“/“–“ на клавиатуре или “Menu up“/“Menu down“ на пульте. Если кнопки не нажимались дольше 30сек, управление возвращается в нормальный режим. Для коррекции времени до ближайшего часа нажмите одновременно “+“ и “–“ на клавиатуре или левую кнопку на пульте (рис.1):
3. Индикация 4-разрідного номера (цена и т.д). Для перехода в этот режим нажмите и удерживайте кнопку “Set“ на клавиатуре или правую кнопку на пульте (“Menu“ – рис.2). Выбор цифры – кнопка “Set“ на клавиатуре или “Menu left“/“Menu right“ на пульте, ввод цифры – кнопки “+“/“–“ на клавиатуре или “Menu up“/“Menu down“ на пульте, выход в нормальный режим – длительное нажатие “Set“ на клавиатуре или “Menu“ на пульте. Если DS3231 не впаян на плате, система работает только в этом режиме.
4.Настройка параметров конфигурации. Позволяет настроить дополнительные параметры. Для перехода в этот режим нажмите одновременно кнопки “+“ и “Set“, или центральную кнопку на пульте (рис.3). первая цифра отображает номер параметра (0..6), остальные – значение. Выбор параметра – кнопка “Set“ на клавиатуре или “Menu left“/“Menu right“ на пульте, изменение параметра – кнопки “+“/“–“ на клавиатуре или “Menu up“/“Menu down“ на пульте, возврат в нормальный режим – короткое нажатие кнопок “+“ и “Set“ или центральной кнопки на пульте:
Список параметров:
Часы на DS3231-чипе своими руками
В этой статье мастер расскажет, как можно сделать свои собственные программируемые наручные часы – от процесса проектирования до поиска деталей, пайки и программирования.
Эти простые цифровые часы созданы на основе бинарных наручных часов Eiriks. Часы используют тот же микроконтроллер, что и на Arduino UNO.
Эти часы имеют толщину 10 мм, и могут работать в течение нескольких лет на одной батарее CR2032, показывать точное время и даже компенсировать температуру с помощью микросхемы DS3231 Real Time Clock (RTC) со встроенным кристаллом.
Шаг первый: о некоторых особенностях
Чтобы показать время, будут использоваться 12 светодиодов, расположенных по кругу, как у простого аналогового циферблата. Мастер выбрал КРАСНЫЕ светодиоды размером 0603 в сочетании с резисторами довольно высокого значения (680 Ом). Они достаточно энергоэффективны и в то же врем, остаются видимым при прямом солнечном свете.
Для просмотра времени необходимо нажать микрокнопку на боковой части корпуса.
Как сказано для MCU, будет использоваться и программироваться чип семейства ATmega 328 (все они совместимы с 328/168/88) (32 КБ флэш-памяти, 2 КБ SRAM и 1 КБ EEPROM) с 23 GPIO.
Самый лучший RTC, который мастер смог приобрести, это DS3231, сохраняющий точное время (внутренняя температурная компенсация и встроенный кристалл делают этот чип идеальным).
Питание осуществляется 2-х вольтовым элементом CR2032.
Шаг второй: печатная плата
Мастер использует Autodesk Eagle для создания печатной платы. Сначала он рисует схему, проверяет работоспособность. После схемы (схемы) разрабатывает макет печатной платы.
Для изготовления платы отправляет файлы на JLCPCB. Стоимость печати 2 $ + стоимость доставки.
От себя: насколько я понял, на JLCPCB можно заказать и монтаж компонентов на плату, причем абсолютно бесплатно. Понятно, что комплектующие тоже нужно приобрести у них.
Шаг четвертый: код
Теперь нужно загрузить на DS3231 код.
В загрузчике нужно установить следующие параметры.
Board: ATmega328
Bootlader: Yes
Clock: 1 Mhz internal
Compiler LTO: Disabled
Variant: 328P / 328PA
BOD: 1.8V
Скачать код, а также инструкцию по настройке часов можно здесь.
Шаг пятый: 3D моделирование и печать
Корпус разработан в Fusion 360. Все кроме платы и стекла печатается на 3D-принтере.
Корпус.
Внешнее кольцо для стекла.
Нижняя крышка.
Кнопки.
Мастер использовал следующие настройки для печати:
3D-принтер – Prusa I3 MK3S
Материал: PLA
Высота слоя – 0,1 мм
Толщина корпуса – 0,8 мм (сопло: 0,4 – 2 корпуса)
Толщина верха и низа – 0,8 мм
Плотность заполнения – 100%
Нить – 1,75 мм
Тип поддержки – везде
Тип сцепления платформы – Юбка
Стекло вставляется в корпус, а затем вставляется кольцо. Печатная плата прикручивается к нижней крышке винтами M1.4 Phillips. Затем устанавливаются кнопки и прикручивается верхняя часть корпуса.
Ниже можно скачать файл для печати корпуса часов, а также для печати корпуса в виде значка.
Все файлы STL и .f3d можно найти ЗДЕСЬ .
DIY часы на DS3231 – расширяем функционал
- Цена: 761,84 руб.
- Перейти в магазин
Часы были куплены и собраны год назад. Так как все покупки участвующие в обзоре покупались давно и продавцы их уже не продают, ссылки ведут на аналогичные предложения.
Основой часов является микроконтроллер stc15w1k24s и микросхема rtc ds3231. Сменив прошивку микроконтроллера и подключив дополнительные модули мы можем увеличить функционал часов.
Модули bmp180 и si7021 были между собой спаяны.
Расстояние между отверстиями модулей 5 мм.
Изначально для изготовления П-образных контактов пытался изогнуть штырьки от гребенок PLS, но почему-то при изгибании они лопались. Пришлось применить жилу от провода ПВ-1/ПУВ 1х0,5 мм( диаметр жилы примерно 0.7мм ).
и подпаяны к часам.
Точки подключения модулей.
Перепрошиты и собраны.
Отличия прошивки от стандартной(заводской):
1. При подключенном модуле si7021 — вывод влажности.
2. При подключенном модуле bmp180 — вывод давления.
3. При подключенном модуле bme280 — вывод давления и влажности.
4. Будильник с выбором дней недели.
5. 6 уровней яркости.
6. Наши праздники.
7. Возможность корректировки хода ds3231.
8. Пока отсутствуют анимация/эффекты.
GitHub Repository с проектом под Keil, поддержку STC15 в Keil можно добавить через STC-ISP.
Архив с HEX файлом.
STC-ISP v6.86D
Перепрошивал часы с помощью STC-ISP и USB-UART адаптера на CH340G. С напряжением 3.3v.
Input IRC frequency: 18.432 MHz
При перепрошивке просто прислонял шлейф к контактным площадкам.
Часы реального времени DS3231
Товары
Обзор часов реального времени DS3231
Если вы создаете устройство, которому нужно знать точное время, вам пригодится модуль часов реального времени RTC (Real Time Clock). Данные модули отсчитывают точное время и могут сохранять его даже при отключении основного питания при использовании резервного питания (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В), которого хватит на несколько лет.
Еще совсем недавно основным модулем RTC в среде Ардуинщиков являлся модуль на микросхеме DS1307. В этом модуле использовался внешний кварцевый генератор частотой 32кГц, при изменении температуры менялась частота кварца, что приводило к погрешности в подсчете времени.
Новые модули RTC (рис. 1) построены на микросхеме DS3231, внутрь которой установлен кварцевый генератор и датчик температуры, который компенсирует изменения температуры, поэтому время отсчитывается более точно. Погрешность составляет ±2 минуты за год.
Технические характеристики
календарь до 2100 года
выход стабильной частоты : 1-32768 Гц
напряжение питания : 2,7 – 5,3 В
напряжение батарейки : 2,3 – 5,3 В
ток потребления : 250 мкA
ток потребления от батарейки : 3 мкA
порог переключения на батарейку : 2,6 В
размеры : 40х22 мм
Назначение контактов
Модуль имеет 6 выводов:
VCC – питание 2,7 – 5,3 В
SDA – вход/выход данных интерфейса I2C
SCL – синхронизация интерфейса I2C
SQW – прерывание от будильников или выход импульсов 1-8192 Гц
32K – выход импульсов 32768 Гц
Подключение к плате Arduino
Модуль DS3231 подключается к плате Arduino по интерфейсу I2C, используются выводы SDA и SCL. Схема подключения показана на рис. 2.
Для программирования будем использовать библиотеки DS1307 и Time. Скетч получения данных с DS3231 и вывода в последовательный порт показан в листинге 1.
Открываем монитор последовательного порта (рис. 3).
Результат работы – правильный отсчет, но неверное значение времени и даты. При отсутствии питания значение времени в микросхеме DS3231 сбрасывается на 00:00:00 01/01/2000.
Добавим функционал скетчу – установка времени отправкой строки вида “dd/mm/ YYYY hh:mm:ss” в последовательный порт.
После загрузки скетча на плату Arduino, открываем монитор последовательного порта и отправляем в Arduino строку «dd/mm/ YYYY hh:mm:ss» для установки текущей даты и точного времени (рис. 4,5).
Теперь DS3231 будет отсчитывать точное время. И если установлена батарейка, время не собъется после отключения питания.
Пример использования
Создадим проект часов с выводом данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637.
Нам потребуются следующие компоненты:
Плата прототипирования – 1
Модуль DS3231 – 1
4digit display на базе TM1637 – 1
Схема соединения элементов показана на рис. 6.
Для программирования вывода данных на 4-х разрядный семисегментный дисплей на базе драйвера TM1637 установим в Arduino IDE библиотеку TM1637. Каждые 5 секунд меняем на дисплее отображение:
При отображении показаний текущего времени каждые 0.5 секунды мигаем разделителем типа “двоеточие” между вторым и третьим разрядом. Содержимое скетча показано в листинге 3.
Загружаем скетч на плату Arduino и проверяем работу часов.
Часто задаваемые вопросы
1. Отсутствует получение данных времени с модуля DS3231.
- Проверьте правильность подключения модуля DS3231 к плате Arduino.
2. Данные, получаемые с модуля DS3231, неверные.
- Установите правильную дату и время, загрузив код из листинга 2 и отправив из последовательного порт правильные данные.
3. При отключении питания сбивается время и дата.
Установите резервное питание модуля (батарейка CR2032 или литий-ионный аккумулятор LIR2032-3,6 В).
Проверьте напряжение резервного питания (должно быть не менее 2,3 В).