Каталог товаров

Часы реального времени RTC DS3231 с чипом памяти AT24C32

Цена:

180 р.
Уже в корзине
Код товара: 10258
Оригинальное название:
DS3231 Real Time Clock with AT24C32 Memory Chip I2C Interface

Описание товара

Модуль часов реального времени RTC DS3231 с микросхемой памяти AT24C32

Что же такое часы реального времени (RTC) и для чего они нужны, известно многим, кто успел хоть немного пообщаться с микроконтроллерными платами Arduino или аналогичными платформами на не менее популярных вычислительных процессорах. Часы реально времени представляют собой источник хронометрических данных и способны вести непрерывный отсчёт времени и даты от значений, предварительно настроенных пользователем. Продолжительная работоспособность большинства (а может и всех) микросхем часов реального времени основана на автономном питании, косвенно связанного или вообще никак не привязанного к источнику напряжения основной схемы устройства. Иными словами, модули с часами реального времени продолжают работать даже в том случае, когда главная схема электронного устройства полностью обесточена. Источником резервного питания в таких модулях RTC, как правило, служат обычные или перезаряжаемые аккумуляторные батареи. Микросхемы часов отличаются друг от друга лишь техническим исполнением и точностью хода, в остальном их возможности очень похожи.

Зачастую, знакомство с миром микроконтроллеров начинается с первых практических уроков по сборке и программированию несложных настольных или настенных электронных часов-будильников. А дальше, как говориться, только больше. Фантазия разработчиков простых или многозадачных приложений помогает находить применение часам реального времени в более сложных устройствах, алгоритм которых тесно связан с временными показателями.

Микросхемы часов реального времени можно смело называть экономными помощниками. Благодаря им, освобождаются ресурсы вычислительного процессора, которые потребовались бы для самостоятельного подсчёта временных отрезков. Здесь ещё важно понимать, что отключение источника питания от устройства неизбежно приводит к принудительной остановке выполнения заложенной программы, включая собственный механизм учёта временных промежутков. Добавление модулей RTC в схемы устройств с определёнными задачами может оказаться неоднократно оправдано. С помощью часов RTC, устройства могут беспрепятственно находится во всевозможных энергосберегающих режимах и выполнять ряд необходимых операций, пробуждаясь в установленное время, с учётом дня недели, календарного числа или месяца.

Технические характеристики

  • Питание модуля: 3.3-5 В
  • Максимальный ток: 21.5 мА
  • Микросхема RTC: DS3231SN
  • Хронологическая точность хода
    • ± 63 сек в год при 0С до +40С
    • ± 110 сек в год при -40С до +85С
  • Календарь до 2100 года
  • Отсчет даты: год, месяц, число в месяце, день недели, час, минута, секунда
  • Автоматическая коррекция: 31 число, високосный год
  • Поддерживаемый формат времени: 12-часовой, 24-часовой
  • Два программируемых будильника
  • Встроенный кварцевый генератор 32кГц с температурной компенсацией
  • Элемент питания RTC: аккумулятор 2032 или батарея CR2032
  • Микросхема памяти EEPROM: ATHYC532, аналогичная AT24C32 Atmel или MicroChip
  • Размер памяти EEPROM: 4 КБайт (32.768 Кбит)
  • Интерфейс передачи: I2C (с частотой до 400 кГц)
  • Встроенный индикатор наличия питания
  • Размеры: 40 х 22 мм
  • Модель: HW-84/ZS-042

Микросхема часов реального времени DS3231 прославилась среди пользователей своей высокой точностью хода и малой стоимостью. Добиться значимой точности помогла технология температурной компенсации интегрированного кварцевого генератора с плавающей частотой 32кГц. Суть технологии заключается в дополнительной интеграции на кристалл DS3231 датчика температуры, контроллера и управляющей логики. Контроллер считывает показания температурного датчика, использует справочные данные для сравнения и корректирует регистры. В свою очередь, управляемая контроллером логика снижает или повышает частоту генератора. DS3231 содержит часы с 24-часовым или 12-часовым форматом и индикатором AM/PM, указывающим на дополуденную/послеполуденную половину суток. В микросхеме часов RTC присутствует календарь до 2100 года и два программируемых на 31 день будильника. Программная связь с DS3231 построена на передаче/приёме данных по протоколу I2C, адрес чипа RTC - 0х068h.

Резервная батарея модуля с часами RTC DS3231

Наиболее важный момент конструкции модуля DS3231 заключается в наличии упрощённой схемы подзаряда резервной аккумуляторной батареи типоразмера 2032 от цепи питающего напряжения, состоящей всего из пары последовательно соединённых элементов — диода 1N4148 и сопротивления 200 Ом. Подзаряд аккумулятора напряжением 4.2 В происходит постоянно, пока часы RTC подключены к общему питанию. Уровень заряженности батареи не контролируется. В случае установки в пластиковый отсек держателя элемента питания одноразовой неперезаряжаемой батареи CR2032, напряжение подзаряда может привести к преждевременной её порче. Настоятельно рекомендуется избавиться от этой функции путём перерезания дорожек или отпайки элементов, если предполагается частое использование модуля RTC.

Элементы цепи заряда батареи  

Питание модуля DS3231 RTC

Полноценная работа модуля допускается в диапазоне напряжений от 2.7 В до 5.5 В. При условии пониженного питания, схема подзаряда аккумуляторной батареи не будет функционировать должным образом. Чип DS3231 оснащён интегрированным компаратором, сравнивающим напряжение цепей основного и резервного питания. Переключение на вспомогательную батарею происходит при одном единственном условии, когда основное напряжение в цепи питания опускается ниже предустановленной в DS3231 контрольной точки 2.6 В (может варьироваться в пределе 2.45-2.7 В) и ниже уровня заряда батареи. Следует учитывать, что DS3132 имеет свою собственную нижнюю границу рабочего напряжения от прямого или резервного источника, равную 2.3 В. Напряжение с меньшим потенциалом останавливает DS3231 с потерей всех данных. При этом, встроенная память 24C32 поддерживает дееспособность до порогового значения в 1.8 В.

Встроенная память AT24C32

Модуль RTC располагает микросхемой энергонезависимой памяти EEPROM размером 4 Кбайт (4096 х 8 бит). На аппаратном уровне, она никоим образом не зависит от работы микросхемы часов реального времени и предназначена для записи/хранения пользовательских настроек приложения или произвольных данных. Аналогично DS3231SN, связь между чипом памяти и управляющим контроллером организована на шине последовательной связи I2C/IIC. Три нераспаянные перемычки А0, А1 и А2, расположенные рядом с чипом AT24C32, позволяют присваивать новый I2C-адрес (по умолчанию 0х57h) в восьми возможных комбинациях. Соответствующие контакты микросхемы подтянуты к питанию, формируя на их входе логическую единицу. Запаянная перемычка на площадках А0, А1 и А2 стягивает напряжение контактов к нулю, инвертируя логическое состояние.

Группы контактов, назначение

По бокам платы разведены две группы контактов, одна сторона с припаянными ножками, другая без. Если обратиться к принципиальной схеме, то из неё видно, что выводы с идентичными названиями VCC, GND, SDA и SCL запаралеллены, подключение основного питания и двухпроводной шины I2C к любой из сторон возымеет одинаковый эффект. А также присутствуют выводы 32K и SQW.

  • 32K — Импульсный сигнал с постоянной частотой 32 кГц. Если контакт не используется, его можно не подключать.
  • SQW — Низкоуровневое прерывание или импульсный сигнал с программируемой частотой 1 Гц, 1.024 кГц, 4.096 кГц, 8.192 кГц. Если контакт не используется, его можно не подключать.
  • SDA — Линия передачи данных последовательной шины I2C
  • SCL — Линия синхронизации последовательной шины I2C
  • VCC — Рабочее напряжение модуля, плюсовая сторона напряжения
  • GND — Общий

Пользователю доступно произвольная настройка выхода SQW (INT/SQW). Мультизадачность вывода определяется статусным битом в регистре управления, принимающим значение логического нуля или единицы. Если бит установлен в 0, на контакт SQW выводится импульсный сигнал прямоугольной формы с заданной пользователем частотой 1 Гц - 8.192 кГц. Если бит установлен в 1, на контакт SQW передаётся низкоуровневый сигнал, образуемый совпадением между времясодержащими регистрами и сигнальными регистрами (если включены) по одному или нескольким значениям времени/дня/числа в месяце.

Установка будильников, сигнальные регистры

Внутренние индикаторы срабатывания будильников устанавливаются параметрами, задающими время (час, минута, секунда) и дату (день недели, число месяца), а также статусными битами "активен/неактивен" в сигнальных регистрах. В включенном состоянии, будильники предусматривают следующие режимы сигнализации:

Будильник 1   Будильник 2
  • Каждую секунду
  • Совпадение секунд
  • Совпадение минут и секунд
  • Совпадение часов, минут и секунд
  • Совпадение числа месяца, часов, минут и секунд
  • Совпадения дня недели, часов, минут и секунд
 
  • Каждую минуту (00 секунд)
  • Совпадение минут
  • Совпадение часов и минут
  • Совпадение числа месяца, часов и минут
  • Совпадения дня недели, часов и минут

 

Методы программирования

В качестве примера, представлен один из демонстрационных скетчей, взятый из состава ардуино-совместимой библиотеки DS3231. Загрузка библиотеки возможна из среды разработки Arduino IDE, в разделе "Полезные ссылки" и на страничке разработчика.

#include "DS3231.h"
#include "Wire.h"

// Создаем дочерний класс Clock, унаследованный от DS3231
DS3231 Clock;

byte Year;
byte Month;
byte Date;
byte DoW;
byte Hour;
byte Minute;
byte Second;

// Функция считывания входящих данных через последовательный порт.
// Входящие данные должны быть в формате YYMMDDwHHMMSS с закрывающим
// символом "x" в конце строки.
// YY - год (00-99), MM - месяц (01-12), DD - месяц (01-31)
// w - день недели (1-7), HH - часы (01-12/24), MM - минуты (00-59),
// SS - секунды (00-59)
void GetDateStuff(byte& Year, byte& Month, byte& Day, byte& DoW, 
		byte& Hour, byte& Minute, byte& Second) {

	boolean GotString = false;
	char InChar;
	byte Temp1, Temp2;
	char InString[20];

	byte j=0;
	while (!GotString) {
		if (Serial.available()) {
			InChar = Serial.read();
			InString[j] = InChar;
			j += 1;
			if (InChar == "x") { // Используйте апостроф вместо кавычек
				GotString = true;
			}
		}
	}
	Serial.println(InString);
	// Сначала считываем год
	Temp1 = (byte)InString[0] -48;
	Temp2 = (byte)InString[1] -48;
	Year = Temp1*10 + Temp2;
	// Затем месяц
	Temp1 = (byte)InString[2] -48;
	Temp2 = (byte)InString[3] -48;
	Month = Temp1*10 + Temp2;
	// Затем число месяца
	Temp1 = (byte)InString[4] -48;
	Temp2 = (byte)InString[5] -48;
	Day = Temp1*10 + Temp2;
	// Затем дент недели
	DoW = (byte)InString[6] - 48;		
	// Затем часы
	Temp1 = (byte)InString[7] -48;
	Temp2 = (byte)InString[8] -48;
	Hour = Temp1*10 + Temp2;
	// Затем минуты
	Temp1 = (byte)InString[9] -48;
	Temp2 = (byte)InString[10] -48;
	Minute = Temp1*10 + Temp2;
	// Затем секунды
	Temp1 = (byte)InString[11] -48;
	Temp2 = (byte)InString[12] -48;
	Second = Temp1*10 + Temp2;
}
void setup() {
	// Открываем последовательный порт
	Serial.begin(9600);

	// Устанавливаем связь по I2C интерфейсу
	Wire.begin();
}

void loop() {
	// Если через последовательный порт приходят новые данные,
	// записываем их новые значения в модуль RTC
	if (Serial.available()) {
		GetDateStuff(Year, Month, Date, DoW, Hour, Minute, Second);

		Clock.setClockMode(false);	// задаем 24-часовой формат
		//Clock.setClockMode(true);	// задаем 12-часовой формат

		Clock.setYear(Year);
		Clock.setMonth(Month);
		Clock.setDate(Date);
		Clock.setDoW(DoW);
		Clock.setHour(Hour);
		Clock.setMinute(Minute);
		Clock.setSecond(Second);

		// Тестиуем функции будильников
		// Настраиваем будильник A1 на 1 минуту позднее установленного
		// времени, с учетом текущего дня недели
		Clock.setA1Time(DoW, Hour, Minute+1, Second, 0x0, true, 
			false, false);
		// Настраиваем будильник A2 на две минуты позднее установленного
		// времени, с учетом текущего числа в месяце
		Clock.setA2Time(Date, Hour, Minute+2, 0x0, false, false, 
			false);
		// Включаем оба будильника на генерацию внешнего прерывания
		Clock.turnOnAlarm(1);
		Clock.turnOnAlarm(2);

	}
	delay(1000);
} 

Электрическая принципиальная схема модуля RTC DS3231

Электрическая принципиальная схема модуля RTC DS3231  

Техническая документация

  1. Часы реального времени RTC DS3231SN (англ., PDF)
  2. Память EEPROM 24C32 (англ., PDF)

Полезные ссылки

  1. Ардуино-совместимая библиотека DS3231 v1.0.2 (ZIP-архив)
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2021г https://compacttool.ru
Связаться с нами 8-495-752-55-22 zakaz@compacttool.ru