Модуль DS3231 (RTC, ZS-042) — представляет собой недорогую плату с чрезвычайно точными часами реального времени (RTC), с температурной компенсацией кварцевого генератора и кристалла. Модуль включает в себя литиевую батарею, которая поддерживает бесперебойную работу, даже при отключении источник питания. Интегрированный генератор улучшить точность устройства и позволил уменьшить количество компонентов.
Технические параметры
- Напряжение питания: 3.3В и 5В
- Чип памяти: AT24C32 (32 Кб)
- Точность: ± 0.432 сек в день
- Частота кварца:32.768 кГц
- Поддерживаемый протокол: I2C
- Габариты: 38мм x 22мм x 15мм
Общие сведения
Большинство микросхем, таких как DS1307 используют внешний кварцевый генератор частотой 32кГц, но в них есть существенный недостаток, при изменении температуры меняется частота кварца, что приводит к погрешности в подсчете времени. Эта проблема устранена в чипе DS3231, внутрь которого установили кварцевый генератор и датчик температуры, который компенсирует изменения температуры, так что время остается точным (при необходимости, данные температуры можно считать). Так же чип DS3231 поддерживает секунды, минуты, часы, день недели, дата, месяц и год информацию, а так же следит за количеством дней в месяце и делает поправку на високосный год. Поддерживает работу часов в двух форматов 24 и 12, а так-же возможно запрограммировать два будильника. Модуль работает по двух проводной шине I2C.
Теперь немного о самом модуле, построен он на микросхеме DS3231N. Резисторная сборка RP1 (4.7 кОм), необходима для подтяжки линий 32K, SQW, SCL и SDA (кстати, если используется несколько модулей с шиной I2C, необходимо выпаять подтягивающие резисторы на других модулях). Вторая сборка резисторов, необходима для подтяжки линий A0, A1 и A2, необходимы они для смены адресации микросхемы памяти AT24C32N. Резистор R5 и диод D1, служат для подзарядки батарее, в принципе их можно выпаять, так как обычной батарейки SR2032 хватает на годы. Так же установлена микросхема памяти AT24C32N, это как бы бонус, для работы часов RTC DS3231N в ней нет необходимости. Резистор R1 и светодиод Power, сигнализируют о включении модуля. Как и говорилось, модуль работает по шине I2C, для удобства эти шины были выведены на два разъема J1 и J2, назначение остальных контактов, можно посмотреть ниже.
Назначение J1:
- 32K: выход, частота 32 кГц
- SQW: выход
- SCL: линия тактирования (Serial CLock)
- SDA: линия данных (Serial Data)
- VCC: «+» питание модуля
- GND: «-» питание модуля
Назначение J2
- SCL: линия тактирования (Serial CLock)
- SDA: линия данных (Serial Data)
- VCC: «+» питание модуля
- GND: «-» питание модуля
Немного о микросхеме AT24C32N. Это микросхема с 32к памятью (EEPROM) от производителя Atmel, собранная в корпусе SOIC8, работающая по двухпроводной шине I2C. Адрес микросхемы 0x57, при необходимости легко меняется, с помощью перемычек A0, A1 и A2 (это позволяет увеличить количество подключенных микросхем AT24C32/64). Так как чип AT24C32N имеет, три адресных входа (A0, A1 и A2), которые могут находится в двух состояния, либо лог «1» или лог «0», микросхеме доступны восемь адресов. от 0x50 до 0x57
Подключение DS3231 к Arduino
Необходимые детали:
- Arduino NANO x 1 шт.
- Часы реального времени на DS3231, RTC, SPI, AT24C32 x 1 шт.
Подключение:
В данном примере буду использовать только модуль DS3231 и Arduino NANO, все данные будут передаваться в «Мониторинг порта». Схема не сложная, необходимо всего четыре провода, сначала подключаем шину I2C, SCL в A5 (Arduino NANO) и SDA в A4 (Arduino NANO), осталось подключить питание GND к GND и VCC к 5V (можно записать и от 3.3В), схема собрана, теперь надо подготовить программную часть.
Библиотеки работающий с DS3231 нет в среде разработке IDE Arduino, необходимо скачать «DS3231 » и добавить в среду разработки Arduino.
Установка времени DS3231
В сети есть библиотека microDS3231 от Gyver. Свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию microDS3231. Краткая документация находится по ссылке, базовые примеры есть в самой библиотеке.
Чтобы автоматически установить текущее время на модуле, можно прошить следующую программу:
#include <microDS3231.h>
MicroDS3231 rtc;
void setup() {
rtc.setTime(COMPILE_TIME);
}
void loop() {
}
Она установит дату и время, равное времени компиляции программы, то есть текущее. После этого можно работать с модулем, например выведем дату и время разными способами:
#include <microDS3231.h>
MicroDS3231 rtc;
void setup() {
Serial.begin(9600);
}
void loop() {
// получаем и выводим каждый элемент отдельно
Serial.print(rtc.getHours());
Serial.print(":");
Serial.print(rtc.getMinutes());
Serial.print(":");
Serial.print(rtc.getSeconds());
Serial.print(" ");
Serial.print(rtc.getDay());
Serial.print(" ");
Serial.print(rtc.getDate());
Serial.print("/");
Serial.print(rtc.getMonth());
Serial.print("/");
Serial.println(rtc.getYear());
// выводим температуру модуля
Serial.println(rtc.getTemperatureFloat());
// выводим дату и время готовыми строками
Serial.println(rtc.getTimeString());
Serial.println(rtc.getDateString());
}