Часы на DS3231 – статья, в которой расскажу, как сделать часы реального времени на DS3231 с функцией напоминания. Вся информация будет выводиться на Oled-дисплей 128х64. Ну, а теперь обо всём по порядку…
Описание задумки.
Здравствуйте, знакомые поинтересовались можно ли сделать часы - будильник с одновременной установкой нескольких сигналов и выводом небольшого сообщения. Данное устройство должно послужить чем-то вроде таймера для таблетницы. Мне идея понравилась, и решил взяться за разработку. Так на свет появилась схема часов-будильника, которая показана на рисунке 1.
Рисунок 1.
О схеме.
Сердцем данного устройства является модуль часов DS3231 (рисунок 2),
Рисунок 2
а управляет всем микроконтроллер PIC16F877A, в основном, его выбор обусловлен числом портов. Данные выводятся на Oled-дисплей с разрешением 128х64. Дисплей на контроллере KS0108. Питание осуществляется от литиевого аккумулятора емкостью 3000 мА. Кому интересно - вот ещё одна моя конструкция с литиевыми аккумуляторами - FM приёмник на RDA5807.
В качестве зарядного устройства применён модуль с защитой от КЗ на ТР4056 (рисунок 3).
Рисунок 3
Индикатором разряда аккумулятора служит супервизор LM809M3-2.93, срабатывающий при напряжении на аккумуляторе в районе 2.93 вольта. Одного заряда аккумулятора, при работе будильника только на светодиод, хватает на 7-8 дней.
Чтоб запустить дисплей пришлось прибегнуть к помощи ноунеймовского китайского повышающего преобразователя 2.5-5 вольт(рисунок 4).
Рисунок 4
При работе часы в среднем потребляют 14 мА до преобразователя напряжения и 8 мА после. Ток потребления зависит от: тока подсветки дисплея, тока активного спикера и светодиода будильника. В моем случаи при включенном спикере, светодиоде и будильнике, ток достигал 18 мА до преобразователя напряжения.
Доработка модуля DS3231.
Модуль часов реального времени рассчитан на установку аккумулятора или ионистора, в качестве источника аварийного питания. В модуле предусмотрена цепочка для их заряда. Если вместо аккумулятора воткнуть простую батарейку (типоразмер CR2032), то она может раздуться и перестать работать или вообще загореться. В своём модуле цепь заряда исключил. Ещё исключил светодиод по питанию и его токоограничивающий резистор. Изменения можно увидеть на рисунке 5.
Рисунок 5
О печатной плате.
Печатную плату разрабатывал в Sprint-Layout. Плата получилась односторонняя, но с перемычками, размерами 95х85мм (рисунки 6-8). На рисунке 8 - красным – это перемычки.
Рисунок 6 - Низ платы.
Рисунок 7 - Низ платы.
Рисунок 8 - Верх платы.
Что умеют.
В данный часах можно запрограммировать до 8 будильников с 16-ти значным текстовым сообщением, алфавит может быть, как русским, так и английским.
Часы имеют два вида индикации срабатывания будильника: световая (светодиод) и звуковая (активный пьезоизлучатель). Звуковую индикацию можно, как включить, так и отключить. Для включения служит кнопка (в замкнутом состоянии звуковая индикация - включена).
В ночное время подсветка отключается (время включения и отключения подсветки можно настроить при программировании EEPROM).
При срабатывании супервизора на дисплей выведется сообщение - «Аккумулятор РАЗРЯЖЕН».
Первое включение и настройки.
Часы, собранные из заведомо рабочих деталей, не нуждаются в наладке и начинают работать сразу же.
Внимание! После сборки часы запускаются без батарейки, как только на дисплее пошёл отсчет времени, ее можно установить!
После инициализации мк происходит опрос бита конфигурации DS3231, если было обнаружено пропадание питание часов реального времени, то происходит инициализация DS3231, как только пошел отсчет времени можно приступить к настройке часов.
Настройка самих часов.
Удерживаем нажатой кнопку SB4 (установка часов) не менее 1 сек, при этом должны замигать секунды, их изменение осуществляется кнопкой SB3 (кнопка установки). Для изменения значений минут, часов, дня недели и т.д. просто снова нажимаем кнопку SB4, для выхода удерживаем нажатой кнопку SB1 (сброс будильника) не менее 1 сек.
Настройка будильников.
Удерживаем нажатой кнопку SB1 не менее 1 сек, при этом на экране должен отобразится номер изменяемого будильника и его время. Перебор будильников осуществляется кнопкой SB2 (изменения текста напоминаний), кнопкой SB4 выбираем что поменять – часы или минуты, а также включить или выключить будильник. Для смены значений используется кнопка SB3, для выхода удерживаем нажатой кнопку SB1. Если в текущем номере будильника были какие-то изменения, то они запишутся в EEPROM микроконтроллера и выведется сообщение о сохранении.
Внимание! В текущей версии прошивки время будильников должно настраиваться от большего к меньшему, в случаи несоответствия выведется предупреждение об ошибке и произойдет переход на изменение первого будильника.
Настройка текста напоминания.
Удерживаем нажатой кнопку SB2 не менее 1 сек, при этом на дисплее отобразится номер напоминания и его текст. Для изменения символа в напоминании используется кнопка SB3, для перемещения по тексту служит кнопка SB4, для изменения номера напоминания жмем кнопку SB2. При нажатии кнопки SB1 микроконтроллер проверит, были ли изменения в последнем выбранном напоминании, если изменения были - данные запишутся в EEPROM микроконтроллера.
Что можно настроить в EEPROM.
Время включения и отключения подсветки можно настроить при программировании микроконтроллера. Для этого достаточно изменить значения соответствующих ячеек EEPROM. На рисунке 9 время включения подсветки будет соответствовать 6 часам, а отключение - 21 часу.
Рисунок 9.
Показания температуры с DS3231 так же можно скорректировать при программировании (корректировка с шагом 1 градус). На рисунке 10 показаны калибровочные константы.
Рисунок 10.
Немного фоток.
Рисунок 11 – Печатная плата(вид снизу).
Рисунок 12 – Тестовая сборка.
Рисунок 13 – Оформил часики в китайский корпус.
Рисунок 14 – Вывел кнопки на отдельную плату.
Часы в работе.
О деталях.
Всё, что потребуется для сборки часов свёл в таблицу 1.
Позиционное обозначение |
Наименование |
Аналог/замена |
B1 |
357090, 3000 мА |
|
C1, C3, C5 - C7, |
Конденсатор керамический 100нФ x50B |
|
C2, C11, C14 |
Конденсатор танталовый TECAP 25 В тип D 10мкФ x25В |
|
C4, C12, C13 |
Конденсатор керамический 100нФ x50B SMD |
|
C8, C9 |
Конденсатор керамический 27пФ |
|
C10 |
Конденсатор электролитический 470мкФ x 25В |
|
DA1 |
Супервизор питания LM809M3-2.93 |
|
DD1 |
Микроконтроллер PIC16F877А |
|
HL1 |
Светодиод BL-L522URC Красный |
Любой с током до 20 мА |
M1 |
Модуль контроллера заряда на микросхеме TP4056 https://ru.aliexpress.com/item/1PCS-5V-1A-Micro-USB-18650-Lithium-Battery-Charging-Board-Charger-Module-Protection-Dual-Functions/32467578996.html |
|
M2 |
Повышающий DC-DC преобразователь.
|
|
M3 |
Модуль часов реального времени на микросхеме DS3231 https://ru.aliexpress.com/item/DS3231-AT24C32-IIC-Module-Precision-Clock-Module-without-battery-DS3231SN-for-Arduino-Memory-module/32822420722.html |
|
R1, R11 |
Резистор 10к SMD |
|
R2 |
Резистор подстроечный многооборотный 3296W 100к |
|
R3 |
Резистор 680 Ом |
|
R4 - R7, R10 |
Резистор 1к SMD |
|
R8 |
Резистор 330 Ом SMD |
|
R9 |
Резистор 2,5 Ом SMD |
|
R12 |
Резистор 3,3к SMD |
|
R13 |
Резистор 100к SMD |
|
R14 |
Резистор 20к SMD |
|
SA1-SA3 |
Кнопка B170G |
|
SB1-SB4 |
Кнопка тактовая FSM103 |
|
SP |
Speaker no name 5В |
|
VD1 - VD3 |
Диод импульсный 1N5819 |
|
VT1-VT3 |
Транзистор BC817 |
|
VT4 |
Транзистор BC847 |
|
|
Oled-дисплей 128х64 на контроллере KS0108 |
|
ZQ1 |
Кварц 4МГц |
|
Некоторые планы.
В скором будущем хочу перенести данные будильников и текста напоминания микросхему EEPROM модуля часов реального времени. Это позволит увеличить число знаков в тексте напоминания, а также добавить количество будильников. Также планирую внести однократный будильник.
Спасибо, что дочитали до конца! Буду рад обсудить статью в комментариях. Всем удачных разработок!
Комментарии