Подключение часов DS3231 к Arduino
Содержание
- Товары, используемые в материале
- AC-DC Блок питания 9В / 1.2А (10Вт)
- Arduino Uno (DIP версия)
- DS3231 часы реального времени (RTC)
- Шлейф проводов «Папа — Мама» (20см, 40шт.)
Если вы проектируете устройство, которому нужно всегда и везде знать точное время, вам пригодится модуль часов реального времени. Такие часы способны отсчитывать точное время и сохранять его даже при отключении основного питания, так как подразумевается их эксплуатация с батарейкой (обычно CR2032). В режиме работы без основного питания, часы способны отработать на такой батарейке c десяток лет!
Одним из наиболее часто используемых модулей ЧРВ (RTC – Real Time Clock) является микросхема DS1307 от Dallas Semiconductors. Точность хода микросхемы сильно зависит от внешнего кварца и его обвязки, поэтому на просторах Интернета данный модуль считается неточным.
Однако, существует «автономный» модуль – DS3231, который имеет встроенный кварц с термостабилизацией.
Его точность составляет 2ppm (partspermillion – частей на миллион). Такая погрешность зачастую незаметна и примерно равна погрешности наручных часов. При всех его плюсах, модуль ещё и совместим со всеми DS1307-ми библиотеками!
И в нашей сегодняшней статье мы поговорим о подключении данной микросхемы к микроконтроллерам Arduino.
Для реализации проекта из этой статьи нам потребуются следующие компоненты:
Подключение 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 |
После подключения у нас должно получится примерно так:
Настройка и подключение в 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Вт)
Arduino Uno (DIP версия)
DS3231 часы реального времени (RTC)
Шлейф проводов «Папа — Мама» (20см, 40шт.)
Самые популярные материалы в блоге
За все время
За сегодня
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 ‘bool getTime(const char*)’:
SetTime:53: error: expected unqualified-id before ‘.’ token
tm.Hour = Hour;
^
SetTime:54: error: expected unqualified-id before ‘.’ token
tm.Minute = Min;
^
SetTime:55: error: expected unqualified-id before ‘.’ token
tm.Second = Sec;
^
C:\Program Files\Arduino\libraries\DS1307RTC\examples\SetTime\SetTime.ino: In function ‘bool getDate(const char*)’:
SetTime:70: error: expected unqualified-id before ‘.’ token
tm.Day = Day;
^
SetTime:71: error: expected unqualified-id before ‘.’ token
tm.Month = monthIndex + 1;
^
SetTime:72: error: expected unqualified-id before ‘.’ token
tm.Year = CalendarYrToTm(Year);
^
exit status 1
‘tmElements_t’ does not name a type
Источник: