Подключение часов DS3231 к Arduino

Содержание

Если вы проектируете устройство, которому нужно всегда и везде знать точное время, вам пригодится модуль часов реального времени. Такие часы способны отсчитывать точное время и сохранять его даже при отключении основного питания, так как подразумевается их эксплуатация с батарейкой (обычно CR2032). В режиме работы без основного питания, часы способны отработать на такой батарейке c десяток лет!

Одним из наиболее часто используемых модулей ЧРВ (RTC – Real Time Clock) является микросхема DS1307 от Dallas Semiconductors. Точность хода микросхемы сильно зависит от внешнего кварца и его обвязки, поэтому на просторах Интернета данный модуль считается неточным.

Однако, существует «автономный» модуль – DS3231, который имеет встроенный кварц с термостабилизацией.

Его точность составляет 2ppm (partspermillion – частей на миллион). Такая погрешность зачастую незаметна и примерно равна погрешности наручных часов. При всех его плюсах, модуль ещё и совместим со всеми DS1307-ми библиотеками!

И в нашей сегодняшней статье мы поговорим о подключении данной микросхемы к микроконтроллерам Arduino.

DS3231 - часы реального времени)

Для реализации проекта из этой статьи нам потребуются следующие компоненты:

Подключение DS3231 к Arduino

Часы подключаются по двухпроводной шине IIC (Inter-IntegratedCircuit) через выводы SDA и SCL к SDA и SCL Arduino соответственно. Также необходимо подключить питание +5В и GND. Остальные выводы специфичны для DS3231 и не поддерживаются библиотеками для DS1307, да и не часто используются.

Обратите внимание – выводы шины IICна разных контроллерах расположены на разных пинах:

Контакт SDA Контакт SCL
На Arduino UNO, Nano, Pro Mini etc. A4 A5
На Arduino Mega, Due 20 21
На Arduino Leonardo, Pro Micro 2 3

После подключения у нас должно получится примерно так:

Подключение ds3231 к Arduino

Настройка и подключение в Arduino IDE

Как и со всей периферией Arduino, с модулем часов удобнее работать, используя библиотеку. Мы будем пользоваться низкоуровневой библиотекой Wire (входит в комплект поставки Arduino IDE) и двумя высокоуровневыми DS1307 RTCи Time (необходимо скачать).

Несмотря на то, что библиотека написана для «неточных» часов, она поддерживает работу и с DS3231.

После скачивания библиотек их необходимо установить. Для этого две папки с библиотеками копируются в поддиректорию libraries в папке установки среды Arduino IDE.

Папка Libraries находится по разным адресам в зависимости от вашей ОС:

На Mac: домашняя директория — Documents — Arduino — libraries

На PC: Мои документы — Arduino — libraries

На Linux: домашняя директория — sketchbook — libraries

После установки запустите среду Arduino IDE и откройте пример TimeRTC библиотеки Time (Файл Examples Time TimeRTC), или просто скопируйте код:

Загрузите скетч в плату, после чего откройте монитор последовательного порта (Ctrl+Shift+M). Скорее всего, вы увидите неправильное время или вообще его не увидите, так как часы всё ещё не настроены.

Для их настройки запустите пример SetTime (Файл Примеры DS1307RTC SetTime) и залейте его в плату. После загрузки время будет настроено по системному времени ПК на момент компиляции. Если вы в любой момент времени перезагрузите плату, то время снова будет сброшено ко времени компиляции, поэтому после заливки настроенного скетча отключите сигнальные линии часов и залейте любой другой скетч (например, наш первый, выводящий время).

Если вам не нравится настройка времени по времени компиляции, вы можете задать ее самостоятельно, для этого используйте следующий код:

Он установит время и дату на 13:00:00 1 апреля 2016 года. Поменяйте это значение для установки своего времени. Учтите – если вы перезагрузите плату, время будет сброшено, как с временем компиляции, так что повторите действия с отключением платы и заливкой другого скетча.

Товары, используемые в материале

AC-DC Блок питания 9В / 1.2А (10Вт)

AC-DC Блок питания 9В / 1.2А (10Вт)

Плата Arduino Uno (Официальная версия)

Arduino Uno (DIP версия)

Модуль RTC (часов реального времени) на базе микросхемы DS3231

DS3231 часы реального времени (RTC)

Набор проводов «Папа — Мама», шлейф, 20 см

Шлейф проводов «Папа — Мама» (20см, 40шт.)

Самые популярные материалы в блоге

За все время

За сегодня

Сдвиговый регистр и Arduino

Подключение Bluetooth модуля HC-03 - HC-07 к Arduino

9 комментариев . Оставить новый

спасибо но работает только с ардуино IDE 0015-1.5

а какие ошибки появляются при работе с другой версией?

Мне интересно, эти ошибки специально созданы для того, чтобы только продвинутый пользователь мог разобраться? Или всё же случайно?

Arduino: 1.8.2 Hourly Build 2017/03/21 05:33 (Windows XP), Плата:”Arduino Nano, ATmega328P”
In file included from C:\Program Files\Arduino\libraries\DS1307RTC\examples\SetTime\SetTime.ino:1:0:
C:\Program Files\Arduino\libraries\DS1307RTC/DS1307RTC.h:19:22: error: ‘tmElements_t’ has not been declared
static bool read(tmElements_t tm);
^
C:\Program Files\Arduino\libraries\DS1307RTC/DS1307RTC.h:20:23: error: ‘tmElements_t’ has not been declared
static bool write(tmElements_t tm);
^
SetTime:10: error: ‘tmElements_t’ does not name a type
tmElements_t tm;

^
C:\Program Files\Arduino\libraries\DS1307RTC\examples\SetTime\SetTime.ino: In function ‘void setup()’:

SetTime:20: error: expected primary-expression before ‘)’ token
if (RTC.write(tm)) <

^
C:\Program Files\Arduino\libraries\DS1307RTC\examples\SetTime\SetTime.ino: In function &#8216;bool getTime(const char*)&#8217;:

SetTime:53: error: expected unqualified-id before &#8216;.&#8217; token
tm.Hour = Hour;

^
SetTime:54: error: expected unqualified-id before &#8216;.&#8217; token
tm.Minute = Min;

^
SetTime:55: error: expected unqualified-id before &#8216;.&#8217; token
tm.Second = Sec;

^
C:\Program Files\Arduino\libraries\DS1307RTC\examples\SetTime\SetTime.ino: In function &#8216;bool getDate(const char*)&#8217;:

SetTime:70: error: expected unqualified-id before &#8216;.&#8217; token
tm.Day = Day;

^
SetTime:71: error: expected unqualified-id before &#8216;.&#8217; token
tm.Month = monthIndex + 1;

^
SetTime:72: error: expected unqualified-id before &#8216;.&#8217; token
tm.Year = CalendarYrToTm(Year);

^
exit status 1
&#8216;tmElements_t&#8217; does not name a type


Источник: voltiq.ru