Srs33.ru

Авто аксессуары
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Подключение часов реального времени DS1302 к Arduino и дисплея 1602 i2C — часы на ардуино

Отличительные особенности:

Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом высокосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). Подключение DS1302 к микропроцессу упрощено за счет синхронной последовательной связи. Для этого требуется только 3 провода: (1) RST (сброс), (2) I/O (линия данных) и (3) SCLK (синхронизация последовательной связи). Данные могут передаваться по одному байту или последовательностью байтов до 31. DS1302 разработан, чтобы потреблять малую мощность и сохранять данные и информацию часов при потреблении менее 1 мкВт. DS1302 — преемник DS1202. В дополнение к основным функциям хранения времени DS1202, DS1302 имеет два вывода питания для подключения основного и резервного источника питания, возможность подключения программируемой цепи заряда к выводу VCC1 и семь дополнительных байтов ОЗУ.

Подключение:

Подключение DS1307 к Arduino :

RTC DS1307Arduino UNO
GNDGND
VCC+5V
SDAA4
SCLA5

Подключение DS1302 к Arduino :

(Можно изменить на другие в скетче)

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

Модуль DS1302 часы реального времени на Алиэкспресс http://ali.pub/1br52w

Код программы для модуля 1302 и дисплей 1602 I2C

В зависимости от того какой модуль Вы подключаете, необходимо в программе указать

Для DS1302 :

virtuabotixRTC myRTC(6, 7, 8); //CLK, DAT, RST

LiquidCrystal_I2C lcd(0x3F ,2,1,0,4,5,6,7,3, POSITIVE);

//myRTC.setDS1302Time(00,04, 12, 06, 18, 04, 2017);

Так же не забываем о экономии при покупке товаров на Алиєкспресс с помощью кэшбэка

Для веб администраторов и владельцев пабликов главная страница ePN

Для пользователей покупающих на Алиэкспресс с быстрым выводом % главная страница ePN Cashback

Преимущества библиотеки:

— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.

— библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire

— для инициализации модуля необходимо вызвать функцию begin с названием модуля.

— подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)

— простота установки и чтения времени функциями settime и gettime

функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)

функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.

— библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt

Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на

36 байт, при этом не затронув область памяти программ.

— при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.

— при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.

— в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента — количество минут (от 1 до 255)

если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа.

Функцию period достаточно вызвать один раз.

Подробное описание:

Похожие статьи

Подключение к ардуино датчика вращения енкодер KY-040

Подключение к ардуино датчика вращения енкодер KY-040

Енкодер вращения KY-040 — это поворотный датчик, который индицирует степень поворота оси и в каком направлении она вращается.

Это отличный прибор для контроля шаговых и серво — двигателей. Из него получится крутой орган управления менюшкой настроек контроллера. Вы также можете использовать его в качестве цифрового потенциометра.

Подключение 7-сегментного индикатора к Ардуино

Подключение 7-сегментного индикатора к Ардуино

Сегодня я расскажу о подключении светодиодного индикатора АЛС334Б к Ардуино.
Для своих часов-будильника я решил выбрать индикацию вполне привычными светодиодными семисегментными индикаторами .

Во-первых, индикацию будет хорошо видно даже в темноте. Кроме того, у светодиодов низкое энергопотребление, они не дорого стоят и довольно легко управляются.

Поворотный стол с фоторезисторами на Arduino

Поворотный стол с фоторезисторами на Arduino

В статье приведена пошаговая инструкция по разработке вращающегося стола на Arduino с реализацией обратной связи по положению с помощью фоторезисторов.

Проект будет интересен как новичкам в Arduino так и людям с опытом. Уверены, что начинающие Ардуинщики откроют для себя что-то новое и при этом разработают реальную конструкцию вращающегося стола. В проекте использованы комплектующие от Adafruit, но вы смело можете заменить их на китайские аналоги от других производителей.

Какой смысл в часах реального времени (RTC)?

Ваш компьютер, скорее всего, синхронизирует свое время с Интернетом, но у него все еще есть внутренние часы, которые продолжают работать даже без подключения к Интернету или выключения питания. Когда вы используете Arduino, подключенный к компьютеру, у него есть доступ к точному времени, предоставляемому вашими системными часами. Это довольно полезно, но большинство проектов Arduino предназначены для использования вне компьютера — в этот момент, в любое время, когда питание отключено или Arduino перезапущен, у него не будет абсолютно никакого представления о том, который час. Внутренние часы будут сброшены и снова начнут отсчет с нуля при следующем включении.

Если ваш проект имеет какое-либо отношение к необходимости времени — например, мой рассвете рассвете — это явно будет проблемой. В этом проекте мы обошли проблему, вручную установив время каждую ночь довольно грубо — пользователь нажимал кнопку сброса непосредственно перед тем, как ложиться спать, обеспечивая синхронизацию времени вручную. Очевидно, что это не идеальное долгосрочное решение.

Модуль RTC — это дополнительный элемент схемы, требующий небольшой батарейки типа «таблетка», которая продолжает отсчитывать время, даже когда Arduino выключен. После однократной установки он будет работать в течение всего срока службы батареи, обычно в течение года или около того.

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

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

За все время

За сегодня

Сдвиговый регистр и 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 FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino:1:0:
C:Program FilesArduinolibrariesDS1307RTC/DS1307RTC.h:19:22: error: ‘tmElements_t’ has not been declared
static bool read(tmElements_t &tm);
^
C:Program FilesArduinolibrariesDS1307RTC/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 FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.ino: In function ‘void setup()’:

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

^
C:Program FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.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 FilesArduinolibrariesDS1307RTCexamplesSetTimeSetTime.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

Какими способами вообще можно устанавливать время на часах модуля?

Традиционно, начиная с модуля DS3107, время устанавливалось при помощи скетча для Arduino из числа примеров использования библиотеки. Алгоритм такой: открываем скетч, жмём «компилировать и закачать», и при первом запуске контроллера время устанавливается. Остался вопрос: какое время? Откуда Arduino может узнать, какое именно время устанавливать? А очень просто – время компиляции скетча. Однако с таким подходом я вижу несколько недостатков:

  • время компиляции зависит от «мощи» компьютера;
  • время закачивания зависит от скорости передачи скомпилированного скетча в плату Arduino;
  • закачанный скетч – «одноразовый» (устаревает сразу же после закачивания в Arduino).

Что ещё можно придумать? Можно, например, выставлять требуемое время в скетче вручную, предусмотреть кнопку, нажатие на которую в нужный момент выставит «руками» указанное время, например, через 2 минуты от текущего момента: пока «зальётся» скетч, пока подготовимся отследить вручную тот самый нужный момент нажатия кнопки, как раз та пара минут и пройдёт. А дальше, глядя на часы в компьютере, дожидаться «того самого» момента, чтобы нажать кнопку. Плюсы – сложнее предыдущего способа, но всё ещё относительно просто, однако точнее, чем первый способ. Минусы – этот способ ещё неудобнее, дольше, всё равно скетч «одноразовый».

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

Выводы отвечающие за интерфейс I2C на платах Arduino на базе различных контроллеров разнятся.

RTC модульНа базе ATmega 328LeonardoMEGA, ADK, DUE
SCLA5D3D21
SDAA4D2D20
VCC+5V+5V+5V
GNDGNDGNDGND

Иллюстрация подключения RTC модуля к Ардуино

Необходимые библиотеки:

для работы с DS1307: http://www.pjrc.com/teensy/td_libs_DS1307RTC.html
для работы со временем: http://www.pjrc.com/teensy/td_libs_Time.html

Что такое DS3231?

DS3231

Прежде всего, вы должны знать, что такое RTC (часы реального времени), или часы реального времени. Эти микросхемы очень часто встречаются во множестве приложений, на самом деле, на вашем ПК есть один из них на материнской плате, и он также питается от CR2032 аккумулятор также. Это тот, который поддерживает время и конфигурацию в BIOS / UEFI и из которого операционная система берет его при загрузке, чтобы быть вовремя (хотя теперь, с Интернетом, синхронизация с серверами может использоваться для большей точности, но это это отдельная история…).

Что делает RTC, так это просто измеряет время. Отличие от других типов электронных часов в том, что они просто измерить время, и он делает это путем подсчета импульсов тактового сигнала, зная его частоту и периоды. Помимо времени, RTC также позволяет вести учет дней, недель, месяцев и лет. То есть полная дата .

Для того, чтобы это было возможно, RTC должен сопровождаться Xtal или кварцевый кристалл который будет действовать как резонатор, тот, который обеспечивает частоту. Кроме того, вам нужна электронная схема, способная считать и сохранять дату в памяти. Схема должна быть способна считать секунды, минуты, часы, дни, недели, месяцы и годы.

что память непостояннаВот почему ему нужна батарея, чтобы иметь постоянное питание. Если у вас нет батареи или она разрядится, она сотрется . Вот что происходит с ПК, когда батарея разряжается, они показывают неверное время. Если вы настроите его, когда ПК включен, время будет сохранено, поскольку RTC получает питание, но это во время процессов, во время которых он выключен, когда эта батарея необходима .

Для проектов DIY производители обычно используют два обычных чипа RTC, которые являются DS1307 и DS3231. Оба изготовлены Maxim (ранее Dallas Semiconductor), и DS3231 является более точным из двух, поскольку он не так подвержен колебаниям температуры, как первый. Поэтому он не так сильно колеблется в зависимости от температуры, а точнее держит время.

Иногда, при заметных перепадах температур, DS1307 может отставать от 1 до 2 минут в день. Что-то невыносимое для некоторых приложений.

DS3231 не в том, что он не подвержен изменениям, а в том, что он имеет встроенные системы измерения температуры и компенсации для обеспечения точности 2 ppm, что было бы эквивалентно отставание во времени около 172 мс в день, то есть не более 1 секунды в неделю максимум. И на практике они обычно меняются всего 1-2 секунды в месяц.

Что касается пути общаться с RTC DS3131, чтобы получить значения даты, которые он получает, это делается Шина I2C. А для питания вы можете использовать от 2.3 до 5.5 В для DS3231, что несколько ниже, чем от 4.5 до 5.5 В для DS1307, поэтому он может быть более энергоэффективным и продлить срок службы батареи.

Также вы должны знать, что эти модули обычно имеют EEPROM дополнительный AT24C32 для хранения некоторых записей и предыдущих измерений, что весьма практично.

приложений

Что касается приложений, я уже упомянул некоторые из них, например, реализовать часы с Arduino, чтобы создать систему, которая действует на основе Время Как бы то ни было, чтобы сэкономить время на оборудовании, таком как ПК и многих других электронных устройствах и приборах, у которых есть время и т. Д.

Может также использоваться в проекты для создания таймеров для освещения, систем полива, регистратора данных и т. д. Приложения могут быть самыми многочисленными .

Купить RTC DS3231

Модуль DS3131 дешевый, и вы можете найти его в некоторых специализированных магазинах электроники или в крупных магазинах, таких как eBay, AliExpress, Amazon и т. д. Если вы заинтересованы в таком, вот несколько рекомендаций:

ShIoTiny: часы без пружины или реальное время и как с ним работать

Продолжаем цикл статей о ShIoTiny — визуально программируемом контроллере на базе чипа ESP8266.

В этот статье рассказано о часах реального времени в контроллере ShIoTiny, синхронизации времени и использовании узлов работы с часами.

Сайт проекта ShIoTiny

Предыдущие статьи серии.

ShIoTiny: малая автоматизация, интернет вещей или «за полгода до отпуска»

ShIoTiny: узлы, связи и события или особенности рисования программ

ShIoTiny: вентиляция влажного помещения (проект-пример)

ShIoTiny и окружающий мир: подключение датчиков к бинарным входам, дребезг контактов и другие вопросы

ShIoTiny и окружающий мир: аналоговые датчики или АЦП для самых маленьких

Бинарные прошивки, схема контроллера и документация

Вступление

Сегодня мы поговорим о времени. Не о времени, в том смысле, в котором о нем веками спорят философы и конца-края этому спору не видно. А о том времени, которое мы видим на часах и согласно которому идем на работу, в школу или спешим на свидание.

Вся штука в том, что энергонезависимые часы реального времени в чипе ESP8266 и контроллере ShIoTiny — отсутствуют. Эта родовая травма контроллера ShIoTiny — целиком и полностью моя вина. Но, что сделано — то сделано.

Как только прошивка увидела свет, возмущенная моим отношением к реальному времени общественность начала тыкать меня носом в этот недостаток.

Так как ошибки надо исправлять, и, на этот раз хотя бы не кровью, то я пошел навстречу все возрастающему числу пользователей моей прошивки и сделал то что смог. А именно — я добавил в прошивку контроллера ShIoTiny узлы, позволяющие более-менее удобно с этим работать с реальным временем.

О часах ShIoTiny

Как уже было сказано, «часов с батарейкой» в ShIoTiny нет. Но в то же время, отсчет секунд, начиная с 1 января 1970 года реализован.

Это то самое время, которое называется UNIX-time, хранится в переменных типа time_t языков С/C++ и которое в 32-битных системах должно закончится 19 января 2038 года.

Но, не бойтесь. Я думаю, что к 2038 году все успеют сделать тип time_t 64-битным и на ближайшие примерно 292 миллиарда лет проблема будет решена. Ну а там еще что-нибудь придумаем.

Заметим, что время в формате time_t называется иногда (и у меня в статье тоже) — timestamp или, по-русски временная метка.

Но вернемся к нашему контроллеру. Итак, часы в нем есть, но эти часы сбрасываются в 0 после отключения питания. Отсюда следует тривиальный вывод, что главной проблемой отсчета времени в контроллере ShIoTiny является необходимость синхронизации часов контролера при включении питания. Остальное — чисто технические проблемы

Синхронизация времени

Давным давно устоявшийся способ синхронизации времени в интернете — это NTP-сервера. И первой идеей было сделать узел, который синхронизирует время с заданным NTP-сервером.

Но, немного подышав свежим воздухом и покумекав своей тыковкой я понял, что этот подход идеологически неверный.

Ведь не факт, что пользователь захочет вытащить контролер с прошивкой ShIoTiny в интернет. И время для синхронизации может присылаться не только с NTP-сервера но и по UDP-multicast или при известном качестве связи — по MQTT.

Поэтому было принято судьбоносное решение — разделить узлы получения времени с NTP-сервера и установки системного времени.

Всего для синхронизации времени было разработано два узла: узел получения времени с NTP-сервера NTP Time

и узел установки системных часов Set Time

Узел получения времени с NTP-сервера в качестве параметров получает имя или IP-адрес NTP-сервера и, через запятую, период запроса времени с NTP-сервера в минутах. По умолчанию время запрашивается с NTP-сервера каждые 60 минут или 1 час. На выходе этот узел выставляет 0 до тех пор, пока время не синхронизировано или временную метку — результат последней синхронизации с сервером.

Узел установки системных часов получает на вход временную метку и и устанавливает системные часы в соответствии с этой меткой.

Простейшая схема синхронизации системных часов с NTP-сервером приведена на рисунке.

Период синхронизации не задан и по умолчанию равен 60 минут. На рисунке показана временная метка.

Отмечу, что более одного узла получения времени с NTP-сервера и более одного узла установки системного времени на схеме-программе быть не может.

Если вам нужна экзотическая схема синхронизации — то можно использовать UDP-multicast или MQTT. Схемы при этом полностью аналогичны.

Для синхронизации по UDP-multicast, примерно такая, как на рисунке.

А для синхронизации по MQTT (не советую, конечно, но на крайний случай) — такая.

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

Который час?

Вопрос простой, но ответить на него, порой, не просто. Ведь время в каждой точке Земли — разное. Наша необъятная Родина включает от Калининграда до Камчатки аж 11 часовых поясов.

NTP-сервер, в зависимости от настроек, может возвращать временную метку, привязанную к различным часовым поясам. Как правило, эта временная метка привязана к UTC — всемирному времени.

Но обычно нам нужно местное время того региона где работает наш контроллер. Как тут быть?

А очень просто — для получения временной метки системных часов контролера ShIoTIny был разработан узел Get Time, в котором можно задать часовой пояс в виде смещения времени от -12 часов до +12 часов относительно системных часов контроллера.

Предположим, мы получаем время с сервера pool.ntp.org и синхронизируем системные часы, как в нашем примере ранее. Этот сервер возвращает всемирное время. Нам нужно местное, например Томское, как у меня. Я знаю, что Томск находится в часовом поясе UTC+7. Значит, зададим в узле получение времени смещение +7 или просто 7. Как на рисунке ниже.

А если бы мы жили в Канадской провинции Альберта — то смещение было бы -7 часов. Главное запомните — часовой пояс задается в узле получения времени в часах. И задается он в виде смещения относительно времени системных часов. На выходе узла получения времени выставляется временная метка. Узлов получения времени на схеме может быть несколько.

Сверим часы

Машине очень удобно работать с временем в формате временных меток time_t. Ведь это просто целое число, которое показывает число секунд относительно начальной точки — 1 января 1970 года. В этом формате можно легко находить расстояние между двумя временными точками, отсчитывать периоды и так далее. Это всего лишь сложение и вычитание целых чисел.

Но человек — не машина. Ему гораздо удобнее привычное представление времени в виде года, месяца, числа, часов, минут и секунд. Так уж мы, люди, устроены.

Поэтому были введены узлы перевода временной метки в привычные человеку единицы изменения времени и наоборот — синтеза временной метки из понятных человеку единиц изменения времени. Называются эти узлы, соответственно, Split Time и Synth Time.

Как все это работает — понятно из рисунка ниже.

Отмечу, что узлы Split Time и Synth Time месяцы (month) и дни недели (wday) отсчитывают с нуля. Для месяцев: 0-январь, 11-декабрь. Для дней недели 0-воскресенье, 6-суббота.
Остальные выходы: день месяца (day), year (год), hour (час), min (минута), sec (секунда) — отсчитываются в привычном виде. Часы, минуты, секунды — от 0 до 59. День месяца — в зависимости от месяца от первого числа до 30го или 31го и, для февраля, до 28 или 29го.
Ну а год — он и есть год. 2019й сейчас.
Надеюсь, все понятно.

Пример системы

Чтобы не быть голословным, приведу пример использования часов. Разумеется, упрощенный.

Предположим, у нас есть влажное помещение, которое мы хотим принудительно вентилировать. Но не всегда, а только когда влажность больше заданного уровня и только ночью. Ночью — чтобы не мешать людям днем шумом вентиляторов. Ну такие вот мы эстеты и заботимся о людях.

Попробуем это реализовать.

Все кусочки схемы нам знакомы. Время синхронизируется с сервера NTP. Пока оно не синхронизировано — узел NTP Time возвращает 0 и реле включения вентилятора — отключено. За это отвечает верхний по схеме элемент И.

Как только время синхронизировалось, включение-отключение вентилятора определяется текущим временем и уровнем влажности. Как только уровень влажности превысит 70% и время будет от 23:00 до 06:00 — вентилятор включится и не мешая никому проветрит помещение.

Разумеется, константы времени и влажности в реальном проекте лучше заменить на параметры, сохраняемые во FLASH и устанавливаемые, например по MQTT. Да и текущее состояние системы — уровень влажности, текущее, время, состояние вентилятора — тоже не повредит опубликовать в сети, чтобы контролировать систему со смартфона. Но это уже я оставляю простор для вашей фантазии.

Заключение

Вот мы и познакомили поближе наш контроллер с реальным временем.

Хочу выразить благодарность всем, кто присылал мне письма с конструктивной критикой и советами по модернизации программного обеспечения. Спасибо, ребята!

Как обычно — конструктивная критика приветствуется. Кроме этого приветствуются замечания и предложения.

голоса
Рейтинг статьи
Читайте так же:
Как настроить синхронизацию времени через интернет
Ссылка на основную публикацию
Adblock
detector