Interface ds3231 precision rtc module with arduino
Содержание:
- Введение
- Шаг 2. Схема соединения
- Functions for reading and writing RTC registers or static RAM (SRAM) for the DS3232
- Режимы электропитания
- Onboard 24C32 EEPROM
- Режимы электропитания
- DS3231 RTC chip
- Other functions
- Использование модуля RTC и библиотеки
- Микросхема часов реального времени DS3231.
- Расположение выводов DS3231
Введение
Как микроконтроллеры отслеживают время и дату? Обычный микроконтроллер обладает функцией таймера, который стартует от нуля при подаче напряжения питания, а затем начинает считать. В мире Arduino мы можем использовать функцию , чтобы узнать, сколько прошло миллисекунд с того времени, когда было подано напряжение питания. Когда вы снимете и снова подадите питания, она начнет отсчет с самого начала. Это не очень удобно, когда дело доходит до работы с часами и датами.
Вот здесь и будет удобно использование микросхемы RTC (Real Time Clock, часов реального времени). Эта микросхема с батарейкой 3В или каким-либо другим источником питания следит за временем и датой. Часы/календарь обеспечивают информацию о секундах, минутах, часах, дне недели, дате, месяце и годе. Микросхема корректно работает с месяцами продолжительностью 30/31 день и с високосными годами. Связь осуществляется через шину I2C (шина I2C в данной статье не обсуждается).
Если напряжение на главной шине питания Vcc падает ниже напряжения на батарее Vbat, RTC автоматически переключается в режим низкого энергопотребления от резервной батареи. Резервная батарея – это обычно миниатюрная батарея (в виде «монетки», «таблетки») напряжением 3 вольта, подключенная между выводом 3 и корпусом. Таким образом, микросхема по-прежнему будет следить за временем и датой, и когда на основную схему будет подано питание, микроконтроллер получит текущие время и дату.
В этом проекте мы будем использовать DS1307. У этой микросхемы вывод 7 является выводом SQW/OUT (выходом прямоугольных импульсов). Вы можете использовать этот вывод для мигания светодиодом и оповещения микроконтроллера о необходимости фиксации времени. Мы будем делать и то, и другое. Ниже приведено объяснение работы с выводом SQW/OUT.
Для управления работой вывода SQW/OUT используется регистр управления DS1307.
Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|
OUT | SQWE | RS1 | RS0 |
- Бит 7: управление выходом (OUT)
- Этот бит управляет выходным уровнем вывода SQW/OUT, когда выход прямоугольных импульсов выключен. Если SQWE = 0, логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0, если OUT = 0. Первоначально обычно этот бит равен 0.
- Бит 4: включение прямоугольных импульсов (SQWE)
- Этот бит, когда установлен в логическую 1, включает выходной генератор. Частота прямоугольных импульсов зависит от значений битов RS0 и RS1. Когда частота прямоугольных импульсов настроена на значение 1 Гц, часовые регистры обновляются во время спада прямоугольного импульса. Первоначально обычно этот бит равен 0.
- Биты 1 и 0: выбор частоты (RS)
- Эти биты управляют частотой выходных прямоугольных импульсов, когда выход прямоугольных импульсов включен. Следующая таблица перечисляет частоты прямоугольных импульсов, которые могут быть выбраны с помощью данных битов. Первоначально обычно эти биты равны 1.
RS1 | RS0 | Частота импульсов и уровень на выходе SQW/OUT | SQWE | OUT |
---|---|---|---|---|
1 Гц | 1 | x | ||
1 | 4,096 кГц | 1 | x | |
1 | 8,192 кГц | 1 | x | |
1 | 1 | 32,768 кГц | 1 | x |
x | x | |||
x | x | 1 | 1 |
Данная таблица поможет вам с частотой:
Частота импульсов | Бит 7 | Бит 6 | Бит 5 | Бит 4 | Бит 3 | Бит 2 | Бит 1 | Бит 0 |
---|---|---|---|---|---|---|---|---|
1 Гц | 1 | |||||||
4,096 кГц | 1 | 1 | ||||||
8,192 кГц | 1 | 1 | ||||||
32,768 кГц | 1 | 1 | 1 |
Если вы подключили светодиод и резистор к выводу 7 и хотите, чтобы светодиод мигал с частотой 1 Гц, то должны записать в регистр управления значение 0b00010000. Если вам нужны импульсы 4,096 кГц, то вы должны записать 0b000100001. В этом случае, чтобы увидеть импульсы вам понадобится осциллограф, так как светодиод будет мигать так быстро, что будет казаться, что он светится постоянно. Мы будем использовать импульсы с частотой 1 Гц.
Шаг 2. Схема соединения
Принципиальная схема устройства будильника Arduino достаточно большая. Прежде всего, подключите OLED к Arduino. Соединения для OLED с Arduino следующие:
- CS-выход OLED на пин 10 Arduino
- DC-вывод OLED на пин 9 Arduino
- RST вывод OLED на вывод 8 Arduino
- D1 или CLK вывод OLED на вывод 11 Arduino
- D0 или DIN-штырь OLED на вывод 13 Arduino
Затем подключите модуль DS3231 к Arduino. Соединения следующие:
- Подключите GND DS3231 к GND Arduino.
- Подключите VCC DS3231 к 5V Arduino.
- Подключите SDA DS3231 к A4 Arduino.
- Подключите SCL DS3231 к A5 Arduino.
После этого подключите клавиатуру 4X4 к Arduino. Подключите первые 4 контакта клавиатуры, строка A0, A1, A2, A3 и последние четыре, которые относятся к контактам столбца к 6, 5, 4 и 3.
Подключите положительный контакт зуммера к контакту 7 Arduino и отрицательный сигнал зуммера к GND Arduino.
В конце, подключите положительный провод батареи к одному концу переключателя, а другой конец переключателя — к Vin Arduino.
Затем подключите отрицательный провод батареи к заземлению Arduino.
Functions for reading and writing RTC registers or static RAM (SRAM) for the DS3232
The DS3232RTC.h file defines symbolic names for the timekeeping, alarm, status and control registers. These can be used for the addr argument in the functions below.
writeRTC(byte addr, byte *values, byte nBytes)
Write one or more bytes to RTC memory.
Parameters
addr: First SRAM address to write (byte). The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library.
values: An array of values to write (*byte)nBytes: Number of bytes to write (byte). Must be between 1 and 31 (Wire library limitation) but is not checked by the library.
I2C status (byte). Returns zero if successful.
//write 1, 2, ..., 8 to the first eight DS3232 SRAM locations byte buf = {1, 2, 3, 4, 5, 6, 7, 8}; RTC.sramWrite(0x14, buf, 8);
writeRTC(byte addr, byte value)
Write a single byte to RTC memory.
Parameters
addr: SRAM address to write (byte). The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library.
value: Value to write (byte)
I2C status (byte). Returns zero if successful.
RTC.writeRTC(3, 14); //write the value 14 to SRAM address 3
readRTC(byte addr, byte *values, byte nBytes)
Read one or more bytes from RTC RAM.
Parameters
addr: First SRAM address to read (byte). The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library.
values: An array to receive the values read (*byte)nBytes: Number of bytes to read (byte). Must be between 1 and 32 (Wire library limitation) but is not checked by the library.
I2C status (byte). Returns zero if successful.
//read the last eight locations of SRAM into buf byte buf; RTC.sramRead(248, buf, 8);
Parameters
addr: SRAM address to read (byte). The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library.
Режимы электропитания
Напряжение питания микросхемы может находиться в пределах 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.
Onboard 24C32 EEPROM
DS3231 RTC module also comes with a 32 bytes 24C32 EEPROM chip from Atmel having unlimited read-write cycles. It can be used to save settings or really anything.
The 24C32 EEPROM uses I2C interface for communication and shares the same I2C bus as DS3231.
The I2C address of the EEPROM can be changed easily with the three A0, A1 and A2 solder jumpers at the back. Each one of these is used to hardcode in the address. If a jumper is shorted with solder, that sets the address.
As per the 24C32’s datasheet, these 3 bits are placed at the end of the 7-bit I2C address, just before the Read/Write bit.
As there are 3 address inputs, which can take 2 states, either HIGH/LOW, we can therefore create 8 (23) different combinations(addresses).
TIP
By default, all the 3 address inputs are pulled HIGH using onboard pullups, giving 24C32 a default I2C address of 1010111Binary or 0x57Hex.
By shorting the solder jumpers, the address inputs are puled LOW. It allows you to set the I2C address according to below table.
Code for reading/writing onboard 24C32 EEPROM is given at the .
Режимы электропитания
Напряжение питания микросхемы может находиться в пределах 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.
DS3231 RTC chip
At the heart of the module is a low-cost, extremely accurate RTC chip from Maxim – DS3231. It manages all timekeeping functions and features a simple two-wire I2C interface which can be easily interfaced with any microcontroller of your choice.
The chip maintains seconds, minutes, hours, day, date, month, and year information. The date at the end of the month is automatically adjusted for months with fewer than 31 days, including corrections for leap year (valid up to 2100).
The clock operates in either the 24-hour or 12-hour format with an AM/PM indicator. It also provides two programmable time-of-day alarms.
The other cool feature of this board comes with SQW pin, which outputs a nice square wave at either 1Hz, 4kHz, 8kHz or 32kHz and can be handled programmatically. This can further be used as an interrupt due to alarm condition in many time-based applications.
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)
Использование модуля RTC и библиотеки
Попробуем использовать RTC с использованием библиотеки SDL DS3231 (на нашем сайте можно скачать простую библиотеку DS3231).
Для версии Raspberry Pi Zero Lite или Headless нам может потребоваться установить Python, прежде чем двигаться дальше, поскольку он не включен в пакеты, установленные в Raspbian Lite.
По теме: Как написать и запустить код Python на Raspberry Pi
Установите Python на Pi.
$sudo apt-get install python-pip
$sudo apt-get install python3-pip
Затем установите git, чтобы мы могли клонировать библиотеку в git.
$sudo apt install git-all
Теперь клонируем библиотеку и проверяем, можем ли мы использовать RTC с библиотекой RTC_SDL_DS3231.
Для этого введите в терминал команду ниже:
$sudo git clone https://github.com/switchdoclabs/RTC_SDL_DS3231.git
Закончив клонирование, создайте Python файл — RTCmodule.py. Скопируйте код ниже и вставьте в пустой файл .py. Сохраните это.
import time import SDL_DS3231 ds3231 = SDL_DS3231.SDL_DS3231(1, 0x68) ds3231.write_now() 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.
Микросхема DS3231 выполнена в виде полностью законченного устройства, содержащего все необходимые элементы. На кристалле размещены непосредственно часы реального времени, генератор тактовой частоты и схема температурной компенсации. Такое решение позволило отказаться от дополнительных внешних радиодеталей, за исключением необходимых для реализации интерфейса I2C.
Генератор частоты в разных модификациях микросхем отличается по принципу работы. В корпусе DS3231 упакован классический кварцевый резонатор. Модификация DS3231M использует более продвинутую технологию MEMS-резонатора. Размещение генератора в корпусе прибора упростило конструирование пользовательских устройств, а благодаря температурной компенсации обеспечивается высокая точность хода. Модуль термокомпенсатора включает в себя термодатчик и управляемый температурой делитель частоты. Нестабильность хода часов DS3231 не превышает примерно 2 секунд за год в обычных условиях. При работе в области высоких или низких температур нестабильность оказывается в полтора раза выше. Для DS3231M нестабильность уменьшена примерно до 0.5 секунды за год. Также в схеме предусмотрена компенсация смещения частоты, вызываемого старением устройства.
Типовая схема включения DS3231 |
Часы DS3231 поддерживают работу с секундами, минутами, часами, днями, месяцами и годами. Максимальное значение года не может превышать 2100. Формат данных использует двоично-десятичное представление числа. Часы можно отображать в 12 или 24-часовом формате. В DS3231 реализовано две уставки сигнализации. Формат задания ограничен значением даты. Управление конкретным способом срабатывания ведется через значения старших битов регистра уставок.
Результаты измерения температуры доступны для пользователя. Точность термометра заявлена производителем на уровне 3 градусов. Результат измерений температуры представляется 10-битным числом с учетом знака. Период определения температуры составляет 64 секунды. Пользователь также может запросить преобразование в любой момент времени.
Расположение выводов DS3231 и DS3231M |
DS3231 собрана в корпусе SO-16, размер которого больше других аналогичных устройств. Очевидно это дань реализованному резонатору. Для общения с внешними устройствами используется шина I2C, дополненная выводами 32KHzи Reset. Электрические параметры этих линий совпадают с требованиями стандарта I2CАдрес микросхемы на шине 11010000 в двичном формате.Более современный вариант DS3231MZ получил корпус SO-8. При этом его распиновка позволяет применять эту микросхемe вместо ее более крупных моделей.
В серии DS323xвыпускаются еще две микросхемы:DS3232 и DS3234. Первая оснащена встроенной памятью SRAM емкостью 236 байт. Среди других особенностей более сложная система управления микросхемой и ограничение нижней частоты работы интерфейса. В DS3234 емкость памяти увеличена до 256 байт, а интерфейс заменен на SPI.
Описание выводов DS3231 и DS3231MZ
Номер вывода |
Обозначение |
Описание |
|
SO-16 |
SO-8 |
||
1 |
1 |
32kHz |
Выход частоты 32768Гц. Открытый сток. Требует подключения через внешний резистор к шине питания. Может оставаться не подключенным. |
2 |
2 |
Vcc |
Вход напряжения питания. Открытый сток. Должен быть подключен к земле, если не используется. |
3 |
3 |
INT/SQW |
Выход прерывания/частоты. Открытый сток. Требует подключения через внешний резистор к шине питания. Может оставаться не подключенным. В режиме прерывания активное состояние – низкое. |
4 |
4 |
RST |
Вход сброса. Активное состояние – низкое. |
5-12 |
NC |
Не используются |
|
13 |
5 |
GND |
Земля |
14 |
6 |
Vbat |
Вход резервного питания. Если не используется, то должен быть подключен к земле. |
15 |
7 |
SDA |
Информационный вход шины I2C. Требует подключения через внешний резистор к шине питания. |
16 |
8 |
SCL |
тактовый вход шины I2C. Требует подключения через внешний резистор к шине питания. |
Расположение выводов 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. |