RTC Модуль - часы реального времени

Часы реального времени (real time clock) используются в системах, где важно продолжать отсчитывать время даже при отсутствии питания всей системы, например, на материнской плате персонального компьютера тоже имеется такой модуль отсчета времени со своим отдельным элементом питания. 

Принцип работы

Часы и календарь реального времени построены на базе микросхемы DS1307, с помощью которой можно узнать такую информацию как текущую секунду, минуту, час, день, дату, месяц, год. Обмен данными осуществляется по интерфейсу I2C. Кроме микросхемы на плате присутствует кварцевый резонатор, который задает частоту тактирования для микросхемы отсчета времени, а также слот и батарея 3V типа CR1225, что делает модуль энергонезависимым. Это означает, что если отключить всю систему от питания, микросхема будет продолжать отсчитывать время, поскольку у нее есть резервное питание - батарея 3V.

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

Логика работы с питанием:

- При наличии основного (Vcc = 5 В) и резервного (Vbat = 3 В) источника питания, модуль работает от основного источника питания
- При отсутствии резервного питания, модуль работает от основного источника питания
- При отсутствии основного питания, модуль работает от резервного (продолжает отсчитывать время, но не отвечает на запросы по шине I2C)
- При отсутствии основного и резервного питания, модуль отключается и все его регистры сбрасываются

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

Технические характеристики

Напряжение внешнего питания: 4.5-5.5 В
Напряжение питания батарейки: 2-3.5 В
Интерфейс: I²C
Резервное питание: CR1225
Размер платы: 36х22 мм

Подключение

Подключение модуля осуществляется с помощью разъема XH-2.54-4P, выводы которого имеют следующие назначения:

VCC — питание +5V
SCL — вывод интерфейса I2C (подсоединяется к одноименному порту)
SDA — вывод интерфейса I2C (подсоединяется к одноименному порту)
GND — земля (общий)

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру по схеме ниже. Для быстрого и надежного подключения используйте QuatroPort A050. 


Программа

Далее необходимо установить время и дату на модуле, откуда он будет вести отсчет. Для этого в микроконтроллер необходимо загрузить программу, которая передает текущие дату и время на часовую микросхему. Для работы с часами реального времени мы написали свою библиотеку, которую можно скачать отсюда: Как скачивать и устанавливать библиотеки описано в нашем разделе здесь: https://geegrow.ru/wiki/programming/libraries/manual-setup/lib-setup/.

Этот исходный код есть также в примерах к библиотеке.

// Подключаем шину I2C и библиотеку для работы с часами
#include "Wire.h"
#include "GeegrowRTC.h"

//Объявляем функцию RTC
RTC clock = RTC();

void setup() {
  // Открытие соединения на скорости 9600
  Serial.begin(9600);
  clock.begin();
  //Задаем мормат даты и устанавливаем точное время
  clock.setIsoTimestamp("2019-05-22 18:31:00"); //заменить на текущую дату и время
  clock.startClock();
}

void loop() {
  //Выводим дату и время на монитор порта
  char* stamp = clock.getIsoTimestamp(true);
  Serial.println(stamp);
  delay(1000);
}

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

clock.setIsoTimestamp("2019-05-22 18:31:00"); //заменить на текущую дату и время

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