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

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

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

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

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

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

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

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

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

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

Принципиальная схема модуля DS1307 (RTC)

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

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

Первая группа контактов:
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 (RTC)

Подключение 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 отличаются, назначение каждого можно посмотреть ниже.

Подключение модуля 0S1307 к Arduino

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

  Скачать скетч

Загружаем данную скетч в контроллер Arduino (время берется с ОС), открываем «Мониторинг порта»

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

Программа
В библиотеке есть еще один пример, открыть его можно  DS1307RTC «Файл» —> «Примеры» —> «DS1307RTC» —> «ReadTest»

  Скачать скетч

Загружаем данную код в контроллер Arduino, открываем «Мониторинг порта»

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

Ссылки
  Библиотека libraries-DS1307RTC
  Библиотека libraries-TimeLib

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Часы реального времени RTC DS1307

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Часы реального времени RTC DS1307

29 комментариев для “Обзор часов реального времени DS1307 (RTC)

  1. обзор конечно хороший, но: 1.пожалуйста, исправьте ошибки в тексте, их слишком много. 2. не трогайте цепь зарядки батарейки. на делителе напряжения R4,R6 ток 2 микроАмпера, емкость батарейки 220 милиАмпер/час. посчитайте сколько нужно времени, чтобы разрядить батарейку при таком токе.

    1. Наличие цепи заряда аккумулятора понятно, с батарейкой его надо удалять. А вот насчет делителя R6R4 — его тоже нужно убирать. И не из-за дополнительного тока, а из-за ограничений по напряжению на входе Vbat — оно д.б. по паспорту 2.5-3.5 В. Т.е. если батарея подсядет с номинальных 3.3 до 3 В, чип начнет глючить, по крайней мере точность хода пострадает.

  2. Очень помог обзор. А нет ли материалов по записи данных в память этих часов?

      1. Каких материалов нет?
        Всё есть в даташите.
        Или требуется, как для одноклеточных, прямо код для ардуино?

  3. Спасибо за обзор! К ардуино такого зверя подключил, а вот к node mcu v3 никак не получается. Он его просто не видит. Ни одна библиотека не видит. Подключаю к ногам d4 и d5 — как по инструкции, но ничего не выходит. Может сталкивались?

  4. Подскажите пожалуйста как сделать чтобы реле включалось каждые 18:00 . Помагите пожалусто.

  5. Здравствуйте, Сергей! Очень интересные обзоры.
    По часам есть такой вопрос, как использовать состояние часов, чтобы ардуино управлял другими устройствами (мотором) в нужное время?
    Спасибо.

  6. Здравствуйте, Сергей. Я новичок в Ардуино. Прочитал ваш обзор по DS1307, подключил модуль к Arduino UNO точно как вы описали в обзоре, скачал и подключил нужные библиотеки, скачал проверочные скетчи. Трансляция и загрузка скетчей происходит без замечаний. Но!!! Сообщение монитора: «DS1307 ERROR». У меня два одинаковых модуля DS1307. Они укомплектованы батарейками. Ведут себя оба идентично: «DS1307 ERROR».
    Что может быть??? Я с модулями обращался очень аккуратно. Чтобы сразу оба были неисправны?! Кстати, если батарейка вставлена, а на выводах модуля осциллографом нигде не наблюдаются импульсы, а только уровни — о чем это свидетельствует?
    Как проверить работоспособность модулей ? Буду вам очень благодарен и надеюсь на ответ. Петр.

    1. Здравствуйте, точно подсказать не смогу почему не работает. Проверьте подключения и провода, зачастую провода Dupoint бывают бракованные.

  7. Столкнулся тут на одном модуле с косяком. Плюс батареи по схеме через резистор R6 должен идти на 3й контакт(vbat) ds1307. Однако, туда он почему-то не идёт, а этот самый vbat замкнут на 8й контакт Vcc этой же микросхемы. Т.е. батарея из схемы исключена =).
    В итоге модуль не запоминает время при отключении от питания. Пришлось поднимать 3ю ногу и подавать на неё «+» с батареи отдельным проводом. Я не знаю, дефект это конкретного модуля или их целая партия таких кривых, но имейте это в виду.

  8. AT24C32 имеет объём не 32 Кбайт, а 4 Кбайта.
    «The AT24C32A/64A provides 32,768/65,536 bits of serial electrically erasable andprogrammable read only memory (EEPROM)»
    32,768 бит = 4096 байт = 4 КБ

  9. Смутила пара неточностей:
    цепь заряда используется с LIR2032 (это аккумулятор), а на фото CR2032 (это НЕперезаряжаемая батарея — она может взорваться при попытке её зарядить).

  10. Здравствуйте, не подскажите с каких пинов получить импульс (желательно минутный ), что бы каждую минуту получать импульс. Хочу подать импульс на дискретные входа, что бы древние механические часы работали от ПЛК, а время генерировалось от этой платки.

  11. Точность хода 1307 обычно составляет 2-3 с/сутки при комнатной температуре. Если сравнить 1307 с 3231, то там точность, конечно, выше, по паспорту около 0.5 с/сут. Кстати, максимальная погрешность 2ppm от частоты в 32 кГц — это уже более 1с/ сутки получается. Разница между ними не так уж и велика для большинства случаев, чтобы переплачивать за это в 5 раз. Для точных измерений все равно недостаточно. Кому надо точнее, нужно предусмотреть периодическую установку точного времени от ПК. Или использовать прецизионный кварцевый генератор.

    1. DS3231 как раз и содержит точный кварц и температурную стабилизацию.
      У меня часы на DS3231 в гараже за 4 года ушли на 3 секунды.
      Ни для 1302, ни для 1307 такой результат в условиях перепада температур в 50 градусов в принципе недостижим.
      Хотя для большинства применений 3231 действительно избыточна.

  12. Здравствуйте, вы пишете, что когда данные считываются редко, то RTC оправдано.
    А вот почему китайцы не сэкономили на RTC в наборе будильника на контроллере STM (3118AY-82)? Вроде и к нему кварц подключается. Тем более, что там DS1302 (в панельке) и часы заметно спешат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *