Arduino и часы RTC DS3231
Описание
DS3231 – микросхема часов реального времени, которая при наличии внешнего автономного питания считает время и всегда готова поделиться им с микроконтроллером. Основные характеристики:
- Питание: 2.3.. 5.5V
- Потребление: 180 мкА
- Потребление батарейки: 0.8 мкА
- Считает часы, минуты, секунды, число, месяц, год, день недели
- Встроенный календарь до 2100 года
- Встроенный термометр, точность ±3°С
В продаже можно найти несколько вариантов модулей на базе DS3231, в наборе GyverKIT идёт мини-версия (второй слева):
Подключение
Модуль подключается к шине I2C согласно распиновке микроконтроллера:
У мини-версии модуля пины подписаны немного иначе:
Библиотеки
В примерах на этом сайте мы будем использовать microDS3231 как гораздо более лёгкую и оптимальную. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию microDS3231. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Чтобы автоматически установить время на модуле, можно прошить следующую программу:
Она установит дату и время, равное времени компиляции программы, то есть текущее. После этого можно работать с модулем, например выведем дату и время разными способами:
Источник
Часы на 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 можно найти ЗДЕСЬ .
Источник
Часы на DS3231 и AVR-микроконтроллере
Сегодня мы продолжим поиски идеальной микросхемы часов реального времени (RTC). Часы будем изготавливать на основе DS3231. Индикация будет использоваться более удобная для разработки — LCD дисплей, на котором будет отображаться вся информация сразу кроме настроек. В таком виде часы удобно использовать как настольный вариант.
Итак, рассмотрим саму микросхему DS3231. DS3231 — это часы реального времени с экстремально точным ходом (подобрали же производители словечко) благодаря встроенному кварцевому резонатору с температурной компенсацией. Интерфейс передачи данных — I 2 C. В этой микросхеме есть также вход для напряжения резервной батареи, при отключении основного питания микросхема автоматически переключается на работу от резервной батареи, точность хода от резервной батареи не нарушается. Весьма радует, не правда ли? В DS3231 поддерживается подсчет секунд, минут, часов, дней месяца (даты), дней недели, месяцев и лет (с учетом високосного года для месяцев). Поддерживается работа в 12 и 24 часовом формате. Имеется 2 будильника с возможностью их настройки и отслеживания состояния. Подстройка точности температурной компенсации. А также два выхода — на 32 кГц (выход составляет 32.768 кГц) и программируемый выход от 1 Гц до 8.192 кГц. Имеется также вывод сброса — RST. микросхема часов реального времени выпускается в корпусе SO-16. Корпус достаточно крупный, но если учитывать что внутри уже имеется кварц, да еще и температурно компенсируемый, то мне кажется, с размерами тут все отлично. У DS3231 есть близнец в виде DS3232, у которого, правда, на 2 ножки больше. Все это очень напоминает продукцию компании NXP — микросхемы часов PCA2129 и PCF2129. Аналогично температурно компенсируемый встроенных кварцевый резонатор, оба такие же близнецы только с разным количеством n.c. выводов и схожими функциями относительно DS3231 помимо хронометрожа времени.
RTC DS3231 имеются в продаже в виде модулей с необходимой обвязкой, а также до комплекта микросхемой EEPROM, которая чаще всего и даром не нужно, только веса добавляет:
Кроме необходимых деталей на плате модуля есть также светодиод, функция которого — индикация подключения питания к выводам. Наверно просто так доставили, для красоты.
Что важно знать при работе с такой микросхемой часов реального времени, так это как же извлечь из нее данные или записать их туда. Часы имеют интерфейс I 2 C. Для того чтобы осуществить запись данных (а это нужно и для того чтобы прочитать данные) нужно передать условие старта (эти команды осуществляются по средствам аппаратного или программного I 2 C для микроконтроллера), далее передать адрес микросхемы с битом записи, далее передать адрес регистра к которому будем обращаться и далее передать в этот регистр байт данных, если следом передать еще байт данных, он запишется в следующий регистр и так далее. По окончании нужно передать условие остановки. Графическое изображение выше сказанного на рисунке:
Запись данных необходима для первоначальной настройки, а также для настройки текущего времени. Далее нам нужно постоянно получать данные о текущем времени и даты. Для этого необходимо осуществлять чтение из регистров хранения этой информации. Чтение состоит из двух процедур — установить указатель на нужный регистр и прочитать его. Чтобы установить указатель на нужный регистр, нужно передать условие старта, потом передать адрес микросхемы с битом записи и байт с адресом регистра. Далее либо условие остановки и следом условие старта, либо просто рестарт. Теперь вторая процедура — непосредственно чтение из регистров. Старт передан, далее нужно отправить адрес микросхемы с битом чтения и далее считывать регистры в необходимом количестве, по окончании передать условие остановки. Если информация из регистра была прочитана, то указатель автоматически переходит на следующий за ним регистр без лишних действий со стороны микроконтроллера (мастер устройства). На рисунке проиллюстрировано все выше сказанное относительно чтения регистров по средствам I 2 C интерфейса:
- для записи — 0b11010000
- для чтения — 0b11010001
Программно код на языке Си будет выглядеть следующим образом:
Это весь исходный код, использовавшийся для работы с микросхемой, подстройка хода часов не затрагивалась, так как и без того часы не ушли ни на секунду за несколько дней.
Да — отличной фишкой DS3231 является то, что эта же микросхема выполняет функции термометра (а то как же еще осуществлять температурную компенсацию) и возможность чтения текущей температуры. Максимальное разрешение температуры составляет 0.25 градусов Цельсия. Также период обновления температуры достаточно большой — около 1 минуты. Да нам быстро то не к чему обновлять ее.
Схема же всего устройства часов выглядит так:
Микроконтроллер был выбран Atmega8 за свою широкую распространенность и небольшую цену. Данный микроконтроллер можно использовать как в корпусе DIP-28, так и в SMD исполнении в корпусе TQFP-32. Резистор R3 необходим для предотвращения самопроизвольного перезапуска микроконтроллера в случае появления случайных помех на выводе PC6. Резистор R3 подтягивает плюс питания к этому выводу, надежно создавая потенциал на нем. Для индикации используется жидко кристаллический (ЖК или LCD) дисплей. Мною использовался дисплей 2004А — 4 строки по 20 символов больше для красоты, поэтому можно применять дисплей более привычный — 2 строки по 16 символов. ЖК дисплей подключается к микроконтроллеру по четырех битной системе. Переменный резистор R2 необходим для регулировки контраста символов на дисплее. Вращением движка этого резистора добиваемся наиболее четких для нас показаний на экране. Подсветка ЖК дисплея организована через вывод «А» и «К» на плате дисплея. Подсветка включается через резистор, ограничивающий ток — R1. Чем больше номинал, тем более тускло будет подсвечиваться дисплей. Однако пренебрегать этим резистором не стоит во избежание порчи подсветки. Кнопки S1 — S4 управляют настройками часов. Светодиод сигнализирует о том, что будильник сработал. Светодиод можно заменить на какую-либо звуковую схему. Резисторы R5 — R8 являются подтягивающими (pull-up) и необходимы для формирования прямоугольных импульсов на выводах микросхемы часов. Также это необходимо для правильной работы протокола I2C. Для питания схемы используется микросхема линейного стабилизатора L7805, ее можно заменить на отечественный аналог пяти вольтового линейного стабилизатора КР142ЕН5А, либо применить другу микросхему стабилизатора напряжения в соответствии с подключением ее в схеме (например LM317 или импульсные стабилизаторы LM2576, LM2596, MC34063 и так далее). Далее 5 вольт стабилизируются другой микросхемой — AMS1117 в исполнении, дающей на выходе 3,3 вольта. Микросхема часов, в соответствии с даташитом, питается от напряжения 3,3 вольта. Однако максимальное напряжение составляет 5,5 вольта. Поэтому Данный стабилизатор можно использовать, а можно и нет, на ваше усмотрение. Стабилизатор напряжения AMS1117 можно также заменить на исполнение ADJ (AMS1117ADJ) — то есть регулируемый вариант, задать необходимое напряжение при таком выборе необходимо будет при помощи двух резисторов, подключаемых к микросхеме в соответствии с даташитом на нее.
Схема была собрана и отлажена с применением отладочной макетной платы для микроконтроллера ATmega8:
Назначение кнопок:
- S1 — отключает сигнал будильника, либо выходит в главное меню из любого меню настроек
- S2 — сброс микроконтроллера
- S3 — изменяет время или дату в меню настроек
- S4 — вход в меню настроек и перелистывание меню
Вывод 32 кГц может использоваться для контроля частоты кварцевого резонатора. Подключаем к этому выводу частотомер или осциллограф и контролируем частоту:
Как видно из скриншота осциллограммы, частота примерно соответствует 32,768 кГц (примерно в силу ограничения разрешения измерения частоты, а «на глаз» настолько точно трудно определить).
В итоге получились часы со следующими характеристиками:
- индикация времени
- индикация даты
- индикация дня недели
- индикация активности будильника
- 1 будильник с выходом сигнала от микроконтроллера
- индикация температуры окружающей среды (программно реализована только положительная температура, отрицательная, думаю, нам ни к чему)
- настройки будильника
- настройки времени
- настройки даты
- LCD-дисплей с подсветкой
- сохранение настроек и продолжение хода часов при отключении основного питания
Подытожим. Микросхема часов реального времени DS3231 является отличным решением. Точность хода сравнительно c какой-нибудь DS1307 или PCF8523 выше, а вот PCA/PCF2129 еще могут потягаться с ней. Среди рассмотренных мною микросхем часов реального времени данный экземпляр на сегодняшний день занимает первое место по функционалу и точности.
Для программирования микроконтроллера Atmega8 необходимо знать конфигурацию фьюз битов (скриншот сделан в программе AVR Studio):
К статье прилагается прошивка для микроконтроллера Atmega8, проект схемы в программе Proteus, а также видео работы часов (в самом начале сработает будильник — загорится светодиод).
Источник