Настройка модуля часов реального времени rtc для arduino

Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino

Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.

Подключение:

Подключение DS1307 к Arduino :

RTC DS1307 Arduino UNO
GND GND
VCC +5V
SDA A4
SCL A5

Подключение DS1302 к Arduino :

RTC DS1302 Arduino UNO
GND GND
VCC +5V
RST 10 (Можно изменить на другие в скетче)
CLK 13 (Можно изменить на другие в скетче)
DAT 12 (Можно изменить на другие в скетче)

Подключение 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 несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа.

Функцию period достаточно вызвать один раз.

Настройка модуля часов реального времени RTC для Arduino

Все, что вам нужно сделать, так это сконфигурировать RTC-чип в соответствии с текущей датой и временем … и сегодняшний проект поможет вам это сделать!

Проект

RTCSetup состоит из двух элементов:

  • графический интерфейс пользователя (GUI), написанный на языке C# и запущенный на ПК
  • скетч, запущенный на Arduino, к которому подключен модуль RTC

Графический интерфейс пользователя и скетч соединены по последовательному интерфейсу с помощью несложного протокола. Исходный код для них доступен в моем хранилище данных Github.

Arduino и часы реального времени

Для связи с чипом DS1307 я выбрал библиотеку RTClib хранилища Adafruit. Данный чип наиболее часто используется в модулях RTC энтузиастами со всего мира. Соединение между ИС и Arduino устанавливается с помощью шины I2C:

На рисунке показано соединение, организованное с помощью “новых” выводов I2C платы Arduino Uno; естественно вы можете использовать выводы A4 и A5.

Скетч Arduino получает команды от ПК, выполняет их и посылает назад ответный сигнал.

Протокол

Как я указал ранее, для связи между графическим интерфейсом пользователя и Arduino используется несложный протокол, созданный с помощью только 4-х команд:

Команда: ##

Первая команда, отправленная после установления соединения, используется ПК для подтверждения “совместимости” модуля, подключенного к последовательному порту. Arduino должен ответить командой «!!«

Команда: ?V

Данная команда используется для получения версии скетча. Arduino отвечает строковым параметром, определенным как константа в начале скетча:

#define VERSION «1.0»

Команда: ?T

Данная команда, используемая для получения фактической даты и времени, считывается из модуля RTC. Плата Arduino отвечает строковым параметром в формате: dd/MM/yyyy hh:mm:ss.

Команда: !TddMMyyyyhhmmss

Данная команда используется для установки времени RTC. Arduino отвечает командой «OK».

Графический интерфейс пользователя (GUI)

Графический интерфейс пользователя, разработанный на C#, общается с Arduino по вышеуказанному протоколу и выполняет три функции:

  • устанавливает текущую дату и время
  • устанавливает требуемую дату и время, которые определяет пользователь
  • получает и отображает фактическую дату и время модуля RTC.

Сначала вам необходимо выбрать последовательный порт Arduino для установки соединения и нажать кнопку CONNECT. Если соединение установлено (команды ## и ?V), тогда в строке состояния будет отображаться версия скетча.

В первом окне будет показано фактическое время ПК. После нажатия правой кнопки мыши (на красной стрелке) вы сможете сконфигурировать модуль RTC с данным временем :

С помощью кнопки с зеленой стрелкой вы сможете получить фактическое время, хранимое в модуле RTC:

И, наконец, с помощью выпадающего списка даты в центре, вы сможете выбрать требуемое значение даты и времени, и затем отправить эти значения в модуль RTC:

Технические данные

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

Я измерил время (около 150 мс), которое необходимо скетчу для установки времени, после того как команда отправлена графическим интерфейсом пользователя: это причина почему в коде, который вы видите, команда !T отправляется, когда действительное число миллисекунд составляет 850 и пройденное время – это фактическое время + 1 секунда.

RTC модуль DS1307 подключение к Arduino

Опубликовано 04.07.2013 12:20:00

Модуль рассматриваемый в статье содержит в себе сразу две микросхемы: DS1307 (часы реального временис I2C- интерфейсом) и AT24C32 (микросхема памяти EEPROM на 32K bit).

В данной статье рассмотрим работу только микросхемы часов реального времени DS1307.

Компоненты для повторения (купить в Китае):

Основные технические характеристики:

• Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом высокосности текущего года вплоть до 2100 г.

• 56 байт энергонезависимого ОЗУ для хранения данных

• 2-х проводной последовательный интерфейс

• Программируемый генератор прямоугольных импульсов. Может выдавать 1 ГЦ, 4.096 кГЦ, 8,192 кГЦ и 32,768 кГц.

• Автоматическое определение отключения основного источника питания и подключение резервного

• 24-х часовой и 12-ти часовой режим

• Потребление не более 500 нA при питании от резервной батареи питания при температуре 25C°

Микросхема выпускается в восьмипиновых DIP и SOIC корпусах. Распиновка для всех одинакова. Далее приведу строки из даташита для полноты картины.

Документация на микросхему (datasheet)

Назначение выводов:

X1, X2 – Служат для подключения 32.768 кГц кварцевого резонатора

Vbat – Вход для любой стандартной трёхвольтовой литиевой батареи или другого источника энергии. Для нормальной работы DS1307 необходимо, чтобы напряжение батареи было в диапазоне 2.0 . 3.5 В. Литиевая батарея с ёмкостью 48 мА/ч или более при отсутствии питания будет поддерживать DS1307 в
течение более 10 лет при температуре 25°C.

GND – общий минус

Vcc – Это вход +5 В. Когда питающее напряжение выше 1.25 * VBAT, устройство полностью,доступно, и можно выполнять чтение и запись данных. Когда к устройству подключена батарея на 3 В, и Vcc ниже, чем 1.25 * VBAT, чтение и запись запрещены, однако функция отсчёта времени продолжает работать. Как только Vcc падает ниже VBAT, ОЗУ и RTC переключаются на батарейное питание VBAT.

SQW/OUT – Выходной сигнал с прямоугольными импульсами.

SCL – (Serial Clock Input — вход последовательных синхроимпульсов) – используется для синхронизации данных по последовательному интерфейсу.

SDA – (Serial Data Input/Output — вход/выход последовательных данных) – вывод входа/выхода для двухпроводного последовательного интерфейса.

Работа с выводом SQW/OUT.

Для начала рассмотрим структуру регистров DS1307.

Структура регистров микросхемы DS1307

Нас интересует «Управляющий регистр» находящийся по адресу 0x7, т.к. он определяет работу вывода SQW/OUT.

Если бит SQWE = 1. то начинается формирование прямоугольных импульсов, если SQWE = 0, то на выходе вывода будет значение бита OUT.

За частоту импульсов отвечают биты RS0 и RS1, а именно:

RS0 RS1 Частота
1 Гц
1 4.096 кГц
1 8.192 кГц
1 1 32.768 кГц

Если нам нужно начать формирование прямоугольных импульсов с частотой 1 Гц, то необходимо в 0x7 регистр микросхемы, которая имеет адрес 0x68 отправить байт 00010000 или 0x10 в шестнадцатиричной системе счисления.

При помощи библиотеки Wire.h, это можно сделать следующим образом:

Подключение к Arduino:

Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся.

RTC модуль На базе ATmega 328 Leonardo MEGA, ADK, DUE
SCL A5 D3 D21
SDA A4 D2 D20
VCC +5V +5V +5V
GND GND GND GND

Необходимые библиотеки:

для работы с DS1307: http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
для работы со временем: http://www.pjrc.com/teensy/td_libs_Time.html

Установка времении

• Вручную в коде

Время задается вручную в программном коде и заливается в плату Arduino. Данный способ не самый точный т.к. время на компиляцию и загрузку может занимать различный временной промежуток.

• Установкой из «Монитора порта»

Более точный вариант установки времени. Время задается через «монитор порта» по ходу работы контроллера.

Открываем монитор, вводим данные в нужном формате, смотрим на эталонные часы, подлавливаем момент и шелкаем «отправить».

Подключение DS1302 к Ардуино по I2C / SPI

DS1302 Аrduino ► это модуль часов реального времени. Рассмотрим схему подключения модуля к плате Ардуино и скетч для настройки даты и времени на часах Ардуино.

DS1302 Аrduino — это модуль часов реального времени с возможностью бесперебойного питания от литиевой батарейки. Рассмотрим схему подключения модуля к плате Ардуино и продемонстрируем код, с помощью которого можно установить нужную дату и время. Также мы разместили описание универсальной библиотеки iarduino_RTC.h для работы с модулями DS1302, DS1307 и DS3231.

Модуль DS1302 (RTC): схема, описание

Ориентация по времени полезна при создании устройства для автоматического полива растений, включении света или отопления по строгому расписанию и т.д. Контроллер Arduino не имеет встроенных часов, поэтому при необходимости выполнения задач микроконтроллером Arduino Uno в строго определенное время суток, понадобится использовать в проекте модуль часов DS1302 или ближайшие аналоги.

Распиновка ds1302. Часы реального времени Arduino DS1302

Микросхема отличается низким энергопотреблением и позволяет отсчитывать время с точностью до секунд. Подключение ds1302 к Ардуино осуществляется с помощью пяти контактов. Выводы VCC и Gnd отвечают за питание модуля. Контакты CLK,DAT и RESX подключают к цифровым пинам микроконтроллера. В скетче можно самим указать задействованные цифровые пины (в нашем примере использован 6,7 и 8 пин).

Как подключить DS1302 к Arduino (RTC)

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль DS1302, DS1307 или DS3231;
  • LCD монитор 1602 i2c;
  • провода «папа-мама».

Модули часов DS1307 и DS3231 подключаются к плате Ардуино через I2C протокол, как LCD дисплей I2C. Контакт SDA подключается к пину A4, контакт SCL к пину A5 Ардуино Уно. При подключении данных модулей к плате Arduino Mega следует использовать порты SDA (20 пин) и SCL (21 пин). При этом в скетче необходимо снять комментарий в строчке с нужным модулем, а строчку с модулем 1302 наоборот закомментировать.

Скетч. Работа с модулем ds3231 Ардуино DS1307

Пояснения к коду:

  1. для работы с программой необходимо скачать библиотеку iarduino_RTC.h.
  2. с помощью команды time.settime(); можно установить дату и время, которые будут выводится на монитор порта Arduino IDE каждую секунду.

Подключение DS1307 к дисплею LCD 1602 i2c

Рассмотрим два варианта подключения модуля RTC к Arduino и текстового дисплея 1602. В первом варианте используется протокол SPI для модуля часов, поэтому к предыдущей схеме потребуется добавить только дисплей с iic модулем. А в скетче следует расскомментировать соответствующую строку. После внесения правок в схему и программу — загрузите следующий скетч в микроконтроллер.

Скетч. Часы с экраном LCD 1602 и DS1302

Пояснения к коду:

  1. в данном примере с помощью команды time.gettime(); можно выводить на текстовый экран текущее время и дату в разном формате.

При подключении экрана и модуля RTC к одной шине iic — порты SDA(A4) и SCL(A5), следует указать в скетче какой модуль используется. Схема подключения размещена выше, кроме того вы можете использовать сканер шины i2c для того, чтобы увидеть адреса устройств. Если адреса, которые установлены производителем по умолчанию вы не изменяли — соберите схему и загрузите следующий пример в плату.

Схема подключения DS1307 и LCD по i2c

Скетч. Часы с LCD 1602 и DS1302 I2C Arduino

Пояснения к коду:

  1. как видите, скетч отличается от предыдущего только одной строчкой

Библиотека RTC.h Arduino: описание команд

Для работы с модулями часов Ардуино, в библиотеке реализовано 5 функций:

begin(); // запуск модуля

settime(секунды, минуты, часы, день, месяц, год, день недели); // указать время
— год указывается без учета века, в формате 0-99
— часы указываются в 24-часовом формате, от 0 до 23
— день недели указывается в виде числа от 0-воскресенье, 6-суббота

gettime(«строка с параметрами»); // получить время
— gettime(«d-m-Y, H:i:s, D»); ответит строкой «12-06-2020, 18:30:05, Fri»
— gettime(«H»); ответит строкой «18»

функцией gettime можно получать различную информацию:

  • s — секунды от 00 до 59 (два знака)
  • i — минуты от 00 до 59 (два знака)
  • h — часы в 12-часовом формате от 01 до 12 (два знака)
  • H — часы в 24-часовом формате от 00 до 23 (два знака)
  • d — день месяца от 01 до 31 (два знака)
  • D — день недели наименование от Mon до Sun (три знака)
  • m — месяц от 01 до 12 (два знака)
  • M — месяц наименование от Jan до Dec (три знака)
  • Y — год от 2000 до 2099 (четыре знака)
  • y — год от 00 до 99 (два знака)

blinktime(параметр)
— указывает функции gettime мигать одним из параметров времени

period(минуты)
— устанавливает период обращения к модулю в минутах (от 0 до 255)

Заключение. В часы на Ардуино с дисплеем 1602 и DS1302 можно добавить функцию показа температуры и будильник. Данный модуль позволяет существенно расширить функции микроконтроллера, которые должны выполняться в определенное время суток. Если у вас возникли вопросы по сборке и программированию часов на Arduino с DS1302 и LCD дисплеем — оставляйте их в комментариях к записи.

Часы реального времени на RTC модулях Ардуино DS1302, DS1307, DS3231

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

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

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

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

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

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

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

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

Модуль 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 – вход для литиевой батареи.

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

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

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

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

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

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

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

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

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

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

Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция 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 подключаются к любым цифровым пинам на плате.

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

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

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

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

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

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

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

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

Заключение

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

Обзор часов реального времени DS1307 (RTC)

Автор: Сергей · Опубликовано 24.11.2016 · Обновлено 13.04.2020

DS1307 это небольшой модуль, предназначенный для подсчета времени. Собранный на базе микросхемы DS1307ZN с реализацией питания от литиевой батарейки (LIR2032), что позволяет работать автономно в течение длительного времени. Также на модуле, установлена энергонезависимая память EEPROM объемом 32 Кбайт (AT24C32). Микросхема AT24C32 и DS1307ZN связаны обшей шиной интерфейсом I2C.

Технические параметры

Напряжение питания: 5В
Рабочая температура: – 40℃ … + 85℃
Память: 56 байт (энергонезависимая)
Батарейка: LIR2032 (автоматическое определение источника питания)
Интерфейса: I2C
Габариты: 28мм х 25мм х 8 мм

Общие сведения

Использовании модуля DS1307 зачастую очень оправдано, например, когда данные считываются редко, интервалом более недели, использовать собственные ресурсы контроллера, неоправданно или невозможно. Обеспечивание бесперебойное питание, например платы Arduino, на длительный срок дорого, даже при использовании батареи.
Благодаря собственной памяти и автономностью, можно регистрировать события, (при автономном питании) например изменение температуры и так далее, данные сохраняются в памяти их можно считать из памяти модуля. Так что модуль DS1307 часто используют, когда контроллерам Arduino необходимо знать точное время, для запуска какого то события и так далее.

Обмен данными с другими устройствами осуществляется по интерфейсу I2C с выводов SCL и SDA. Конденсаторы С1 и С2 необходимы для снижения помех по линию питания. Чтобы обеспечить надлежащего уровня сигналов SCL и SDA установлены резисторы R2 и R3 (подтянуты к питанию). Для проверки работоспособности модуля, на вывод 7 микросхему DS1307Z, подается сигнал SQ, прямоугольной формы с частотой 1 Гц. Элементы R4, R5, R6, VD1 необходимы для подзарядку литиевой батарейки. Так же, на плате предусмотрено посадочное место (U1), для установки датчика температуры DS18B20 (при необходимости можно впаять его), считывать показания, можно с вывода DS, который подтянут к пиатнию, через резистор R1 сопротивлением 3.3 кОм. Принципиальную схему и назначение контактов можно посмотреть на рисунках ниже.

На плате расположено две группы контактов, шагом 2.54 мм, для удобного подключения к макетной плате, буду использовать штырьевые разъемы, их необходимо впаять.

Первая группа контактов:
DS: вывод DS18B20 (1-wire)
SCL: линия тактирования (Serial CLock)
SDA: линия данных (Serial Dфta)
VCC: «+» питание модуля
GND: «-» питание модуля

Вторая группа контактов:
SQ: вход 1 МГц
DS: вывод DS18B20 (1-wire)
SCL: линия тактирования (Serial CLock)
SDA: линия данных (Serial Dфta)
VCC: «+» питание модуля
GND:«-» питание модуля
BAT:

Подзарядка батареи
Как описывал ваше модуль может заряжать батарею, реализовано это, с помощью компонентов R4, R5, R6 и диода D1. Но, данная схема имеет недостаток, через резистор R4 и R6 происходит разряд батареи (как подметил пользователь ALEXEY, совсем не большой). Так как модуль потребляем незначительный ток, можно удалить цепь питания, для этого убираем R4, R5, R6 и VD1, вместо R6 поставим перемычку (после удаления компонентов, можно использовать обычную батарейку CR2032).

Подключение DS1307 к Arduino

Необходимые детали:
Arduino UNO R3 x 1 шт.
Провод DuPont, 2,54 мм, 20 см x 1 шт.
Кабель USB 2.0 A-B x 1 шт.
Часы реального времени RTC DS1307 x 1 шт.

Подключение:
Для подключения часы реального времени DS1307, необходимо впаять впаять штыревые разъемы в первую группу контактов. Далее, подключаем провода SCL (DS1307) к выводу 4 (Arduino UNO) и SDA (DS1307) к выводу 5 (Arduino UNO), осталось подключить питания VCC к +5V и GND к GND. Кстати, в различных платах Arduino вывода интерфейса I2C отличаются, назначение каждого можно посмотреть ниже.

Установка времени DS1307
Первым делом, необходимо скачать и установить библиотеку «DS1307RTC» и «TimeLib» в среду разработки IDE Arduino, далее необходимо настроить время, открываем пример из библиотеки DS1307RTC «Файл» —> «Примеры» —> «DS1307RTC» —> «SetTime» или копируем код снизу.