Часы реального времени DS1307

Часы реального времени ds1307

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

Микросхема DS1307 позволяет вести отсчёт времени и даты с учётом високосного года, также дополнительно может выдавать на одном из выходов прямоугольный сигнал с частотой 8192, 4096 или 1 герц. С микроконтроллером микросхема взаимодействует по протоколу I2C. Этот чип требует минимальной внешней обвязки и любую батарейку в качестве источника питания.

Я использую готовый модуль в сборе, поскольку его стоимость невысокая, зато это избавляет от ручной работы по пайке мелких деталей. Модуль подключаем к плате Arduino четырьмя проводами − VCC, GND, SDA и SCL. Питание на плату подаём после подключения, а вот батарейку (в моём случае литиевая CR2032) в модуль нужно вставить заранее.

Первое включение и установка времени

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

#include <DS1307.h>
DS1307 rtc(SDA, SCL); Time t; void setup() { Serial.begin(115200); rtc.begin(); rtc.halt(false); rtc.setTime(12, 34, 56); rtc.setDate(21, 11, 2018); } void loop() { Serial.print(rtc.getDateStr()); Serial.print(", "); Serial.println(rtc.getTimeStr()); delay(1000); }

Загружаем прошивку в плату, запускаем монитор последовательного порта (при необходимости выбрав порт) и наблюдаем. Мы будем видеть следующую картину − отсчёт времени начался с указанного нами момента.

Часы реального времени ds1307 − начало отсчёта
Часы реального времени ds1307 − начало отсчёта

Проверка работы при отключении питания

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

Часы реального времени ds1307 − продолжение отсчёта после выключения
Часы реального времени ds1307 − продолжение отсчёта после выключения

Обратите внимание на дату/время. Если бы мы не закомментировали строки установки даты/времени, то при включении они были бы установлены заново и мы бы не увидели, что микросхема отсчитываем время.

Для эксперимента можно в функцию инициализации добавить перед установкой даты/времени следующие строки:

rtc.setSQWRate(0);
rtc.enableSQW(true);

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

Имеющийся у меня модуль отсчитывает время с ощутимой погрешностью − порядка 15-20 секунд в сутки. Причина − кварц не задаёт нужную частоту в 32768 герц. В советских часах на этот случай в цепь кварца включался подстроечный конденсатор, позволяющий менять частоту в небольших пределах, здесь нужно будет искать иной выход.

Комментарии:

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

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