Андрей Смирнов
Время чтения: ~20 мин.
Просмотров: 1

Часы – конструктор на высокоточном (extremely accurate I2C) чипе DS3231

RTC-DS3231-высокоточные-часы-реального-времени-200x150.jpgDS3231 — высокоточные часы реального времени (real-time clock, RTC) со встроенными I2C интерфейсом, термокомпенсированным кварцевым генератором (TCXO) и кварцевым резонатором. Прибор имеет вход для подключения резервного автономного источника питания, позволяющего осуществлять хронометрирование и измерение температуры даже при отключенном основном напряжении питания. Встроенный кварцевый резонатор повышает срок службы прибора и уменьшает необходимое количество внешних элементов. DS3231 доступен в модификациях с коммерчески и индустриальным рабочим температурным диапазоном и упакован в 300 mil 16 контактный SO корпус.

RTC обеспечивает отсчет секунд, минут, часов, дней недели, дней месяца и года. Дата конца месяца определяется автоматически с учетом високосного года. Часы реального времени работают в 24 или 12- часовом формате с индикацией текущей половины суток (AM/PM). Прибор имеет два ежедневных будильника и выход прямоугольного сигнала с программируемой частотой. Обмен данными с прибором ведется через встроенный последовательный I2C совместимый интерфейс.

Прецизионный термокомпенсированный источник опорного напряжения и схема сравнения отслеживают напряжение основного питания VCC и при его снижении ниже заданного порога формируют сигнал сброса и осуществляют перевод схемы на работу от резервного источника питания. Дополнительный вывод RST может использоваться для внешнего сброса.

Модуль ZS-042 на базе RTC DS3231N

Представляют из себя законченный модуль ZS-042, который можно подключать к различным устройствам, не только к платформе Arduino.

Модуль построен на микросхеме DS3231SN, которая по сути и является часами реального времени. В отличии от старой модели часов, например на микросхеме DS1307, эти часы содержат внутренний кварцевый резонатор, благодаря чему часы имеют точный ход.

Принципиальная схема

Модуль-ZS-042-на-базе-RTC-DS3231N-Принципиальная-схема-200x150.png

Расположение и назначение пинов на модуле ZS-042

Вывод Описание
32К Выход, частота 32 кГц
SQW Программируемый выход Square-Wave сигнала
SCL Линия тактирования (Serial CLock)
SDA Линия данных (Serial Data)
VCC Питание модуля
GND Земля

Описание ATMEL AT24C32N

AT24C32N — это EEPROM память на 32к от производителя Atmel, собранная в корпусе SOIC8, работающая по двухпроводной шине I2C. Адрес микросхемы 0x57, при необходимости легко меняется, с помощью перемычек A0, A1 и A2 (это позволяет увеличить количество подключенных микросхем AT24C32/64). Так как чип AT24C32N имеет, три адресных входа (A0, A1 и A2), которые могут находится в двух состояния, либо лог «1» или лог «0», микросхеме доступны восемь адресов. от 0x50 до 0x57.

Отличительные особенности DS3231

  • Точность ±2 ppm в диапазоне температур от 0°C до +40°C
  • Точность ±3.5 ppm в диапазоне температур от-40°C до +85°C
  • Вход для подключения автономного источника питания, позволяющего обеспечить непрерывную работу
  • Рабочий температурный диапазонкоммерческий: от 0°C до +70°C
  • индустриальный: -от 40°C до +85°C
  • Низкое потребление
  • Часы реального времени, отсчитывающие секунды, минуты, часы, дни недели, дни месяца, месяц и год с коррекцией високосного года вплоть до 2100
  • Два ежедневных будильника
  • Выход прямоугольного сигнала с программируемой частотой
  • Быстродействующие (400 кГц) I2C интерфейс
  • 3.3 В питание
  • Цифровой температурный датчик с точностью измерения ±3°C
  • Регистр, содержащий данные о необходимой подстройке
  • Вход/выход сброса nonRST

Режимы электропитания

Напряжение питания микросхемы может находиться в пределах 2.3…5.5В, имеются две линии питания, для внешнего источника (линия Vcc), а также для батареи (Vbat). Напряжение внешнего источника постоянно отслеживается, при падении ниже порога Vpf=2,5В, происходит переключение на линию батареи. В следующей таблице представлены условия переключения между линиями питания:

Комбинации уровней напряжения Активная линия питания
Vcc < Vpf, Vcc < Vbat Vbat
Vcc < Vpf, Vcc > Vbat Vcc
Vcc > Vpf, Vcc < Vbat Vcc
Vcc > Vpf, Vcc > Vbat Vcc

Точность хода часов поддерживается за счет отслеживания температуры окружающей среды. В микросхеме запускается внутренняя процедура корректировки частоты тактового генератора, величина корректировки определяется по специальному графику зависимости частоты от температуры. Процедура запускается после подачи питания, а затем выполняется каждые 64 секунды.

В целях сохранения заряда, при подключении батареи (подача напряжения на линию Vbat), тактовый генератор не запускается до тех пор, пока напряжение на линии Vcc не превысит пороговое значение Vpf, или не будет передан корректный адрес микросхемы по интерфейсу I2C. Время запуска тактового генератора составляет менее одной секунды. Примерно через 2 секунды после подачи питания (Vcc), или получения адреса по интерфейсу I2C, запускается процедура коррекции частоты. После того как тактовый генератор запустился, он продолжает функционировать до тех пор, пока присутствует напряжение Vcc или Vbat. При первом включении регистры даты и времени сброшены, и имеют следующие значения 01/01/ 00 — 01 — 00/00/00 (день/месяц/год/ — день недели — час/минуты/секунды).

Ток потребления при питании от батареи напряжением 3.63В, составляет 3 мкА, при отсутствии передачи данных по интерфейсу I2C. Максимальный ток потребления может достигать 300 мкА, в случае использования внешнего источника питания напряжением 5.5В, и высокой скорости передачи данных I2C.

Функция внешнего сброса

Линия RST может использоваться для внешнего сброса, а также обладает функцией оповещения о низком уровне напряжения. Линия подтянута к высокому логическому уровню через внутренний резистор, внешняя подтяжка не требуется. Для использования функции внешнего сброса, между линией RST и общим проводом можно подключить кнопку, в микросхеме реализована защита от дребезга контактов. Функция оповещения активируется при снижении напряжения питания Vcc ниже порогового значения Vpf, при этом на линии RST устанавливается низкий логический уровень.

Описание регистров DS3231

Ниже в таблице представлен перечень регистров часов реального времени:

Адрес D7 D6 D5 D4 D3 D2 D1 D0 Функция Пределы
0x00 10 секунд Секунды Секунды 00-59
0x01 10 минут Минуты Минуты 00-59
0x02 12/24 AM/PM 10 часов Час Часы 1-12 +  AM/PM или 00-23
10 часов
0x03 День День недели 1-7
0x04 10 число Число Дата 01-31
0x05 Century 10 месяц Месяц Месяцы/век 01-12 + Век
0x06 10 лет Год Годы 00-99
0x07 A1M1 10 секунд Секунды Секунды, 1-й будильник 00-59
0x08 A1M2 10 минут Минуты Минуты, 1-й будильник 00-59
0x09 A1M3 12/24 AM/PM 10 часов Час Часы, 1-й будильник 1-12 +  AM/PM или 00-23
10 часов
0x0A A1M4 DY/DT 10 число День День недели, 1-й будильник 1-7
Число Дата, 1-й будильник 01-31
0x0B A2M2 10 минут Минуты Минуты, 2-й будильник 00-59
0x0C A2M3 12/24 AM/PM 10 часов Час Часы, 2-й будильник 1-12 +  AM/PM или 00-23
10 часов
0x0D A2M4 DY/DT 10 число День День недели, 2-й будильник 1-7
Число Дата, 2-й будильник 01-31
0x0E EOSC BBSQW CONV RS2 RS1 INTCN A2IE A1IE Регистр настроек (Control)
0x0F OSF EN32kHz BSY A2F A1F Регистр статуса (Status)
0x10 SIGN DATA DATA DATA DATA DATA DATA DATA Регистр подстройки частоты (Aging Offset)
0x11 SIGN DATA DATA DATA DATA DATA DATA DATA Регистр температуры, старший байт
0x12 DATA DATA Регистр температуры, младший байт

Информация о времени хранится в двоично-десятичном формате, то есть каждый разряд десятичного числа (от 0 до 9) представляется группой из 4-х бит. В случае одного байта, младший полубайт отсчитывает единицы, старший десятки и т. д. Счет времени осуществляется в регистрах с адресами 0x00-0x06, для отсчета часов можно выбрать режим 12-ти или 24-х часов. Установка 6-го бита регистра часов (адрес 0x02), задает 12-ти часовой режим, в котором 5-й бит указывает на время суток, значению 1 соответствует время после полудня (PM), значению 0 до полудня (AM). Нулевое значение 6-го бита соответствует 24-х часовому режиму, здесь 5-й бит участвует в счете часов (значения 20-23).

Регистр дня недели увеличивается в полночь, счет идет от 1 до 7, регистр месяцев (адрес 0x05) содержит бит века Century (7-й бит), который переключается при переполнении регистра счета лет (адрес 0x06), от 99 к 00.

В микросхеме DS3231 реализовано два будильника, 1-й будильник настраивается с помощью регистров с адресами 0x07-0x0A, 2-й будильник регистрами 0x0B-0x0D. Битами A1Mx и A2Mx можно настроить различные режимы для будильников, установка бита исключает соответствующий регистр из операции сравнения.

Типовая схема включения DS3231

Типовая-схема-включения-DS3231-300x125.png

Расположение выводов DS3231

Имя Функция
1 32kHz Выход частоты 32768 Гц. Это выход с открытым стоком, который требует наличия внешнего верхнего подтягивающего резистора (pullup). Выход работает от любого имеющегося источника питания. Если не используется, то может оставаться не подключенным.
2 VCC Основной источник питания. Этот вывод должен иметь подключенный развязывающий конденсатор емкостью 0.1..1.0 мкф. Если не используется, то подключается к земле (GND).
3 ~INT/SQW Сигнал прерывания с активным низким уровнем, или выход частоты прямоугольного сигнала. Это выход с открытым стоком, который требует наличия внешнего верхнего подтягивающего резистора (pullup), подключенного к напряжению питания 5.5V или меньше. Режим работы этой ножки определяется битом INTCN регистра управления (Control Register, адрес 0Eh), и выводимая частота зависит от битов RS2 и RS1. Если вывод ~INT/SQW не используется, то может оставаться не подключенным.
4 ~RST Сброс с активным уровнем лог. 0. Этот вывод имеет открытый сток, и работает как вход и как выход. Уровень показывает соответствие напряжения питания VCC допустимому пределу VPF. Как только VCC упадет ниже VPF, на выводе ~RST появится лог. 0. Когда VCC превысит VPF, то через интервал tRST на выводе ~RST с помощью pullup резистора появится уровень лог. 1. С активным уровнем лог. 0 выход с открытым стоком скомбинирован с функцией входа, подавляющей дребезг контактов кнопки. Этот вывод может быть активирован запросом сброса, выданным с помощью внешней кнопки. Вывод ~RST имеет внутренний pullup резистор номиналом 50 кОм, подключенный к VCC. Внешний подтягивающий резистор подключаться не должен. Если генератор запрещен, то интервал времени tREC пропускается, и уровень ~RST немедленно перейдет к лог. 1.
5..12 N.C. Нет соединения. Эти выводы должны быть подключены к земле (GND).
13 GND Земля, общий провод для напряжений питания и всех сигналов.
14 VBAT Вход для подключения резервного источника питания (обычно это литиевая батарейка на 3V). Если вывод VBAT используется как основной источник питания, то он должен иметь подключенный развязывающий конденсатор емкостью 0.1..1.0 мкф, имеющий малый ток утечки. Когда в VBAT используется как резервный источник питания, то этот конденсатор не нужен. Если VBAT не используется, то подключите его к земле (GND).
15 SDA Данные интерфейса I2C. Выход вывода имеет открытый сток, поэтому необходим внешний верхний подтягивающий резистор (pullup). Подтягивающее напряжение может иметь уровень до 5.5V, независимо от уровня напряжения питания VCC.
16 SCL Такты интерфейса I2C. Напряжение на входе SCL может иметь уровень до 5.5V, независимо от уровня напряжения питания VCC.

Блок-диаграмма микросхемы DS3231

Материалы

datasheet_ds3231.pdfdatasheet_AT24C32.pdfDS3231_высокоточная микросхема RTCDS3231_подключение часов реального времени

Купить DS3231 на AliExpress

  • Купить DS3231 на AliExpress
  • Free Shipping 1PCS DS3231 AT24C32 IIC Precision RTC Real Time Clock Memory Module For Arduino new originalUS $1.11
  • 1PCS DS3231 AT24C32 IIC Precision RTC Real Time Clock Memory Module For Arduino new originalUS $1.06
  • DS3231 AT24C32 IIC Module Precision Clock Module (without battery) DS3231SN Memory moduleUS $1.03
  • C44 DS3231 AT24C32 IIC Module Precision Clock Module (without battery) DS3231SN Memory moduleUS $1.00
  • DS3231 Real Time Clock Module 3.3V/5V with Battery for Raspberry PiUS $1.02

Похожие записи

Ещё один интересный модуль для Arduino ZS-042 – это модуль часов Модуль RTC (Real Time Clock — часы реального времени) DS3231  с интерфейсом I2C(TWI). Для микросхемы не нужен внешний кварцевый резонатор, благодаря встроенному термокомпенсированному кварцевому генератору (TCXO) с частотой 32,768 кГц. У микросхемы есть вход для подключения батарейки, и благодаря питанию от батареи поддерживается точный отсчет времени даже когда питание системы отключается. Интеграция кварцевого резонатора в корпус микросхемы улучшило стабильность точности хода часов.   

Модуль DS3231 RTC Arduino собран на микросхеме DS3231 и модуле памяти EEPROM на микросхеме 24C32 объемом 32 Кбит от производителя Atmel. Может работать как совместно с Arduino, так и отдельно (необходима батарейка CR2032).

Связь модуля с Arduino происходит по сетевому последовательному интерфейсу I2C(Inter-IntegratedCircuit) с максимальной скоростью 400 кГц, разработанному фирмой Philips. Для питания часов и памяти модуля в автономном режиме необходима батарейка CR2032. Модуль отслеживает состояние VCC для обнаружения сбоев питания и при необходимости автоматически переключается на резервный источник питания. Модуль позволяет устанавливать и считывать: секунды, минуты, часы, дни, дни недели, месяц, год, а так же температуру и есть возможность установки 2-х будильников. Что может модуль DS3231 RTC Arduino •    Установить календарь до 2100 года с учётом високосных лет •    Выбор режимов 12(AM/PM) или 24-часового режима •    Возможность настроить 2 будильника •    Использовать в качестве генератора прямоугольных импульсов •    Измерять температуру микросхемы  для температурной компенсацией кварцевого генератора (TCXO). Она практически не нагревается поэтому можно сказать, что она равна температуре окружающей среды

Характеристики •    Микросхема: DS3231 •    Рабочее напряжение: 3,3 В — 5 В. •    Потребляемый ток (в режиме ожидания): до 170 мкА. •    Потребляемый ток (во время передачи данных): до 300 мкА. •    Потребляемый ток (во время резервного питания, без передачи данных): до 3,5 мкА. •    Тактовая частота шины I2C: до 400 кГц. •    Рабочая температура: 0 … 70 °C. •    Точность хода: ±2 ppm (примерно ± 1 минута в год) при температуре от 0 до 40С •    внутренний термометр с диапазоном от −40…+85°C. •    Размер: мм 38 мм (длина) мм * 22 мм (Ш) мм * 14 мм (высота) •    Вес: 8 г

ppm(partspermillion) – частей на миллион.

Теперь немного о самом модуле. построен он на микросхеме DS3231N.  Резисторная сборка RP1 (4.7 кОм),

Datasheet DS3231 англ.Datasheet DS3231 рус.

Скетч установки времени в модуле DS3231.

Питание DS3231 RTC Arduino Если модуль питается от платы Arduino, то он не использует батарею на модуле. При питании от батарейки модуль отслеживает дату и время, но не работает с шиной I2C. При отсутствии обоих источников питания модуль прекращает работать и сбрасывает все данные в заводские настройки. С резервной батарейкой часы способны проработать несколько лет.

Группы контактов — J1 •    32K:   выход генератора, частота 32 кГц •    SQW: Выход прямоугольного(Square-Wave) сигнала. •    SCL:   Serial CLock — шина тактовых импульсов интерфейса I2C •    SDA:  Serial Data — шина данных интерфейса I2C; •    VCC:  «+» питание модуля •    GND: «-» питание модуля

Группы контактов — J2 •    SCL:   линия тактирования (Serial CLock) •    SDA:  линия данных (Serial Data) •    VCC:  «+» питание модуля •    GND: «-» питание модуля

Пины SDA и SCL на разных платах Arduino:                        SDA    SCL UNO                A4     A5 Mini                A4      A5 Nano              A4       A5 Mega2560     20       21 Leonardo       2          3

Для работы необходимо установить библиотеку DS3231

После установки откройте пример из библиотеки

или запустите пример установки даты и времени из скаченной папки. Это тот же пример, но с комментариями на русском языке и добавлено измерение температуры.

Скетч установки времени в модуле DS3231.

Ну вот и всё. DS3231 RTC Arduino очень простой и интересный модуль.

В ближайшее время я напишу статью как подружить этот модуль с  4-х разрядным, семисегментным индикатором с контроллером TM1637, 4 цифры, двоеточие.LED TM1637

Подписывайтесь и не пропустите новые интересные статьи и описания различных модулей.

Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.

Модули часов реального времени в проектах Arduino

Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто  применяется для учета времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).

Часы ведут отсчет в единицах, которые удобны обычному человеку – минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция millis(), которая также может считывать различные временные интервалы. Но основным недостатком этой функции является сбрасывание в ноль при включении таймера. С ее помощью можно считать только время, установить дату или день недели невозможно. Для решения этой проблемы и используются модули часов реального времени.

Электронная схема включает в себя микросхему, источник питания, кварцевый резонатор и резисторы. Кварцевый резонатор работает на частоте 32768 Гц, которая является удобной для обычного двоичного счетчика. В схеме DS3231 имеется встроенный кварц и термостабилизация, которые позволяют получить значения высокой точности.

Сравнение популярных модулей RTC DS1302, DS1307, DS3231

В этой таблице мы привели список наиболее популярных модулей и их основные характеристики.

Название Частота Точность Поддерживаемые протоколы
DS1307 1 Гц, 4.096 кГц, 8.192 кГц, 32.768 кГц Зависит от кварца – обычно значение достигает 2,5 секунды в сутки, добиться точности выше 1 секунды в сутки невозможно. Также точность зависит от температуры. I2C
DS1302 32.768 кГц 5 секунд в сутки I2C, SPI
DS3231 Два выхода – первый на 32.768 кГц, второй – программируемый от 1 Гц до 8.192 кГц ±2 ppm при температурах от 0С до 40С.

±3,5 ppm при температурах от -40С до 85С.

Точность измерения температуры – ±3С

I2C

Модуль DS1307

DS1307 – это модуль, который используется для отсчета времени. Он собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.

Модуль обладает следующими параметрами:

  • Питание – 5В;
  • Диапазон рабочих температур от -40С до 85С;
  • 56 байт памяти;
  • Литиевая батарейка LIR2032;
  • Реализует 12-ти и 24-х часовые режимы;
  • Поддержка интерфейса I2C.

Модуль оправдано использовать в случаях, когда данные считываются довольно редко, с интервалом в неделю и более. Это позволяет экономить на питании, так как при бесперебойном использовании придется больше тратить напряжения, даже при наличии батарейки. Наличие памяти позволяет регистрировать различные параметры (например, измерение температуры) и считывать полученную информацию из модуля.

Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм. В первой группе контактов находятся следующие выводы:

  • DS – вывод для датчика DS18B20;
  • SCL – линия тактирования;
  • SDA – линия данных;
  • VCC – 5В;
  • GND.

Во второй группе контактов находятся:

  • SQ – 1 МГц;
  • DS ;
  • SCL;
  • SDA;
  • VCC;
  • GND;
  • BAT – вход для литиевой батареи.

podklyuchenie-300x300.jpg

Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль часов реального времени RTC DS1307, провода и USB кабель.

Чтобы подключить контроллер к Ардуино, используются 4 пина – VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов – к земле с Ардуино, SDA – А4, SCL – А5.

budilnik1-300x147.png

Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Можно использовать для работы и RTCLib.

Проверка RTC модуля

При запуске первого кода программа будет считывать данные с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.

При открытии окна серийного монитора должны появиться следующие строки:

budilnik2-300x257.jpg

Будет показывать время 0:0:0. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.

Чтобы провести настройку времени на модуле, нужно в скетче найти строку

RTC.adjust(DateTime(__DATE__, __TIME__));

В  этой строке будут находиться данные с компьютера, которые используются ля прошивки модуля часов реального времени. Для корректной работы нужно сначала проверить правильность даты и времени на компьютере, и только потом начинать прошивать модуль часов. После настройки в мониторе отобразятся следующие данные:

budilnik3-300x260.jpg

Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.

Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но  если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.

Пример проекта с i2C модулем часов и дисплеем

Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.

В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор прост в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.

Модуль часов подключается к контактам SCL/SDA, которые относятся к шине I2C. Также нужно подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA – A4, SCL – A5, земля с модуля к земле с Ардуино, VCC -5V.

Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.

budilnik4.jpg

Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.

    #include     #include "TM1637.h"    #include "DS1307.h" //нужно включить все необходимые библиотеки для работы с часами и дисплеем.    char compileTime[] = __TIME__; //время компиляции.    #define DISPLAY_CLK_PIN 10    #define DISPLAY_DIO_PIN 11 //номера с выходов Ардуино, к которым присоединяется экран;    void setup()    {    display.set();    display.init(); //подключение и настройка экрана.    clock.begin(); //включение часов.    byte hour = getInt(compileTime, 0);    byte minute = getInt(compileTime, 2);    byte second = getInt(compileTime, 4); //получение времени.    clock.fillByHMS(hour, minute, second); //подготовка для записывания в модуль времени.    clock.setTime(); //происходит запись полученной информации во внутреннюю память, начало считывания времени.    }    void loop()    {    int8_t timeDisp[4]; //отображение на каждом из четырех разрядов.    clock.getTime();//запрос на получение времени.    timeDisp[0] = clock.hour / 10;    timeDisp[1] = clock.hour % 10;    timeDisp[2] = clock.minute / 10;    timeDisp[3] = clock.minute % 10; //различные операции для получения десятков, единиц часов, минут и так далее.    display.display(timeDisp); //вывод времени на индикатор    display.point(clock.second % 2 ? POINT_ON : POINT_OFF);//включение и выключение двоеточия через секунду.    }    char getInt(const char* string, int startIndex) {    return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0'; //действия для корректной записи времени в двухзначное целое число. В ином случае на экране будет отображена просто пара символов.    }    

После этого скетч нужно загрузить и на мониторе будет показано время.

Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.

Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.

Можно усовершенствовать проект. Если использовать жидкокристаллический монитор, можно сделать проект, который будет отображать дату и время на экране. Подключение всех элементов показано на рисунке.

budilnik5-300x182.jpg

В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.

Алгоритм работы следующий:

  • Подключение всех компонентов;
  • Загрузка скетча;
  • Проверка – на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает дату и время на 00:00:00 01/01/2000 при выключении.
  • Функция write позволяет получить дату и время с компьютера, после чего на экране будут указаны верные параметры.

Заключение

Модули часов используются во многих проектах. Они нужны для систем регистрации данных, при создании таймеров и управляющих устройств, которые работают по заданному расписанию, в бытовых приборах. С помощью широко распространенных и дешевых модулей вы можете создать такие проекты как будильник или регистратор данных с сенсоров, записывая информацию на SD-карту или показывая время на экране дисплея. В этой статье мы рассмотрели типичные сценарии использования и варианты подключения наиболее популярных видов модулей.

Используемые источники:

  • https://micro-pi.ru/rtc-ds3231-часы-реального-времени/
  • http://arduino-kid.ru/ds3231_rtc_arduino
  • https://arduinomaster.ru/datchiki-arduino/arduino-chasy-rtc-ds1307-ds1302-ds3231/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации