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

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

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

Часы и календарь реального времени построены на базе микросхемы DS3231. Внутри микросхемы установлен кварцевый генератор и датчик температуры. Это необходимо для компенсации изменения температуры, из-за изменения которой точность может страдать. Модуль работает с секундами, минутами, часами, днями недели, датой, месяцами и годами, отслеживает количеством дней в месяце и делает поправку на високосный год. Возможно работать в 24-х и 12-ти часовом форматах.

Подключение

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

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

Чтобы начать работу с датчиком его необходимо подключить к микроконтроллеру. Для быстрого и надежного подключения используйте QuatroPort A050. Провод должен быть подключен к шилду в один из разъемов линии I2C, например в разъем №1 по схеме ниже.

Далее необходимо загрузить программу в микроконтроллер, предварительно скачав и установив библиотеку для работы с датчиком отсюда: https://github.com/rodan/ds3231 (папку с библиотекой необходимо переименовать в "DS3231" и поместить в папку Документы - Arduino - libraries). Как устанавливать библиотеки описано здесь: https://geegrow.ru/wiki/programming/libraries/

#include "DS3231.h"

DS3231  rtc(SDA, SCL);

void setup()
{
  
  Serial.begin(115200);
 
  while (!Serial) {}
  
  
  rtc.begin();
  
  // Эти строчки должны быть раскомменчены
  // для установки даты и времени 
  
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
}

void loop()
{
  // День недели
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Дата
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Время
  Serial.println(rtc.getTimeStr());
  
  delay (1000);
}