Скетч часов для на ардуино с ds3231

Подключение RTC часы реального времени DS1302, DS1307, DS3231 к Arduino

Для подключения RTC часов реального времени DS1302, DS1307, DS3231, была разработана универсальная библиотека.

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

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

RTC DS1307 Arduino UNO
GND GND
VCC +5V
SDA A4
SCL A5

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

RTC DS1302 Arduino UNO
GND GND
VCC +5V
RST 10 (Можно изменить на другие в скетче)
CLK 13 (Можно изменить на другие в скетче)
DAT 12 (Можно изменить на другие в скетче)

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

RTC DS3231 Arduino UNO
GND GND
VCC +5V
SDA A4
SCL A5

Программа:

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

Для DS1307:

Для DS1302 :

Для DS3231 :

Пример установки текущего времени в RTC модуль (DS1307):

Пример считывания текущего времени с RTC модуля (DS1307) и вывод в «Последовательный порт» :

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

— библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных 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 достаточно вызвать один раз.

Источник

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Arduino и точные часы реального времени DS3231

Все мы знаем, что большинство микроконтроллеров, которые мы используем для наших проектов, не знают о текущем времени. Это нормально для большинства наших проектов, но время от времени, когда вы сталкиваетесь с идеей, в которой основное внимание уделяется получению точного значения времени, модуль часов реального времени DS3231 является спасителем. Он идеально подходит для проектов, предполагающих регистрацию данных, создание часов, таймеров и сигналов тревоги.

В основе модуля лежит недорогая, чрезвычайно точная микросхема часов реального времени (RTC) от Maxim – DS3231. Она управляет всеми функциями хронометража и имеет простой двухпроводной интерфейс I2C, который можно легко подключить к любому микроконтроллеру по вашему выбору.

Чип хранит информацию о секундах, минутах, часах, днях, месяце и годе. Дата в конце месяца автоматически корректируется для месяцев, в которых менее 31 дня, включая поправки для високосного года (действует до 2100). Часы работают в 24-часовом или 12-часовом формате с индикатором AM/PM. Они также обеспечивают два программируемых времени суток.

Еще одна интересная особенность этой платы – вывод SQW, который выводит хороший прямоугольный сигнал на частотах 1 Гц, 4 кГц, 8 кГц или 32 кГц и может обрабатываться программно. Это может также использоваться как прерывание во многих основанных на времени приложениях.

Большинство модулей RTC поставляются с внешним резонатором 32 кГц для сохранения времени. Но проблема с этими резонаторами в том, что внешняя температура может влиять на частоту их колебаний. Это изменение частоты может быть незначительным, но они, безусловно, складываются. Чтобы избежать таких небольших дрейфов, DS3231 приводится в действие кварцевым генератором с температурной компенсацией 32 кГц (TCXO). Он очень невосприимчив к внешним изменениям температуры. TCXO имеется внутри чипа RTC, что делает весь корпус немаленьким. Прямо рядом со встроенным кристаллом находится датчик температуры. Этот датчик компенсирует изменения частоты, добавляя или удаляя такты часов, так что хронометраж остается актуальным. Вот почему TCXO обеспечивает стабильные и точные эталонные значения времени и поддерживает работу RTC с точностью до ±2 минуты в год.

Основное различие между DS3231 и DS1370, который довольно популярен в связи с дешевизной, заключается в точности учета времени. DS1307 поставляется с внешним резонатором 32 кГц для хронометража, частота колебаний которого легко зависит от внешней температуры. Обычно это приводит к тому, что часы отстают примерно на пять минут в месяц. Тем не менее, DS3231 гораздо точнее, поскольку поставляется с внутренним кварцевым генератором с температурной компенсацией (TCXO), который не зависит от температуры, что делает его точным до нескольких минут в год в среднем.

DS3231 питается от батареи и обеспечивает точное хронометраж при отключении основного питания устройства. Встроенная чувствительная цепь непрерывно контролирует состояние VCC для обнаружения сбоев питания и автоматически переключается на резервный источник питания. Таким образом, вам не нужно беспокоиться о перебоях в питании, ваш микроконтроллер может спокойно отслеживать время.

На нижней стороне платы находится держатель для 20-миллиметровых 3V литиевых батареек. Любая батарея CR2032 может поместиться в этот разъем. Предполагая, что используется полностью заряженная батарея CR2032 емкостью 220 мАч, а чип потребляет минимум 3 мкА, батарея может поддерживать RTC в течение минимум 8 лет без внешнего источника питания 5 В (220 мАч / 3 мкА = 73333,34 часа = 3055,56 дня = 8,37 года).

Модуль DS3231 RTC также поставляется с 32-байтовым EEPROM чипом 24C32 от Atmel с неограниченным циклом чтения-записи. Он может быть использован для сохранения настроек или чего угодно. 24C32 EEPROM использует интерфейс I2C для связи и использует ту же шину I2C, что и DS3231. Адрес I2C EEPROM можно легко изменить с помощью трех перемычек припоя A0, A1 и A2 на задней панели.

Согласно спецификации 24C32, эти 3 бита размещаются в конце 7-битного адреса I2C, непосредственно перед битом чтения/записи. За счет короткого замыкания паяных перемычек адресные входы обнуляются. Это позволяет вам установить адрес I2C в соответствии с таблицей ниже.

Модуль DS3231 RTC имеет всего 6 контактов, которые связывают его с внешним миром. Соединения следующие:

Давайте подключим DS3231 к Arduino. Связь довольно проста. Начните с подключения контакта VCC к выходу 5V на Arduino и заземления. Теперь мы остаемся с выводами, которые используются для связи I2C. Обратите внимание, что каждая плата Arduino имеет разные контакты I2C, которые должны быть подключены соответствующим образом. На платах Arduino с разметкой R3 SDA (линия передачи данных) и SCL (линия синхронизации) находятся на разъемах выводов рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA). Если у вас есть Arduino Mega, контакты будут другие. Вы будете использовать цифровые 21 (SCL) и 20 (SDA). Принципиальная схема подключения DS3231 и Arduino Uno следующая:

Общение с модулем RTC – это куча работы. К счастью, была написана библиотека RTClib, чтобы скрыть все сложности, и мы могли выполнять простые команды для чтения данных RTC. Чтобы установить библиотеку, перейдите в раздел Sketch (Скетч) – Include Library (Включить библиотеку) – Manage Libraries (Управление библиотеками). Подождите, пока менеджер библиотеки загрузит индекс библиотек и обновит список установленных библиотек.

Отфильтруйте результаты поиска, набрав «rtclib». Там должны выйти пара записей. Ищите RTClib от Adafruit. Нажмите на эту запись, а затем выберите Install (Установить).

Следующий код программы даст вам полное понимание того, как установить/прочитать дату и время на модуле DS3231 RTC, этот скетч может послужить основой для более практических экспериментов и проектов.

Вот как выглядит вывод данных в последовательном мониторе.

С модулем DS3231 RTC в качестве бонуса вы получаете 32 байта электрически стираемого ПЗУ. Его содержимое не будет удалено, даже если основное питание устройства будет прервано. Следующая программа пишет, а затем читает сообщение из 24C32 EEPROM. Вы можете использовать эту программу для сохранения настроек или паролей или чего угодно.

Источник

Анатолий Беляев (aka Mr.ALB). Персональный сайт

Да пребудут с вами Силы СВЕТА!

2022-09-23
Добавлено изречение
№117

2022-09-22
Добавлено изречение
№116

2022-09-22
Добавлено изречение
№115

2022-09-22
Добавлено изречение
№114

2022-09-22
Добавлено изречение
№113

2022-09-22
Добавлено изречение
№112

2022-09-22
Добавлено изречение
№111

2022-09-22
Добавлено изречение
№110

2022-09-22
Добавлено изречение
№109

2022-09-22
Добавлено изречение
№108

2022-09-22
Добавлено изречение
№107

2022-09-22
Добавлено изречение
№106

2022-09-22
Добавлено изречение
№105

2022-09-22
Добавлено изречение
№104

2022-09-22
Добавлено изречение
№103

2022-09-22
Добавлено изречение
№102

2022-09-22
Добавлено изречение
№101

2022-09-22
Добавлено изречение
№100

2017-01-19
Добавлен раздел
Веды

Часы на RTC DS3231 и TM1637

Продолжаю использовать недорогие и миниатюрные платы Arduino Pro Mini. На этой странице представляю проект часов. Обычные такие часы .

Подразделы

Прежде чем делать свой скетч, посмотрел в Интернете, что делают другие. И вот мне попался интересный проект http://arduinolab.pw/index.php/2016/06/23/chasy-na-arduino/ , решил взять его за основу.

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

  1. Отсутствие регулировки яркости индикатора.
  2. Отсутствие гашения незначащего нуля.

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

Кто-то делает автоматическую регулировку яркости с помощью фоторезистора. Так вполне можно сделать, но я не стал, нет необходимости в такой опции, хотя проект и можно расширить, или модернизировать на такой вариант.

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

Схема часов

Схема часов не сложная. Благодаря тому, что индикатор управляется по протоколу IIC (I2C), соединений совсем немного. Блок питания используется импульсный, обратноходовый, от какой-то зарядки для телефона. Выдаёт он +6,5 В. Это напряжение подаётся на стабилизатор Arduino Pro Mini – на контакт RAW.

Pic 1. Схема электрическая принципиальная для скетча #8

Монтажную схему см. ниже.

Pic 2. Схема монтажная для скетча #8

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

Конструкция часов

Корпус традиционно склеен из пластика ABS. Габариты 80 х 60 х 54 мм (Ш х Г х В). Сама конструкция представляет собой блок из модулей: индикатора, реального времени, платы с Ардуино, модуля питания и планки с кнопками. Arduino Pro Mini вставлено в панельку DIP24, которая распаяна на монтажной плате. К этой плате и идут соединения от модулей. Конструктивно модули соединены между собой стойками из нейлона и винтами М3. К этим же стойкам прикручивается и задняя крышка. Блок из модулей вставлен в корпус и фиксируется снизу так же винтом М3.

Обращу внимание на то, что сверху установлена клавиша выключения внешнего питания. Нет смысла жечь индикатор пока целый день на работе. Так как в модуле реального времени имеется своя литивая батарейка на 3 В, то время продолжает отсчитываться независимо от питания Ардуино и индикатора. Очень удобная функция.

Кнопки управления вынес на переднюю панель и немного утопил вглубь. Сейчас объясню зачем так. Есть у меня часы ASSISTANT ah-1066 , габариты у них чуть-чуть больше, а индикатор такой же, зелёненький. Так у них кнопки управления вынесены на верхнюю крышку, что с моей точки зрения и опыта эксплуатации такой конструкции не совсем удобно, да и пыль на них оседает. Батарейки в тех часах мизинчиковые (ААА) 3 шт. – недолговечно. Нет регулировки яркости индикатора. Поэтому, создавав свою конструкцию старался устранить эти недостатки. К примеру, когда кнопки впереди, то легко подстраивать или устанавливать время, так как одновременно видишь и индикатор, и кнопки.

Ниже небольшой фотоотчёт по конструкции часов.

Pic 3. Часы. Внешний вид, разные ракурсы Pic 4. Часы. Внешний вид, разные ракурсы Pic 5. Часы. Внешний вид, вид снизу Pic 6. Часы. Внешний вид, снята задняя крышка Pic 7. Часы. Вынут блок часов из корпуса Pic 8. Часы. Вынут блок-модуль часов из корпуса Pic 9. Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231 Pic 10. Часы. Блок-модуль часов разъединён. Отделена плата RTC DS3231 Pic 11. Часы. Блок-модуль часов разъединён. Отделена плата индикатора TM1637 и панель кнопок Pic 12. Часы. Окончательный вариант

Скетч часов

Далее представлен скетч. Рассмотрю некоторые его особенности. Так, у автора для мигания точек используется сигнал с модуля реального времени с контакта SQW, который подаётся на контакт 2 Ардуино. На этом контакте установлено внешнее прерывание 0 на изменение ( CHANGE ). Можно реализовать и по-другому, к примеру, через Таймер1. Оставил так, как у автора, может быть в другом проекте сделаю через Таймер1, для разнообразия.

Весь код подробно закомментирован, с его пониманием, надеюсь, проблем не будет. Хочу лишь обратить внимание, что когда происходит запись значения в EEPROM, то индикатор гашу на пол секунды, чтобы видеть, что команда записи отработала. В некотором роде – индикация записи.

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

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

Вариант мигания точек, если нет SQW

Несколько раз меня спрашивали что делать, если нет вывода SQW на DS3231, могу предложить использовать прерывания по Таймеру1. Доработка скетча не займёт много времени, а эффект тот же, что и с выводом SQW.

Проверено мной и подписчиками – работает. В последующих проектах уже сразу использую этот метод.

Приложение

Используемые библиотеки и программы:

  • EEPROM.zip
  • TM1637.zip
  • Wire.zip
  • Скетч: Clock_tm1637_RTC_DS3231.zip
  • Скетч + библиотеки, по альтернативной ссылке: Clock_tm1637_RTC3231.rar

Проект получил логическое продолжение. В обновлённой версии всё сделано по другому. Добавлен будильник. Добавлены вывод температуры и измерение атмосферного давления. Внешний датчик температуры позволяет измерять в диапазоне от -55°С до +125°С.

Источник

Adblock
detector