Модуль DS3231 RTC

Содержание

DS3231 RTC Module

DS3231 — микросхема часов реального времени I²C со встроенным термокомпенсированным кварцевым генератором (TCXO), резервным питанием, двумя будильниками и программируемым меандром. Фиксированный адрес I²C — 0x68. Точность микросхемы: ±2 ppm при 0…+40 °C и ±3,5 ppm при −40…+85 °C; EEPROM, светодиод, стабилизатор и зарядная схема на модуле не входят в DS3231.

Что такое модуль RTC DS3231?

Модуль DS3231 RTC — это популярный модуль реального времени (RTC), который широко используется в электронных проектах. Это небольшое недорогое устройство, обеспечивающее точные функции хронометража и календаря. Модуль DS3231 RTC основан на чипе DS3231, который представляет собой чрезвычайно точный RTC со встроенным кварцевым генератором с температурной компенсацией. Он способен предоставлять информацию о времени и дате с точностью до ±2 ppm.

Модуль DS3231 RTC широко используется в таких приложениях, как регистрация данных, временные метки и системы сигнализации. Он также часто используется в электронных устройствах, требующих точного отсчета времени, таких как камеры, аудиорекордеры и промышленные контроллеры. Модуль прост в использовании и может подключаться к микроконтроллерам, таким как Arduino и Raspberry Pi.

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

Параметры модуля RTC DS3231

Параметр DS3231Значение datasheet
Основное питание2,3–5,5 В
Резервный вход2,3–5,5 В
Адрес RTCфиксированный 0x68
Скорость I²Cдо 400 кГц
Точность±2 ppm (0…+40 °C); ±3,5 ppm (−40…+85 °C)
Температурный выход±3 °C
Функциидва будильника; меандр; високосный год до 2100
Зависит от модуляразмеры, AT24C32, LED, стабилизатор и зарядная схема различаются

Структура микросхемы часов DS3231

Часовой чип DS3231 состоит из восьми модулей, разделенных на четыре функциональные группы: TCXO, управление питанием, кнопка сброса и RTC.

DS3231 RTC Chip Schematic Diagram
DS3231 RTC Chip Schematic Diagram

DS3231 TCXO

TCXO включает в себя датчик температуры, генератор и логику управления. Контроллер считывает выходные данные датчика температуры на микросхеме, использует таблицу поиска для определения требуемой емкости, добавляет поправку на старение из регистра AGE, а затем устанавливает регистр выбора емкости. Новые значения, включая изменения в регистре AGE, загружаются только при изменении температуры или по завершении инициированного пользователем преобразования температуры. Значение температуры считывается при включении питания VCC, а затем каждые 64 секунды.

Управление питанием DS3231

Опорный источник и компаратор контролируют VCC. Ниже порога сбоя доступ блокируется, ход часов переключается на VBAT, а RST становится низким. При первом подключении только VBAT генератор ждёт подачи VCC или записи допустимого адреса I²C; после событий питания проверяйте Oscillator Stop Flag.

Кнопка сброса DS3231

DS3231 имеет функцию кнопочного переключателя, подключенную к выводу RST. Если DS3231 не находится в цикле сброса, он непрерывно контролирует нисходящий фронт сигнала RST. При обнаружении перехода фронта DS3231 завершает дебаунсинг переключателя, опуская RST вниз. После истечения времени внутреннего таймера DS3231 продолжает контролировать сигнал RST. Если сигнал остается на низком уровне, DS3231 продолжает контролировать сигнальную линию для обнаружения нарастающего фронта. Как только кнопка отпускается, DS3231 принудительно устанавливает RST в низкий уровень и поддерживает tRST. RST также может использоваться для индикации сигналов тревоги о сбое питания. Когда VCC ниже VPF, генерируется внутренний сигнал тревоги о сбое питания, и RST переводится в низкий уровень. Если генератор не работает при нагрузке VCC, tREC пропускается, и RST немедленно переходит в высокий уровень.

DS3231 Часы и календарь RTC

Информацию о часах и календаре можно получить, прочитав соответствующие байты регистра. Данные часов и календаря можно установить или инициализировать, записав соответствующие байты регистра. Содержимое регистров часов и календаря представлено в двоично-десятичном кодированном формате (BCD). DS3231 работает в 12-часовом или 24-часовом режиме. Шестой бит регистра часов определяет выбор 12-часового или 24-часового режима. Когда этот бит имеет высокий уровень, выбирается 12-часовой режим. В 12-часовом режиме пятый бит является битом индикатора AM/PM, который имеет высокий логический уровень для PM.

Внутренние регистры и функции DS3231

Адреса регистров DS3231 — 00h~12h, которые используются для хранения секунд, минут, часов, недель, дат и информации о настройках будильника соответственно. При многобайтовом доступе, если адрес достигает 12h в конце пространства ОЗУ, происходит перемотка. В это время происходит переход в начальную позицию, которая является единицей 00h.

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

Информация о времени считывается из этих вспомогательных регистров, и часы продолжают работать в это время, так что можно избежать повторного считывания регистров, когда обновление главного регистра происходит во время операции чтения. На примере регистра управления (адрес 0EH) можно управлять часами реального времени, будильником и выходом прямоугольных импульсов.

Схема выводов DS3231

DS3231 Pin Diagram
DS3231 Pin Diagram
Название пинаФункция
32 kHzВыход частоты 32 кГц
VCCИспользуется для пина постоянного тока основного источника питания
/INT/SQWПрерывание с активным низким уровнем или выход прямоугольного сигнала
RSTПин сброса (Reset)
N.C.Означает отсутствие подключения; внешне должен быть заземлен
GNDЗемля (Общий)
VBATВход резервного питания
SDAПоследовательный вход и выход данных
SCLПоследовательный вход тактового сигнала

Блок-схема DS3231

DS3231 Block Diagram
DS3231 Block Diagram

Программирование модуля RTC DS3231 с Arduino Uno

Необходимые инструменты:

  • Arduino Uno x1
  • Модуль RTC DS3231 x1
  • Перемычка (линия DuPont)

Инструкции по подключению

Connect DS3231 RTC Module with Arduino Uno
Пин на модуле RTC DS3231Пин на Arduino Uno
SCLA5
SDAA4
VCC5V
GNDGND

Установка библиотеки RTClib

В этом примере используется библиотека RTClib, написанная Adafruit. Сначала установите эту библиотеку.

Проект — Загрузить библиотеки — Управление библиотеками — Введите «RTClib» в поле поиска.

Программирование DS3231

Сначала необходимо загрузить только что установленную библиотеку RTClib.

				
					#include "RTClib.h"
				
			

После этого вы можете создать экземпляр DS3231 с именем rtc и вызвать функцию RTC_DS3231.

				
					RTC_DS3231 rtc;
				
			

Для настройки времени используются функции rtc.adjust, например:

				
					rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
				
			

Он используется для rtc.now() получения времени DS3231, и возвращаемые данные имеют тип DateTime, который содержит данные года, месяца, дня, часа, минуты и секунды, например:

				
					DateTime now = rtc.now();

  // Display the current time of DS3231 through the serial port output
  Serial.print(now.year(), DEC); // display the year in decimal
  Serial. print('/');
  Serial.print(now.month(), DEC);// Display the month in decimal
  Serial. print('/');
  Serial.print(now.day(), DEC);// Display the day in decimal
  Serial. print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial. print(") ");
  Serial.print(now.hour(), DEC);// display in decimal
  Serial. print(':');
  Serial.print(now.minute(), DEC);// Display minutes in decimal
  Serial. print(':');
  Serial.print(now.second(), DEC);// Display seconds in decimal
  Serial. println();
				
			

Полный код программы

				
					// by lingshunlab.com

// Load the library of DS3231
#include "RTClib.h"

// create rtc instance
RTC_DS3231 rtc;

String input_string; // Declare the variable input_string to store the data input by the serial port

// Declare a two-dimensional array variable daysOfTheWeek, which is used to match the corresponding week name through the index (index) of the array
char daysOfTheWeek[7][12] = {"Sunday",
                              "Monday",
                              "Tuesday",
                              "Wednesday",
                              "Thursday",
                              "Friday",
                              "Saturday"};

// get serial port data function
void GetSerialStuff(String& input_string) {
   String temp_string = ""; // Declare the variable temp_string to temporarily store the data input by the serial port
   while(Serial.available()) { // When the serial port has data, loop execution
     temp_string += (char)Serial.read(); // Combine the read serial data into the inStr variable one by one
     delay(2);
   }
   input_string = temp_string; // Assign the reference pointer variable to tempStr
}

void setup() {
   Serial.begin(9600);

   // Initialize rtc,
   if (! rtc.begin()) { // If initialization fails, then
     Serial.println("Couldn't find RTC");
     Serial. flush();
     abort(); // program stops
   }
}

void loop() {

   GetSerialStuff(input_string); // Get the data of the serial port
   if(input_string != "") { // If the serial port is not empty, then
     int to_year = input_string.substring(0, 4).toInt(); // Intercept year data from string and convert to int data type
     int to_month = input_string.substring(5, 7).toInt(); // Intercept the month data from the string and convert it to int data type
     int to_day = input_string.substring(8, 10).toInt(); // Intercept the day data from the string and convert it to int data type
     int to_hours = input_string.substring(11, 13).toInt(); // Intercept the hour data from the string and convert it to int data type
     int to_minute = input_string.substring(14, 16).toInt(); // Intercept minute data from the string and convert it to int data type
     int to_second = input_string.substring(17, 19).toInt(); // Intercept the second data from the string and convert it to int data type

     // Reset the time of the DS3231 module
     rtc.adjust(DateTime(to_year, to_month, to_day, to_hours, to_minute, to_second));
     delay(100);
   }

   // Get the time of DS3231
   DateTime now = rtc.now();

   // Display the current time of DS3231 through the serial port output
   Serial.print(now.year(), DEC); // display the year in decimal
   Serial. print('/');
   Serial.print(now.month(), DEC);// Display the month in decimal
   Serial. print('/');
   Serial.print(now.day(), DEC);// Display the day in decimal
   Serial. print(" (");
   Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
   Serial. print(") ");
   Serial.print(now.hour(), DEC);// display in decimal
   Serial. print(':');
   Serial.print(now.minute(), DEC);// Display minutes in decimal
   Serial. print(':');
   Serial.print(now.second(), DEC);// Display seconds in decimal
   Serial. println();

   // Display the temperature sensor data of DS3231 through the serial port output
   Serial. print("Temperature: ");
   Serial.print(rtc.getTemperature());
   Serial. println("C");

   delay(1000);
}
				
			

DS3231 Применение

  • Системы сбора данных
  • Промышленные системы управления
  • Резервное питание от аккумулятора
  • Контроль температуры
  • Системы контроля доступа
  • Медицинские устройства

Встроенные заметки интеграции для модуля DS3231 RTC

Проверка модуля: уточните его схему, подтяжки I²C, логическое напряжение, тип батареи и наличие зарядной цепи. AT24C32, размеры, LED и зарядные компоненты зависят от платы и не являются частью DS3231. Для RTC используйте 0x68, добавленную EEPROM ищите отдельно. Источники: Analog Devices DS3231, datasheet Rev. 10 и руководство Adafruit.

Об авторе

Picture of Aidan Taylor
Aidan Taylor

Я Эйдан Тейлор, и у меня более 10 лет опыта работы в области реверс-инжиниринга печатных плат, дизайна печатных плат и разблокировки IC.

Поделиться

Рекомендуемый пост

Tags

Нужна помощь?

Прокрутить вверх

Instant Quote

Мгновенный расчет