Часы реального времени на rtc модулях ардуино ds1302, ds1307, ds3231
Содержание
- 1 Режимы электропитания
- 2 Other functions
- 3 Wiring DS3231 RTC module to Arduino UNO
- 4 Код из видео:
- 5 DS3231 Real Time Clock
- 6 Как сделать время на DS3231 отличным от часов Pi
- 7 Общие сведения
- 8 Alarm functions
- 9 Объяснение работы проекта
- 10 Способ программирования Arduino для работы с DS1302
- 11 Functions for setting and reading the time
- 12 Enumerations
- 13 Расположение выводов DS3231
Режимы электропитания
Напряжение питания микросхемы может находиться в пределах 2,3…5,5В, имеются две линии питания, для внешнего источника (линия Vcc), а также для батареи (Vbat). Напряжение внешнего источника постоянно отслеживается, при падении ниже порога Vpf=2,5В, происходит переключение на линию батареи. В следующей таблице представлены условия переключения между линиями питания:
Комбинации уровней напряжения | Активная линия питания |
Vcc < Vpf, Vcc < Vbat | Vbat |
Vcc < Vpf, Vcc > Vbat | Vcc |
Vcc > Vpf, Vcc < Vbat | Vcc |
Vcc > Vpf, Vcc > Vbat | Vcc |
Точность хода часов поддерживается за счет отслеживания температуры окружающей среды. В микросхеме запускается внутренняя процедура корректировки частоты тактового генератора, величина корректировки определяется по специальному графику зависимости частоты от температуры. Процедура запускается после подачи питания, а затем выполняется каждые 64 секунды.
В целях сохранения заряда, при подключении батареи (подача напряжения на линию Vbat), тактовый генератор не запускается до тех пор, пока напряжение на линии Vcc не превысит пороговое значение Vpf, или не будет передан корректный адрес микросхемы по интерфейсу I2C. Время запуска тактового генератора составляет менее одной секунды. Примерно через 2 секунды после подачи питания (Vcc), или получения адреса по интерфейсу I2C, запускается процедура коррекции частоты. После того как тактовый генератор запустился, он продолжает функционировать до тех пор, пока присутствует напряжение Vcc или Vbat. При первом включении регистры даты и времени сброшены, и имеют следующие значения 01/01/ 00 – 01 – 00/00/00 (день/месяц/год/ – день недели – час/минуты/секунды).
Ток потребления при питании от батареи напряжением 3,63В, составляет 3 мкА, при отсутствии передачи данных по интерфейсу I2C. Максимальный ток потребления может достигать 300 мкА, в случае использования внешнего источника питания напряжением 5,5В, и высокой скорости передачи данных I2C.
Other functions
temperature(void)
Description
Returns the RTC temperature.
Parameters
None.
RTC temperature as degrees Celsius times four. (int)
int t = RTC.temperature(); float celsius = t / 4.0; float fahrenheit = celsius * 9.0 / 5.0 + 32.0;
squareWave(SQWAVE_FREQS_t freq)
Description
Enables or disables the square wave output.
Parameters
freq: a value from the SQWAVE_FREQS_t enumeration above. (SQWAVE_FREQS_t)
None.
RTC.squareWave(SQWAVE_1_HZ); //1 Hz square wave RTC.squareWave(SQWAVE_NONE); //no square wave
Description
Returns the value of the oscillator stop flag (OSF) bit in the control/status register which indicates that the oscillator is or was stopped, and that the timekeeping data may be invalid. Optionally clears the OSF bit depending on the argument passed. If the argument is omitted, the OSF bit is cleared by default. Calls to and also clear the OSF bit.
Parameters
clearOSF: an optional true or false value to indicate whether the OSF bit should be cleared (reset). If not supplied, a default value of true is used, resetting the OSF bit. (bool)
Wiring DS3231 RTC module to Arduino UNO
Let’s hook the RTC up to the Arduino.
Connections are fairly simple. Start by connecting VCC pin to the 5V output on the Arduino and connect GND to ground.
Now we are remaining with the pins that are used for I2C communication. Note that each Arduino Board has different I2C pins which should be connected accordingly. On the Arduino boards with the R3 layout, the SDA (data line) and SCL (clock line) are on the pin headers close to the AREF pin. They are also known as A5 (SCL) and A4 (SDA).
If you have a Mega, the pins are different! You’ll want to use digital 21 (SCL) and 20 (SDA). Refer below table for quick understanding.
SCL | SDA | |
Arduino Uno | A5 | A4 |
Arduino Nano | A5 | A4 |
Arduino Mega | 21 | 20 |
Leonardo/Micro | 3 | 2 |
The following diagram shows you how to wire everything.
Wiring DS3231 RTC module with Arduino
Код из видео:
#include <Wire.h> #include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t BigNumbers[]; ///// часы .. byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); } byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(0x68); Wire.write(0); Wire.write(decToBcd(second)); Wire.write(decToBcd(minute)); Wire.write(decToBcd(hour)); Wire.write(decToBcd(dayOfWeek)); Wire.write(decToBcd(dayOfMonth)); Wire.write(decToBcd(month)); Wire.write(decToBcd(year)); Wire.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(0x68); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(0x68, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } ///// температура .. float get3231Temp(){ byte tMSB, tLSB; float temp3231; Wire.beginTransmission(0x68); Wire.write(0x11); Wire.endTransmission(); Wire.requestFrom(0x68, 2); if(Wire.available()) { tMSB = Wire.read(); //2's complement int portion tLSB = Wire.read(); //fraction portion temp3231 = (tMSB & B01111111); //do 2's math on Tmsb temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8 } else { //oh noes, no data! } return temp3231; } void setup() { Serial.begin(9600); myOLED.begin(); Wire.begin(); /* // установка часов byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; second = 30; minute = 0; hour = 14; dayOfWeek = 3; // день недели dayOfMonth = 1; // день month = 4; year = 14; setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */ } void loop(){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; char week = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); char time; char data; snprintf(time, sizeof(time),"%02d:%02d:%02d", hour, minute, second); snprintf(data, sizeof(data), "%02d/%02d/%02d", dayOfMonth, month, year); myOLED.setFont(SmallFont); myOLED.print(time, LEFT, 0); myOLED.print(data, LEFT, 15); myOLED.printNumF(get3231Temp(), 2, LEFT, 30); myOLED.print("C", 32, 30); myOLED.update(); delay(1000); } ////// конец
DS3231 Real Time Clock
The DS3231 is a low-cost, highly accurate Real Time Clock which can maintain hours, minutes and seconds, as well as, day, month and year information. Also, it has automatic compensation for leap-years and for months with fewer than 31 days.
The module can work on either 3.3 or 5 V which makes it suitable for many development platforms or microcontrollers. The battery input is 3V and a typical CR2032 3V battery can power the module and maintain the information for more than a year.
The module uses the I2C Communication Protocol which makes the connection to the Arduino Board very easy.
Here’s the circuit schematics:
So all we need is 4 wires, the VCC and the GND pins for powering the module, and the two I2C communication pins, SDA and SCL.
You can get the components needed for this Arduino Tutorial from the links below:
- DS3231 Real Time Clock…………….. Amazon / Banggood
- Arduino Board …………………………… Amazon / Banggood
- Breadboard and Jump Wires ……… Amazon / Banggood
Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.
Как сделать время на DS3231 отличным от часов Pi
Чтобы аппаратные часы DS3231 показывали другое время в сравнении с часами Pi, мы можем использовать команду write_all().
«ds3231.write_all(seconds, minutes, hours, day, date, month, year, save_as_24h = True)»
Диапазон:
- seconds , #секунды
- minutes , #минуты
- hours , #часы
- day , #дни
- date , #дата
- month , #месяц
- year #год
Используем тот же код, что выше, но заменяем ds3231.now() на ds3231.write_all():
import time import SDL_DS3231 ds3231 = SDL_DS3231.SDL_DS3231(1, 0x68) ds3231.write_all(29,30,4,1,3,12,92,True) while True: print “Raspberry Pi=\t” + time.strftime(%Y-%m-%d %H:%M:%S”) print “Ds3231=\t\t%s” % ds3231.read_datetime() time.sleep(10.0)
Получаем:
Мы видим, что дата и время DS3231 изменились. Но так как этот проект должен использовать RTC на нашем Raspberry Pi, то нам нужно кое-что сделать еще.
Общие сведения
Использовании модуля DS1307 зачастую очень оправдано, например, когда данные считываются редко, интервалом более недели, использовать собственные ресурсы контроллера, неоправданно или невозможно. Обеспечивание бесперебойное питание, например платы Arduino, на длительный срок дорого, даже при использовании батареи.
Благодаря собственной памяти и автономностью, можно регистрировать события, (при автономном питании) например изменение температуры и так далее, данные сохраняются в памяти их можно считать из памяти модуля. Так что модуль DS1307 часто используют, когда контроллерам Arduino необходимо знать точное время, для запуска какого то события и так далее.
Обмен данными с другими устройствами осуществляется по интерфейсу I2C с выводов SCL и SDA. Конденсаторы С1 и С2 необходимы для снижения помех по линию питания. Чтобы обеспечить надлежащего уровня сигналов SCL и SDA установлены резисторы R2 и R3 (подтянуты к питанию). Для проверки работоспособности модуля, на вывод 7 микросхему DS1307Z, подается сигнал SQ, прямоугольной формы с частотой 1 Гц. Элементы R4, R5, R6, VD1 необходимы для подзарядку литиевой батарейки. Так же, на плате предусмотрено посадочное место (U1), для установки датчика температуры DS18B20 (при необходимости можно впаять его), считывать показания, можно с вывода DS, который подтянут к пиатнию, через резистор R1 сопротивлением 3.3 кОм. Принципиальную схему и назначение контактов можно посмотреть на рисунках ниже.
На плате расположено две группы контактов, шагом 2.54 мм, для удобного подключения к макетной плате, буду использовать штырьевые разъемы, их необходимо впаять.
Первая группа контактов:► DS: вывод DS18B20 (1-wire)► SCL: линия тактирования (Serial CLock)► SDA: линия данных (Serial Dфta)► VCC: «+» питание модуля► GND: «-» питание модуля
Вторая группа контактов:► SQ: вход 1 МГц► DS: вывод DS18B20 (1-wire)► SCL: линия тактирования (Serial CLock)► SDA: линия данных (Serial Dфta)► VCC: «+» питание модуля► GND:«-» питание модуля► BAT:
Подзарядка батареи
Как описывал ваше модуль может заряжать батарею, реализовано это, с помощью компонентов R4, R5, R6 и диода D1. Но, данная схема имеет недостаток, через резистор R4 и R6 происходит разряд батареи (как подметил пользователь ALEXEY, совсем не большой). Так как модуль потребляем незначительный ток, можно удалить цепь питания, для этого убираем R4, R5, R6 и VD1, вместо R6 поставим перемычку (после удаления компонентов, можно использовать обычную батарейку CR2032).
Alarm functions
The DS3232 and DS3231 have two alarms. Alarm1 can be set to seconds precision; Alarm2 can only be set to minutes precision.
setAlarm(ALARM_TYPES_t alarmType, byte seconds, byte minutes, byte hours, byte daydate)
Description
Set an alarm time. Sets the alarm registers only. To cause the INT pin to be asserted on alarm match, use alarmInterrupt(). This function can set either Alarm 1 or Alarm 2, depending on the value of alarmType (use the ALARM_TYPES_t enumeration above). When setting Alarm 2, the seconds value must be supplied but is ignored, recommend using zero. (Alarm 2 has no seconds register.)
alarmType: A value from the ALARM_TYPES_t enumeration, above. (ALARM_TYPES_t)seconds: The seconds value to set the alarm to. (byte)minutes: The minutes value to set the alarm to. (byte)hours: The hours value to set the alarm to. (byte)dayOrDate: The day of the week or the date of the month. For day of the week, use a value from the Time library timeDayOfWeek_t enumeration, i.e. dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday. (byte)
None.
//Set Alarm1 for 12:34:56 on Sunday RTC.setAlarm(ALM1_MATCH_DAY, 56, 34, 12, dowSunday);
setAlarm(ALARM_TYPES_t alarmType, byte minutes, byte hours, byte daydate)
Description
Set an alarm time. Sets the alarm registers only. To cause the INT pin to be asserted on alarm match, use alarmInterrupt(). This functiuon can set either Alarm 1 or Alarm 2, depending on the value of alarmType (use the ALARM_TYPES_t enumeration above). However, when using this function to set Alarm 1, the seconds value is set to zero. (Alarm 2 has no seconds register.)
alarmType: A value from the ALARM_TYPES_t enumeration, above. (ALARM_TYPES_t)minutes: The minutes value to set the alarm to. (byte)hours: The hours value to set the alarm to. (byte)dayOrDate: The day of the week or the date of the month. For day of the week, use a value from the Time library timeDayOfWeek_t enumeration, i.e. dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday. (byte)
None.
//Set Alarm2 for 12:34 on the 4th day of the month RTC.setAlarm(ALM2_MATCH_DATE, 34, 12, 4);
alarmInterrupt(byte alarmNumber, bool alarmEnabled)
Description
Enable or disable an alarm «interrupt». Note that this «interrupt» just causes the RTC’s INT pin to be asserted. To use this signal as an actual interrupt to (for example) a microcontroller, the RTC «interrupt» pin needs to be connected to the microcontroller and the microcontroller application firmware must properly configure the interrupt and also provide for handling it.
alarmNumber: The number of the alarm to enable or disable, ALARM_1 or ALARM_2 (byte)alarmEnabled: true or false (bool)
None.
RTC.alarmInterrupt(ALARM_1, true); //assert the INT pin when Alarm1 occurs. RTC.alarmInterrupt(ALARM_2, false); //disable Alarm2
Description
Tests whether an alarm has been triggered. If the alarm was triggered, returns true and resets the alarm flag in the RTC, else returns false.
Объяснение работы проекта
Работа нашего регистратора данных (логгера) на Arduino достаточно проста. После того как вы соберете всю схему и загрузите программу в плату Arduino значения даты, времени, температуры и влажности начнут сохраняться в файл на SD карте. Для того, чтобы задействовать PLX-DAQ для записи данных в лист Excel на вашем компьютере, вы должны выполнить следующую последовательность действий.
Шаг 1: Откройте файл “Plx-Daq Spreadsheet” который был создан на вашем рабочем столе во время установки этого программного обеспечения.
Шаг 2: Если Excel показывает вам ограничение на запись данных, то кликните Options->Enable the content -> Finish -> OK чтобы получить следующий экран.
Шаг 3: Выберите бодовую скорость “9600” на том последовательном порту, к которому подключена плата Arduino и нажмите на Connect. Ваши данные должны начать записываться как показано на следующем рисунке.
Вы можете оставить этот лист Excel открытым и смотреть как записываются данные. Те же самые данные в это же время записываются и на SD карту. Чтобы проверить это извлеките SD карту из собранного устройства и вставьте ее в ваш компьютер. Вы должны найти на ней файл “LoggerCD.txt”. Когда вы откроете его, он будет выглядеть примерно так, как показано на следующем рисунке:
Но в таком виде их трудно будет анализировать. Поэтому мы можем открыть этот файл в Excel в формате CSV (Comma separated values – данные, разделенные запятыми) чтобы сделать анализ этот данных более удобным. Чтобы открыть его в Excel выполните следующую последовательность действий:
- Откройте Excel. Кликните на File->Open и выберите “All file” в правом нижнем углу, затем выберите файл “LoggerCD” на вашей SD карте. Запустится мастер импорта текста.
- Кликните на “Next” и выберите запятую (comma) в качестве разделителя. Кликните на “Next” снова, затем на Finish.
- После этого ваши данные будут открыты в Excel файле как показано на следующем рисунке:
В этом проекте мы записываем данные каждые 5 секунд – но вы можете изменить это время на любое необходимое вам внеся небольшие изменения в программу.
Беспроводная регистрация данных (лог) с помощью Arduino
Если у вас все получилось, то вы можете внести ряд усовершенствований в этот проект. Просто подсоедините к плате Arduino Bluetooth устройство (например, модуль HC-05) и передавайте данные в программу PLX-DAQ при помощи технологии Bluetooth, а не по последовательному порту. В этом случае в программе вам необходимо заменить Serial.print(parameter); на BluetoothName.print(parameter); и соединить ваш компьютер/лэптоп к HC-05 по Bluetooth – для этого необходимо будет выбрать COM порт, к которому подсоединен Bluetooth на вашем компьютере/лэптопе. И все – ваш беспроводной логгер (регистратор) данных на основе Arduino будет готов.
Способ программирования Arduino для работы с DS1302
Обязательно нужно скачать действующую библиотеку из надёжных источников.
Библиотека позволяет считывать и записывать параметры реального времени. Небольшое описание я привожу ниже:
#include <iarduino_RTC.h> // Подключаем библиотеку.iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ ]] ); // Создаём объект.
Функция begin (); // Инициализация работы RTC модуля.
Функция settime ( СЕК ]]]]] ); // Установка времени.
Функция gettime ( ); // Чтение времени.
функция blinktime ( ПАРАМЕТР ); // Заставляет функцию gettime «мигать» указанным параметром времени.
функция period ( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах.
Переменная seconds // Возвращает секунды от 0 до 59.
Переменная minutes// Возвращает минуты от 0 до 59.
Переменная hours // Возвращает часы от 1 до 12.
Переменная Hours // Возвращает часы от 0 до 23.
Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm).
Переменная day // Возвращает день месяца от 1 до 31.
Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).
Переменная month // Возвращает месяц от 1 до 12.
Переменная year // Возвращает год от 0 до 99.
Пишем простенькую программу. Установка текущего времени в RTC модуль (DS1302):
Arduino
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,7,8); void setup() { delay(300); Serial.begin(9600); time.begin(); time.settime(0,51,21,27,10,15,2); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник } void loop(){ if(millis()%1000==0){ // если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»)); // выводим время delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iarduino_RTC.h> iarduino_RTCtime(RTC_DS1302,6,7,8); voidsetup(){ delay(300); Serial.begin(9600); time.begin(); time.settime(,51,21,27,10,15,2);// 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник } voidloop(){ if(millis()%1000==){// если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»));// выводим время delay(1);// приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } } |
Считываем текущее время с RTC модуля (DS1302) и выводим в «Последовательный порт» :
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,7,8); void setup() { delay(300); Serial.begin(9600); time.begin(); } void loop(){ if(millis()%1000==0){ // если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»)); // выводим время delay(1); // приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } }
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,7,8); voidsetup(){ delay(300); Serial.begin(9600); time.begin(); } voidloop(){ if(millis()%1000==){// если прошла 1 секунда Serial.println(time.gettime(«d-m-Y, H:i:s, D»));// выводим время delay(1);// приостанавливаем на 1 мс, чтоб не выводить время несколько раз за 1мс } } |
С вами на связи был я, Сёма. Пишите в комментах, подписывайтесь на новости, пишите письма.
Functions for setting and reading the time
get(void)
Description
Reads the current date and time from the RTC and returns it as a time_t value. Returns zero if an I2C error occurs (RTC not present, etc.).
None.
Current date and time (time_t)
Example
time_t myTime; myTime = RTC.get();
set(time_t t)
Description
Sets the RTC date and time to the given time_t value. Clears the oscillator stop flag (OSF) bit in the control/status register. See the function and also the DS323x datasheet for more information on the OSF bit.
t: The date and time to set the RTC to (time_t)
Example
//this example first sets the system time (maintained by the Time library) to //a hard-coded date and time, and then sets the RTC from the system time. //the setTime() function is part of the Time library. setTime(23, 31, 30, 13, 2, 2009); //set the system time to 23h31m30s on 13Feb2009 RTC.set(now()); //set the RTC from the system time
read(tmElements_t &tm)
Description
tm: Address of a tmElements_t structure to which the date and time are returned.
I2C status (byte). Returns zero if successful. The date and time read from the RTC are returned to the tm parameter.
Example
tmElements_t tm; RTC.read(tm); Serial.print(tm.Hour, DEC); Serial.print(':'); Serial.print(tm.Minute,DEC); Serial.print(':'); Serial.println(tm.Second,DEC);
Description
Sets the RTC to the date and time given by a tmElements_t structure. Clears the oscillator stop flag (OSF) bit in the control/status register. See the function and also the DS323x datasheet for more information on the OSF bit.
Example
tmElements_t tm; tm.Hour = 23; //set the tm structure to 23h31m30s on 13Feb2009 tm.Minute = 31; tm.Second = 30; tm.Day = 13; tm.Month = 2; tm.Year = 2009 - 1970; //tmElements_t.Year is the offset from 1970 RTC.write(tm); //set the RTC from the tm structure
Enumerations
SQWAVE_FREQS_t
Symbolic names used with the squareWave() function (described below).
- SQWAVE_NONE
- SQWAVE_1_HZ
- SQWAVE_1024_HZ
- SQWAVE_4096_HZ
- SQWAVE_8192_HZ
- ALM1_EVERY_SECOND — causes an alarm once per second.
- ALM1_MATCH_SECONDS — causes an alarm when the seconds match (i.e. once per minute).
- ALM1_MATCH_MINUTES — causes an alarm when the minutes and seconds match.
- ALM1_MATCH_HOURS — causes an alarm when the hours and minutes and seconds match.
- ALM1_MATCH_DATE — causes an alarm when the date of the month and hours and minutes and seconds match.
- ALM1_MATCH_DAY — causes an alarm when the day of the week and hours and minutes and seconds match.
- ALM2_EVERY_MINUTE — causes an alarm once per minute.
- ALM2_MATCH_MINUTES — causes an alarm when the minutes match (i.e. once per hour).
- ALM2_MATCH_HOURS — causes an alarm when the hours and minutes match.
- ALM2_MATCH_DATE — causes an alarm when the date of the month and hours and minutes match.
- ALM2_MATCH_DAY — causes an alarm when the day of the week and hours and minutes match.
Расположение выводов DS3231
№ | Имя | Функция |
---|---|---|
1 | 32kHz | Выход частоты 32768 Гц. Это выход с открытым стоком, который требует наличия внешнего верхнего подтягивающего резистора (pullup). Выход работает от любого имеющегося источника питания. Если не используется, то может оставаться не подключенным. |
2 | VCC | Основной источник питания. Этот вывод должен иметь подключенный развязывающий конденсатор емкостью 0.1..1.0 мкф. Если не используется, то подключается к земле (GND). |
3 | ~INT/SQW | Сигнал прерывания с активным низким уровнем, или выход частоты прямоугольного сигнала. Это выход с открытым стоком, который требует наличия внешнего верхнего подтягивающего резистора (pullup), подключенного к напряжению питания 5.5V или меньше. Режим работы этой ножки определяется битом INTCN регистра управления (Control Register, адрес 0Eh), и выводимая частота зависит от битов RS2 и RS1. Если вывод ~INT/SQW не используется, то может оставаться не подключенным. |
4 | ~RST | Сброс с активным уровнем лог. 0. Этот вывод имеет открытый сток, и работает как вход и как выход. Уровень показывает соответствие напряжения питания VCC допустимому пределу VPF. Как только VCC упадет ниже VPF, на выводе ~RST появится лог. 0. Когда VCC превысит VPF, то через интервал tRST на выводе ~RST с помощью pullup резистора появится уровень лог. 1. С активным уровнем лог. 0 выход с открытым стоком скомбинирован с функцией входа, подавляющей дребезг контактов кнопки. Этот вывод может быть активирован запросом сброса, выданным с помощью внешней кнопки. Вывод ~RST имеет внутренний pullup резистор номиналом 50 кОм, подключенный к VCC. Внешний подтягивающий резистор подключаться не должен. Если генератор запрещен, то интервал времени tREC пропускается, и уровень ~RST немедленно перейдет к лог. 1. |
5..12 | N.C. | Нет соединения. Эти выводы должны быть подключены к земле (GND). |
13 | GND | Земля, общий провод для напряжений питания и всех сигналов. |
14 | VBAT | Вход для подключения резервного источника питания (обычно это литиевая батарейка на 3V). Если вывод VBAT используется как основной источник питания, то он должен иметь подключенный развязывающий конденсатор емкостью 0.1..1.0 мкф, имеющий малый ток утечки. Когда в VBAT используется как резервный источник питания, то этот конденсатор не нужен. Если VBAT не используется, то подключите его к земле (GND). |
15 | SDA | Данные интерфейса I2C. Выход вывода имеет открытый сток, поэтому необходим внешний верхний подтягивающий резистор (pullup). Подтягивающее напряжение может иметь уровень до 5.5V, независимо от уровня напряжения питания VCC. |
16 | SCL | Такты интерфейса I2C. Напряжение на входе SCL может иметь уровень до 5.5V, независимо от уровня напряжения питания VCC. |