Синхронизируем время на модуле DS3231 с компьютером. DS3231 – подключение часов реального времени Arduino подключение часов реального времени ds3231
Содержание
- Технические характеристики
- Подключение к плате Arduino
- Пример использования
- Arduino для начинающих. Урок 11. Подключение модуля часов реального времени DS3231
- Что такое модуль часов реального времени DS3231?
- Схема подключения часов реального времени DS3231 и простейшая программа
- Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino
Если вы создаете устройство, которому нужно знать точное время, вам пригодится модуль часов реального времени 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 В).
Arduino для начинающих. Урок 11. Подключение модуля часов реального времени DS3231
Продолжаем серию уроков «Arduino для начинающих«. Знакомимся с модулем часов реального времени DS3231. В статье видео-инструкция, листинги программ, назначение и способы подключения к Arduino модулей из семейства DS.
Модуль часов реального времени DS3231
Что такое модуль часов реального времени DS3231?
Модуль часов реального времени — это электронная схема, предназначенная для учета хронометрических данных (текущее время, дата, день недели и др.), представляет собой систему из автономного источника питания и учитывающего устройства.
Модуль DS3231 по сути представляет из себя обыкновенные часы. В платах Arduino уже есть встроенный датчик времени Millis, однако он работает только при поданном питании на плату. При отключении и дальнейшем включении Arduino отсчет времени Millis сбросится до нуля. А DS3231 имеет на борту батарейку, которая даже при отключенной плате Arduino продолжает «питать» модуль, позволяя ему измерять время.
Модуль можно использовать в качестве часов или будильника, построенных на базе плат Arduino. Или же в качестве оповещения для различных систем, к примеру в «Умном доме».
Технические характеристики DS3231:
- модуль производит подсчет часов, минут, секунд, дат, месяцев, лет (високосные года учитываются до 2100 года);
- для подключения к различным устройствам, часы подключаются по I2C интерфейсу.
32К — Выход, частота 32 кГц.
SQW — Программируемый выход Square-Wave сигнала.
SCL – Через этот пин по интерфейсу I2C происходит обмен данными с часами.
SDA – Через этот пин передаются данные с часов.
VCC – Питание часов реального времени, нужно 5 вольт. Если на этот пин не поступает напряжение, часы переходят в спящий режим.
GND — Земля.
Схема подключения часов реального времени DS3231 и простейшая программа
Пины SDA и SCL на разных платах Arduino:
Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino
Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.
Подключение:
Подключение DS1307 к Arduino :
Подключение DS1302 к Arduino :
Подключение DS3231 к Arduino :
Программа:
В зависимости от того какой модуль Вы подключаете, необходимо в программе указать
Для DS1307:
Для DS1302 :
Для DS3231 :
Пример установки текущего времени в RTC модуль (DS1307):
Пример считывания текущего времени с RTC модуля (DS1307) и вывод в Последовательный порт :
Преимущества библиотеки:
— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.
— библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire
— для инициализации модуля необходимо вызвать функцию begin с названием модуля.
— подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)
— простота установки и чтения времени функциями settime и gettime
функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)
функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.
— библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt
Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на
36 байт, при этом не затронув область памяти программ.
— при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.
— при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.
— в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255)
если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа.
Источник: