Цена:
Модуль часов реального времени RTC DS3231 с микросхемой памяти AT24C32
Что же такое часы реального времени (RTC) и для чего они нужны, известно многим, кто успел хоть немного пообщаться с микроконтроллерными платами Arduino или аналогичными платформами на не менее популярных вычислительных процессорах. Часы реально времени представляют собой источник хронометрических данных и способны вести непрерывный отсчёт времени и даты от значений, предварительно настроенных пользователем. Продолжительная работоспособность большинства (а может и всех) микросхем часов реального времени основана на автономном питании, косвенно связанного или вообще никак не привязанного к источнику напряжения основной схемы устройства. Иными словами, модули с часами реального времени продолжают работать даже в том случае, когда главная схема электронного устройства полностью обесточена. Источником резервного питания в таких модулях RTC, как правило, служат обычные или перезаряжаемые аккумуляторные батареи. Микросхемы часов отличаются друг от друга лишь техническим исполнением и точностью хода, в остальном их возможности очень похожи.
Зачастую, знакомство с миром микроконтроллеров начинается с первых практических уроков по сборке и программированию несложных настольных или настенных электронных часов-будильников. А дальше, как говориться, только больше. Фантазия разработчиков простых или многозадачных приложений помогает находить применение часам реального времени в более сложных устройствах, алгоритм которых тесно связан с временными показателями.
Микросхемы часов реального времени можно смело называть экономными помощниками. Благодаря им, освобождаются ресурсы вычислительного процессора, которые потребовались бы для самостоятельного подсчёта временных отрезков. Здесь ещё важно понимать, что отключение источника питания от устройства неизбежно приводит к принудительной остановке выполнения заложенной программы, включая собственный механизм учёта временных промежутков. Добавление модулей RTC в схемы устройств с определёнными задачами может оказаться неоднократно оправдано. С помощью часов RTC, устройства могут беспрепятственно находится во всевозможных энергосберегающих режимах и выполнять ряд необходимых операций, пробуждаясь в установленное время, с учётом дня недели, календарного числа или месяца.
Технические характеристики
Микросхема часов реального времени 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.
Пользователю доступно произвольная настройка выхода SQW (INT/SQW). Мультизадачность вывода определяется статусным битом в регистре управления, принимающим значение логического нуля или единицы. Если бит установлен в 0, на контакт SQW выводится импульсный сигнал прямоугольной формы с заданной пользователем частотой 1 Гц - 8.192 кГц. Если бит установлен в 1, на контакт SQW передаётся низкоуровневый сигнал, образуемый совпадением между времясодержащими регистрами и сигнальными регистрами (если включены) по одному или нескольким значениям времени/дня/числа в месяце.
Установка будильников, сигнальные регистры
Внутренние индикаторы срабатывания будильников устанавливаются параметрами, задающими время (час, минута, секунда) и дату (день недели, число месяца), а также статусными битами "активен/неактивен" в сигнальных регистрах. В включенном состоянии, будильники предусматривают следующие режимы сигнализации:
Будильник 1 | Будильник 2 | |
|
|
Методы программирования
В качестве примера, представлен один из демонстрационных скетчей, взятый из состава ардуино-совместимой библиотеки 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
Техническая документация
Полезные ссылки
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru