Часы реального времени (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); }