Как подключить часы реального времени к Arduino

Модуль часов реального времени

Модуль часов реального времени

Часы реального времени — модуль, который хранит текущую дату и не сбрасывает её при отключении питания благодаря встроенной батарейке. Вы могли слышать о часах на основе чипа DS1307. Этот чип отличается крайне низкой точностью хода часов. Отставание на один час в сутки — это слишком. Рекомендую использовать модуль на основе высокоточного чипа DS3231, который снабжён термометром для корректирования хода часов в зависимости от температуры. Точность хода часов этого чипа находится на уровне хороших наручных часов и составляет 2ppm при температуре окружающей среды 0°-40°. При этом, модуль совместим со всеми библиотеками, написанными для модуля на основе чипа DS1307. Статья рассказывает о подключении модуля к Arduino и взаимодействии с ними с помощью библиотеки Time. Купить такой модуль у проверенного мной продавца вы можете здесь.

Подключение часов реального времени

Часы подключаются по протоколу I2C всего двумя проводами. Необходимо дополнительно подтянуть выводы, к которым подключаются часы к рельсе питания с помощью резисторов 2 КОм. Выводы часов выглядят так:

Выводы часов реального времени

Выводы часов реального времени

Выводы 32К и SQW можно игнорировать. Их назначение не рассматривается в этой статье. SCL и SDA — это выводы интерфейса I2C. Их и нужно подключать к контроллеру. VCC и GND — +5 В и земля соответственно.

SCL и SDA на разных платах расположены на разных выводах:

Uno, Nano A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)

Вывод SDA часов подключается к выводу SDA контроллера. SDL часов, соответственно, к SDL контроллера. После подключения проводов, должна получиться такая картина:

Часы реального времени подключены к контроллеру

Часы реального времени подключены к контроллеру

Работать с модулем часов реального времени удобней всего с помощью библиотеки. Наиболее удобная в этом плане, так и называется: Time (англ. время).
Библиотека является «обёрткой» для другой популярной библиотеки для работы с модулем часов: DS1307RTC. Несмотря на то, что библиотека разработана для чипа DS1307, она прекрасно работает и с DS3231, так как протоколы взаимодействия совместимы.

Скачайте обе библиотеки.

С официального сайта:
Time: http://www.pjrc.com/teensy/td_libs_Time.html
DS1307RTC: http://www.pjrc.com/teensy/td_libs_DS1307RTC.html

Или с моего: Time, DS1307RTC.

После скачивания, поместите содержимое архивов в папку libraries, которая находится в папке со средой разработки Arduino. Запустите среду Arduino IDE и откройте стандартный пример библиотеки:  Примеры->Time->TimeRTC
Или просто скопируйте этот код:

После загрузки скетча в плату запустите монитор порта (Сервис->монитор порта). Вы увидите сообщения от библиотеки. Отображаемое время будет неверным, либо библиотека вовсе пожалуется на не настроенные часы. Для настройки часов загрузите в плату пример из библиотеки DS1307RTC «SetTime» (Примеры->DS1307RTC->SetTime). Загрузите этот пример в плату. После загрузки часы окажутся настроенными на время компиляции скетча. Задержка между компиляцией и полной загрузкой составит совсем немного, чего окажется достаточно для точно настроенных часов. Но если вы отключите и заново подключите питание платы, даже через несколько часов, время в часах всё равно будет заново установлено на время компиляции и окажется неверным. Поэтому, используйте этот пример только для настройки, после настройки отключите часы или загрузите в плату другой скетч.

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

Указанный пример установит часы на 12:10:00 18 мая 2016 года. Измените соответствующую строку для правильной установки времени.
Более подробно о работе с библиотекой можно узнать на сайте автора библиотеки.

Напоминаю, модуль часов реального времени у проверенного продавца вы можете заказать здесь. Полный список товаров, которые я заказал и протестировал здесь.

Как подключить часы реального времени к Arduino: 6 комментариев

  1. AlexKooper

    Делал. Кое-какие ошибки вылезли, починил, заработало.
    Замечания по статье:
    1. первая строка
    #Подключаем библиотеки:
    заменить # на // чтоб получилось
    //Подключаем библиотеки:
    2. Строка 59
    if(digits < 10)
    заменить на
    if(digits < 10)

    Для установки часов использовал пример из библиотеки, пример из статьи не тестировал.

    0
  2. Vlad

    После загрузки скетча в плату запустите монитор порта (Сервис->монитор порта).
    Не могу загрузить скетч в плату т.к. пишет ошибку:Arduino: 1.6.8 (Windows 7), Плата:»Arduino/Genuino Uno»

    In file included from C:\Program Files\Arduino\libraries\Time\DateStrings.cpp:11:0:

    C:\Program Files\Arduino\libraries\Time\DateStrings.cpp:41:22: error: variable ‘monthNames_P’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    PGM_P monthNames_P[] PROGMEM =

    ^

    C:\Program Files\Arduino\libraries\Time\DateStrings.cpp:58:20: error: variable ‘dayNames_P’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    PGM_P dayNames_P[] PROGMEM = { dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7};

    ^

    C:\Program Files\Arduino\libraries\Time\DateStrings.cpp:59:24: error: variable ‘dayShortNames_P’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’

    char dayShortNames_P[] PROGMEM = «ErrSunMonTueWedThrFriSat»;

    ^

    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.

    Помогите!

    1

Добавить комментарий