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

Подключение DS1302 к Ардуино по I2C / SPI

DS1302 Аrduino — это модуль часов реального времени с возможностью бесперебойного питания от литиевой батарейки. Рассмотрим схему подключения модуля к плате Ардуино и продемонстрируем код, с помощью которого можно установить нужную дату и время. Также мы разместили описание универсальной библиотеки iarduino_RTC.h для работы с модулями DS1302, DS1307 и DS3231.

Модуль DS1302 (RTC): схема, описание

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

Распиновка ds1302. Часы реального времени Arduino DS1302

Микросхема отличается низким энергопотреблением и позволяет отсчитывать время с точностью до секунд. Подключение ds1302 к Ардуино осуществляется с помощью пяти контактов. Выводы VCC и Gnd отвечают за питание модуля. Контакты CLK,DAT и RESX подключают к цифровым пинам микроконтроллера. В скетче можно самим указать задействованные цифровые пины (в нашем примере использован 6,7 и 8 пин).

Как подключить DS1302 к Arduino (RTC)

Для этого занятия нам потребуется:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль DS1302, DS1307 или DS3231;
  • LCD монитор 1602 i2c;
  • провода «папа-мама».

Модули часов DS1307 и DS3231 подключаются к плате Ардуино через I2C протокол, как LCD дисплей I2C. Контакт SDA подключается к пину A4, контакт SCL к пину A5 Ардуино Уно. При подключении данных модулей к плате Arduino Mega следует использовать порты SDA (20 пин) и SCL (21 пин). При этом в скетче необходимо снять комментарий в строчке с нужным модулем, а строчку с модулем 1302 наоборот закомментировать.

Скетч. Работа с модулем ds3231 Ардуино DS1307

Пояснения к коду:
  1. для работы с программой необходимо скачать библиотеку iarduino_RTC.h.
  2. с помощью команды time.settime(); можно установить дату и время, которые будут выводится на монитор порта Arduino IDE каждую секунду.

Подключение DS1307 к дисплею LCD 1602 i2c

Рассмотрим два варианта подключения модуля RTC к Arduino и текстового дисплея 1602. В первом варианте используется протокол SPI для модуля часов, поэтому к предыдущей схеме потребуется добавить только дисплей с iic модулем. А в скетче следует расскомментировать соответствующую строку. После внесения правок в схему и программу — загрузите следующий скетч в микроконтроллер.

Скетч. Часы с экраном LCD 1602 и DS1302

Пояснения к коду:
  1. в данном примере с помощью команды time.gettime(); можно выводить на текстовый экран текущее время и дату в разном формате.

При подключении экрана и модуля RTC к одной шине iic — порты SDA(A4) и SCL(A5), следует указать в скетче какой модуль используется. Схема подключения размещена выше, кроме того вы можете использовать сканер шины i2c для того, чтобы увидеть адреса устройств. Если адреса, которые установлены производителем по умолчанию вы не изменяли — соберите схему и загрузите следующий пример в плату.

Схема подключения DS1307 и LCD по i2c

Скетч. Часы с LCD 1602 и DS1302 I2C Arduino

Пояснения к коду:
  1. как видите, скетч отличается от предыдущего только одной строчкой

Библиотека RTC.h Arduino: описание команд

Для работы с модулями часов Ардуино, в библиотеке реализовано 5 функций:

begin(); // запуск модуля

settime(секунды, минуты, часы, день, месяц, год, день недели); // указать время
— год указывается без учета века, в формате 0-99
— часы указываются в 24-часовом формате, от 0 до 23
— день недели указывается в виде числа от 0-воскресенье, 6-суббота

gettime(“строка с параметрами”); // получить время
— gettime(«d-m-Y, H:i:s, D»); ответит строкой «12-06-2020, 18:30:05, Fri»
— gettime(«H»); ответит строкой «18»

функцией gettime можно получать различную информацию:

  • s — секунды от 00 до 59 (два знака)
  • i — минуты от 00 до 59 (два знака)
  • h — часы в 12-часовом формате от 01 до 12 (два знака)
  • H — часы в 24-часовом формате от 00 до 23 (два знака)
  • d — день месяца от 01 до 31 (два знака)
  • D — день недели наименование от Mon до Sun (три знака)
  • m — месяц от 01 до 12 (два знака)
  • M — месяц наименование от Jan до Dec (три знака)
  • Y — год от 2000 до 2099 (четыре знака)
  • y — год от 00 до 99 (два знака)
Читайте также:
Кнопочный выключатель сети с гальванической развязкой

blinktime(параметр)
— указывает функции gettime мигать одним из параметров времени

period(минуты)
— устанавливает период обращения к модулю в минутах (от 0 до 255)

Заключение. В часы на Ардуино с дисплеем 1602 и DS1302 можно добавить функцию показа температуры и будильник. Данный модуль позволяет существенно расширить функции микроконтроллера, которые должны выполняться в определенное время суток. Если у вас возникли вопросы по сборке и программированию часов на Arduino с DS1302 и LCD дисплеем — оставляйте их в комментариях к записи.

Урок 18. Подключение RTC часы реального времени с кнопками

В этом уроке мы научимся не только выводить, но и устанавливать время RTC модуля при помощи трёх кнопок.

Нам понадобится:
  • Arduino х 1шт.
  • RTC модуль Trema на базе чипа DS1307 х 1шт.
  • LCD дисплей LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) х 1шт.
  • Trema Shield х 1шт.
  • Trema-модуль i2C Hub х 1шт.
  • Trema-модуль кнопка c проводами х 3шт.
  • Шлейф «мама-мама»для шины I2С х 2шт.

Для реализации проекта нам необходимо установить библиотеки:

  • Библиотека iarduino_RTC (для подключения RTC часов реального времени DS1302, DS1307, DS3231)
  • Библиотека LiquidCrystal_I2C_V112 (для подключения дисплеев LCD1602 по шине I2C)

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki – Установка библиотек в Arduino IDE .

Видео

Схема подключения:

Подключение модулей RTC и LCD, данного урока, осуществляется к аппаратным выводам SDA, и SCL.

RTC модуль Trema на базе чипа DS1307 / LCD дисплей на базе чипа LCD1602 Arduino Uno
GND GND
Vcc +5V
SDA (Serial DAta) A4
SCL (Serial CLock) A5

подключение кнопок: кнопка «SET» к выводу 2, кнопка «UP» к выводу 3 и копка «DOWN» к выводу 4.

Код программы:

При подключении библиотеки «iarduino_RTC» нужно указать, с каким модулем ей работать, в данном случае это модуль Trema на базе чипа DS1307:

Аналогичный алгоритм действий при подключении библиотеки «LiquidCrystal_I2C» для работы с LCD дисплеем LCD1602 IIC/I2C(синий) или LCD1602 IIC/I2C(зелёный) :

Осталось подключить 3 кнопки: «SET», «UP» и «DOWN» . Для этого им нужно назначить номера выводов и указать, что эти выводы работают как вход:

В библиотеке «iarduino_RTC», для работы с датой и временем реализованы две функции: settime() – установка и gettime() – получение времени.

В библиотеке «iarduino_RTC» доступны 9 числовых переменных: seconds, minutes, hours, Hours, midday, day, weekday, month и year, значения которых обновляются после каждого вызова функции gettime(). Эти переменные мы будим использовать для изменения даты и времени.

Еще одна функция библиотеки «iarduino_RTC», которая нам понадобится, это blinktime(), она заставляет функцию gettime(), мигать одним из параметров времени (0 – не мигать, 1 – мигать секундами, 2 – мигать минутами, 3 – мигать часами, 4 – мигать днями и т.д.).

И последнее, о чем надо позаботиться перед созданием кода программы – это алгоритм работы кнопок и определение переменных

Алгоритм работы кнопок следующий:
  • В режиме вывода даты или времени (обычный режим):
    • Кратковременное нажатие на кнопку SET переключает вывод даты и вывод времени
    • Удержание кнопки SET переводит часы в режим установки даты или времени (зависит от того, что было на дисплее, дата или время)
    • Кнопки UP и DOWN неактивны.
  • В режиме установки даты или времени:
    • Кратковременное нажатие на кнопку SET – переход между устанавливаемыми параметрами (сек, мин, час, дни, мес, год, д.н.)
    • Удержание кнопки SET выводит часы из режима установки
    • Каждое нажатие на кнопку UP увеличивает значение устанавливаемого параметра даты или времени
    • Каждое нажатие на кнопку DOWN уменьшает значение устанавливаемого параметра даты или времени

Исходя из алгоритма, нам понадобятся две переменные, назовем их: VAR_mode_SHOW и VAR_mode_SET . Первая будет указывать режим вывода (1-выводим_время, 2-выводим_дату). Вторая, будет указывать режим установки времени (0-нет, 1-сек, 2-мин, 3-час, 4-день, 5-мес, 6-год, 7-д.н.).

Часы реального времени на RTC модулях Ардуино DS1302, DS1307, DS3231

Во многих проектах Ардуино требуется отслеживать и фиксировать время наступления тех или иных событий. Модуль часов реального времени, оснащенный дополнительной батарей, позволяет хранить текущую дату, не завися от наличия питания на самом устройстве. В этой статье мы поговорим о наиболее часто встречающихся модулях RTC DS1307, DS1302, DS3231, которые можно использовать с платой Arduino.

Модули часов реального времени в проектах Arduino

Модуль часов представляет собой небольшую плату, содержащей, как правило, одну из микросхем DS1307, DS1302, DS3231.Кроме этого, на плате практически можно найти механизм установки батарейки питания. Такие платы часто применяется для учета времени, даты, дня недели и других хронометрических параметров. Модули работают от автономного питания – батареек, аккумуляторов, и продолжают проводить отсчет, даже если на Ардуино отключилось питание. Наиболее распространенными моделями часов являются DS1302, DS1307, DS3231. Они основаны на подключаемом к Arduino модуле RTC (часы реального времени).

Часы ведут отсчет в единицах, которые удобны обычному человеку – минуты, часы, дни недели и другие, в отличие от обычных счетчиков и тактовых генераторов, которые считывают «тики». В Ардуино имеется специальная функция millis(), которая также может считывать различные временные интервалы. Но основным недостатком этой функции является сбрасывание в ноль при включении таймера. С ее помощью можно считать только время, установить дату или день недели невозможно. Для решения этой проблемы и используются модули часов реального времени.

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

Сравнение популярных модулей RTC DS1302, DS1307, DS3231

В этой таблице мы привели список наиболее популярных модулей и их основные характеристики.

±3,5 ppm при температурах от -40С до 85С.

Модуль DS1307

DS1307 – это модуль, который используется для отсчета времени. Он собран на основе микросхемы DS1307ZN, питание поступает от литиевой батарейки для реализации автономной работы в течение длительного промежутка времени. Батарея на плате крепится на обратной стороне. На модуле имеется микросхема AT24C32 – это энергонезависимая память EEPROM на 32 Кбайт. Обе микросхемы связаны между собой шиной I2C. DS1307 обладает низким энергопотреблением и содержит часы и календарь по 2100 год.

Модуль обладает следующими параметрами:

  • Питание – 5В;
  • Диапазон рабочих температур от -40С до 85С;
  • 56 байт памяти;
  • Литиевая батарейка LIR2032;
  • Реализует 12-ти и 24-х часовые режимы;
  • Поддержка интерфейса I2C.

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

Взаимодействие с другими устройствами и обмен с ними информацией производится с помощью интерфейса I2C с контактов SCL и SDA. В схеме установлены резисторы, которые позволяют обеспечивать необходимый уровень сигнала. Также на плате имеется специальное место для крепления датчика температуры DS18B20.Контакты распределены в 2 группы, шаг 2,54 мм. В первой группе контактов находятся следующие выводы:

  • DS – вывод для датчика DS18B20;
  • SCL – линия тактирования;
  • SDA – линия данных;
  • VCC – 5В;
  • GND.

Во второй группе контактов находятся:

  • SQ – 1 МГц;
  • DS ;
  • SCL;
  • SDA;
  • VCC;
  • GND;
  • BAT – вход для литиевой батареи.

Для подключения к плате Ардуино нужны сама плата (в данном случае рассматривается Arduino Uno), модуль часов реального времени RTC DS1307, провода и USB кабель.

Чтобы подключить контроллер к Ардуино, используются 4 пина – VCC, земля, SCL, SDA.. VCC с часов подключается к 5В на Ардуино, земля с часов – к земле с Ардуино, SDA – А4, SCL – А5.

Для начала работы с модулем часов нужно установить библиотеки DS1307RTC, TimeLib и Wire. Можно использовать для работы и RTCLib.

Проверка RTC модуля

При запуске первого кода программа будет считывать данные с модуля раз в секунду. Сначала можно посмотреть, как поведет себя программа, если достать из модуля батарейку и заменить на другую, пока плата Ардуино не присоединена к компьютеру. Нужно подождать несколько секунд и вытащить батарею, в итоге часы перезагрузятся. Затем нужно выбрать пример в меню Examples→RTClib→ds1307. Важно правильно поставить скорость передачи на 57600 bps.

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

Будет показывать время 0:0:0. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.

Чтобы провести настройку времени на модуле, нужно в скетче найти строку

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

Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.

Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.

Пример проекта с i2C модулем часов и дисплеем

Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.

В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор прост в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.

Модуль часов подключается к контактам SCL/SDA, которые относятся к шине I2C. Также нужно подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA – A4, SCL – A5, земля с модуля к земле с Ардуино, VCC -5V.

Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.

Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.

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

Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.

Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.

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

В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.

Алгоритм работы следующий:

  • Подключение всех компонентов;
  • Загрузка скетча;
  • Проверка – на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает дату и время на 00:00:00 01/01/2000 при выключении.
  • Функция write позволяет получить дату и время с компьютера, после чего на экране будут указаны верные параметры.

Заключение

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

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

Довольно часто для создания аппаратного проекта необходимо задействовать какой-нибудь дисплей. Размеры экрана и его функциональные возможности напрямую зависят от характера создаваемого приложения. В данном случае мы будем применять жидкокристаллический дисплей типа I2C 20х4.

Используемые детали для часов реального времени

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

По своей архитектуре Arduino является небольшой платой, оснащенной своим процессором, а также имеющей определенный объем памяти. Данная схема имеет множество контактов, позволяющих подключать ее к различным приборам: лампочкам, магнитным дверным замкам, роутерам и даже к чайникам.

Теперь давайте разберемся с типом дисплея. Он имеет обозначение 20х4. Обычно, такие цифры означают физический размер устройства, однако здесь все немного по-другому. Символ «4» говорит о том, что на экране может поместиться 4 строчки текста или цифровых обозначений. Символ «20» — это показатель того, что на каждой строке может уместиться 20 букв и цифр. Характерной особенностью рассматриваемого дисплея является то, что на нём используется интерфейс типа I2C. Это значит, что для подсоединения экрана к плате Arduino понадобится лишь пара проводов. Задняя поверхность дисплея оснащена небольшой печатной платой, припаянной к нему. Именно эта плата обеспечивает функционирование жидкокристаллического модуля. Кроме того, она позволяет регулировать контрастность экрана.

Описываемый дисплей, в рабочем состоянии, имеет синюю подсветку, в то время как символы отображаются белым цветом. Он имеет полную совместимость с платой Arduino. Номинальное входное напряжение экрана составляет 5 В. Работу интерфейса I2C обеспечивают программные константы 0x27 либо 0x3F.

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

Даже в отключенном состоянии аппарат будет сохранять информацию о секундах, минутах, часах. Устройство сможет правильно отображать день, месяц и год. Если конкретный месяц имеет меньше 31-го дня, дата автоматически корректируется. Более того, устройство сможет учитывать корректировки для високосных и невисокосных годов. Формат времени может быть привычным для отечественного пользователя (то есть сутки будут разделены на 24 часа). Также, можно выставлять формат AM/PM, когда день делится на два 12-часовых отрезка. Часы оснащаются двумя видами будильника, а также календарём. Все сведения передаются последовательно через двунаправленную шину I2C.

Рассматриваемый часовой модуль функционирует в диапазоне входного напряжения 3,3-5,5 В. Поэтому допускается применение контактов на 3,3 либо же на 5 В.

Соединение жидкокристаллического дисплея и платы Arduino

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

Создание общей цепи

Нужно выполнить такие действия:

  • соединить выход GND с аналогичным входом на плате Arduino;
  • вход дисплея VCC нужно подключить к 5-контактному выводу платы;
  • вход SDA соединить со штырьком A4;
  • соединить вход SCL и вывод A5.

Прописывание кода

Вначале надо загрузить библиотеку дисплея. Данная библиотека содержит все необходимые функции для настраивания работы экрана. Уже готовый сборник этих файлов находится в свободном доступе.

После этого нужно разархивировать библиотеку и добавить её в реестр библиотек платы Arduino. Затем необходимо запустить Arduino IDE, после чего скопировать следующий код. Первые две строки содержат библиотеки I2C и LCD.

Программная команда Lcd.setCursor (3,0) установит курсор на жидкокристаллическом дисплее в указанной точке. Первое значение указывает на столбец, а второе — на стартовую форму строки 0.

Команда Lcd.print (“”) позволит напечатать текст в текущей позиции курсора. При наборе текста следует учитывать максимально допустимое количество символов для одной строки.

Прописывание даты и времени на ЖК-дисплее

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

Создание цепи

Здесь работа будет выглядеть немного сложнее, поэтому нужно быть внимательным. Штырьки SCL надо соединить с аналоговым 5-штырьковым разъёмом; выводы SDA подключаются к аналоговым 6-контактным гнездам. Верхняя направляющая получившейся сборки будет играть роль шины для I2C, а нижняя будет шиной питания.

ЖК-дисплей и модуль RTC подключаются к 5-вольтовым контактам. После выполнения последнего действия техническая конструкция будет готова.

Прописывание кода

Перед началом прописывания кода необходимо скачать готовую библиотеку RTC, а затем установить время. Файл с данной библиотекой есть в свободном доступе. Далее выполняются действия, похожие на те, что описывались чуть выше. Библиотека RTC разархивируется и добавляется в реестр платы Arduino. Затем запускается Arduino IDE. После этого выполняются такие действия:

    в левом верхнем углу нужно нажать на значок File;

после нажатия откроется контекстное меню, где нужно подвести курсор к строчке Examples;

после этого высветится еще одно контекстное меню справа (здесь нужно навести курсор на строчку DS1307RTC);

  • высветится ещё одно маленькое контекстное меню, в котором необходимо нажать на строчку SetTime.
  • Результатом этих манипуляций станет установка текущего времени.

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

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

    Теперь мы уделим внимание каждой части кода.

    Для начала нужно включить сразу 3 библиотеки (I2C, LCD, а также RTC), после чего установить адрес ЖК-дисплея. Экран инициализируется внутри функции настройки, после чего надо вызвать команду createCustomCharacters (). Вот как должен выглядеть этот код.

    Каждый символ, который будет отображаться, может иметь 5-пиксельную ширину и 8-пиксельную высоту. Чтобы прописать пользовательский символ, необходимо создать дополнительный байт. Нам потребуется 5 символов, вертикальная линия, а также 4 угла. Жёлтый шаблон представленного чуть ниже кода показывает то, как символ будет отображаться на жидкокристаллическом дисплее.

    Внутри функции createCustomCharacters () мы вызвали команду lcd.createChar (#, byte array). Применяемый дисплей поддерживает до 8-ми пользовательских символов, имеющих номерное значение от 0 до 7. В первом командном параметре дисплей присваивает индекс символу, который задан конкретным массивом байтов. Чтобы пропечатать такое обозначение, мы можем задействовать функцию lcd.write (byte (#)).

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

    Данная операция довольно проста. При её выполнении применяется команда lcd.setCursor (#, #), отвечающая за перемещение курсора, и команда lcd.print (“”), необходимая для печати строки. Набранная команда позволит напечатать верхнюю и нижнюю горизонтальную линию, после чего можно будет создать другие пользовательские символы.

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

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

    Функция PrintTime использует 3 командных параметра, столбец и строку, в которой будет прописано время целиком и его конкретный элемент. Код Lcd.print (tm.Hour) позволит напечатать час. Если значение минут и секунд меньше 10-ти, в следующей строчке кода после слова minutes или seconds пишется цифра «0». Вот как это выглядит на примере.

    После выполнения данной операции все будет готово. Осталось лишь загрузить полученный код в Arduino и наслаждаться работой новеньких самодельных часов. Есть множество эскизов, которые помогут сделать описанное устройство (что особенно полезно для новичков). Их можно легко найти в свободном доступе.

    Как использовать RTC (часы реального времени) с Arduino и LCD

    В данной статье мы рассмотрим, как сделать точные часы на базе Arduino или AVR-микроконтроллера микросхемы часов реального времени DS1307. Время будет выводиться на LCD дисплей.

    Что необходимо

    • компьютер с установленной Arduino IDE;
    • плата Arduino;
    • микросхема DS1307 или модуль RTC на ее основе;
    • перемычки;
    • макетная плата;
    • комплектующие из списка элементов.

    Вы можете заменить плату Arduino на контроллер Atmel, но убедитесь, что у него достаточно входных и выходных выводов и есть аппаратная реализация интерфейса I2C. Я использую ATMega168A-PU. Если вы будете использовать отдельный микроконтроллер, то вам понадобится программатор, например, AVR MKII ISP.

    Предполагается, что читатель знаком с макетированием, программированием в Arduino IDE и имеет некоторые знания языка программирования C. Обе программы, приведенные ниже, не нуждаются в дополнительном разъяснении.

    Введение

    Как микроконтроллеры отслеживают время и дату? Обычный микроконтроллер обладает функцией таймера, который стартует от нуля при подаче напряжения питания, а затем начинает считать. В мире Arduino мы можем использовать функцию millis() , чтобы узнать, сколько прошло миллисекунд с того времени, когда было подано напряжение питания. Когда вы снимете и снова подадите питания, она начнет отсчет с самого начала. Это не очень удобно, когда дело доходит до работы с часами и датами.

    Вот здесь и будет удобно использование микросхемы RTC (Real Time Clock, часов реального времени). Эта микросхема с батарейкой 3В или каким-либо другим источником питания следит за временем и датой. Часы/календарь обеспечивают информацию о секундах, минутах, часах, дне недели, дате, месяце и годе. Микросхема корректно работает с месяцами продолжительностью 30/31 день и с високосными годами. Связь осуществляется через шину I2C (шина I2C в данной статье не обсуждается).

    Если напряжение на главной шине питания Vcc падает ниже напряжения на батарее Vbat, RTC автоматически переключается в режим низкого энергопотребления от резервной батареи. Резервная батарея – это обычно миниатюрная батарея (в виде «монетки», «таблетки») напряжением 3 вольта, подключенная между выводом 3 и корпусом. Таким образом, микросхема по-прежнему будет следить за временем и датой, и когда на основную схему будет подано питание, микроконтроллер получит текущие время и дату.

    В этом проекте мы будем использовать DS1307. У этой микросхемы вывод 7 является выводом SQW/OUT (выходом прямоугольных импульсов). Вы можете использовать этот вывод для мигания светодиодом и оповещения микроконтроллера о необходимости фиксации времени. Мы будем делать и то, и другое. Ниже приведено объяснение работы с выводом SQW/OUT.

    Для управления работой вывода SQW/OUT используется регистр управления DS1307.

    Ригистр управления DS1307

    Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
    OUT SQWE RS1 RS0

    Бит 7: управление выходом (OUT) Этот бит управляет выходным уровнем вывода SQW/OUT, когда выход прямоугольных импульсов выключен. Если SQWE = 0, логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0, если OUT = 0. Первоначально обычно этот бит равен 0. Бит 4: включение прямоугольных импульсов (SQWE) Этот бит, когда установлен в логическую 1, включает выходной генератор. Частота прямоугольных импульсов зависит от значений битов RS0 и RS1. Когда частота прямоугольных импульсов настроена на значение 1 Гц, часовые регистры обновляются во время спада прямоугольного импульса. Первоначально обычно этот бит равен 0. Биты 1 и 0: выбор частоты (RS[1:0]) Эти биты управляют частотой выходных прямоугольных импульсов, когда выход прямоугольных импульсов включен. Следующая таблица перечисляет частоты прямоугольных импульсов, которые могут быть выбраны с помощью данных битов. Первоначально обычно эти биты равны 1.

    Выбор частоты прямоугольных импульсов и уровня на выводе SQW/OUT микросхемы DS1307
    RS1 RS0 Частота импульсов и уровень на выходе SQW/OUT SQWE OUT
    1 Гц 1 x
    1 4,096 кГц 1 x
    1 8,192 кГц 1 x
    1 1 32,768 кГц 1 x
    x x
    x x 1 1

    Данная таблица поможет вам с частотой:

    Выбор частоты прямоугольных импульсов DS1307

    Частота импульсов Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0
    1 Гц 1
    4,096 кГц 1 1
    8,192 кГц 1 1
    32,768 кГц 1 1 1

    Если вы подключили светодиод и резистор к выводу 7 и хотите, чтобы светодиод мигал с частотой 1 Гц, то должны записать в регистр управления значение 0b00010000. Если вам нужны импульсы 4,096 кГц, то вы должны записать 0b000100001. В этом случае, чтобы увидеть импульсы вам понадобится осциллограф, так как светодиод будет мигать так быстро, что будет казаться, что он светится постоянно. Мы будем использовать импульсы с частотой 1 Гц.

    Аппаратная часть

    Ниже показана структурная схема того, что нам необходимо.

    Структурная схема часов на AVR микроконтроллере и RTC

    • разъем ISP (In System Programming, внутрисхемное программирование) для прошивки микроконтроллера;
    • кнопки для установки времени и даты;
    • микроконтроллер для связи с RTC через шину I2C;
    • дисплей для отображения даты и времени.

    Часы на базе микроконтроллера AVR и RTC DS1307. Схема электрическая принципиальная

    Перечень элементов

    Ниже приведен скриншот из Eagle:

    Часы на базе микроконтроллера AVR и RTC DS1307. Перечень элементов

    Программное обеспечение

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

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

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

    Следующий код устанавливает значения и записывает их в RTC:

    Эта программа начинается с короткого приветственного сообщения. Это сообщение говорит нам, что подано питание, LCD работает, и что программа запустилась. Так как скетч служит лишь для того, чтобы показать, как записать данные из Arduino в RTC DS1307, то в нем отсутствует вспомогательный функционал (проверка, попадают ли значения в допустимые диапазоны; зацикливание при нажимании на кнопку увеличения значения, то есть сброс на 0, когда значение, например, минут превысит 60, и т.д.)

    Заключение

    В данной статье мы рассмотрели микросхему DS1307 от Maxim Integrated и написали две демонстрационные программы: одну для установки времени и даты и вторую для чтения времени и даты. Для проверки нажатия кнопок мы использовали прерывания, в которых также избавлялись от влияния дребезга контактов.

    Фото и видео

    Установка времени

    Считывание времени

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

    Простые часы на светодиодных матрицах.

    Автор: O-LED
    Опубликовано 19.09.2011
    Создано при помощи КотоРед.
    2011

    Многие радиолюбители, начинающие и не только любят «изобретать велосипед» – строить СВОИ электронные часы. Не обошла эта участь и меня. Конструкций часов в инете сегодня конечно предостаточно, но вот часов на светодиодных матрицах почему-то среди них единицы. В русскоговорящем интернете я нашел только одну полностью законченную конструкцию. В тоже время, светодиодные матрицы сейчас очень сильно подешевели, и их стоимость не выше, а то и ниже, чем у семисегментных индикаторов такого же размера. Например примененные мной GNM23881AD при размере 60х60мм были куплены за 1,5уе (3 индикатора обошлись в 4,5уе) за эти деньги вы вряд ли купите четыре семисегментника таких-же размеров). А вот информации, разместить на матричном индикаторе, можно намного больше. Кроме цифр на них можно отображать буквы, знаки, а с помощью бегущей строки еще и текст. Исходя из этого, появилось желание построить часы на светодиодных матрицах, но чтоб схема при этом получилась не сложнее чем на семисегментниках. Также хотелось чтоб она была достаточно функциональна и не похожа на другие. Так родилась следующая схема.

    Функционал у часов такой:

    • Отсчет времени, календарь, день недели. (високосный год учитывается, переход на летнее/зимнее время не осуществляется).
    • Сохранение хода часов при пропадании внешнего питания (потребление составляет 15мка).
    • Коррекция хода + – 59,9сексутки, с шагом 0,1сек.
    • 9 будильников. 3 из которых «одноразовые», и 6 «постоянных», индивидуально настраиваемых по дням недели.
    • Индивидуально настраиваемая длительность звукового сигнала каждого будильника (1-15мин).
    • Звуковое подтверждение нажатия кнопок (возможно отключить).
    • Ежечасный звуковой сигнал (возможно отключить). С 00-00 до 08-00 сигнал не подаётся.
    • 1 или 2 датчика температуры (Улица и дом).
    • Настраиваемая бегущая строка, посредством которой выводится вся информация (кроме времени)
    • Значение коррекции хода, и настройки «бегущей строки» – сохраняются даже при пропадании резервного питания.

    «Сердцем» часов выбрана AtMega16A, из-за её доступности, дешевизны и «ногастости». Схему хотелось максимально упростить, поэтому все что можно, было возложено на контроллер. В результате удалось обойтись всего двумя микросхемами, контроллером и регистром с мощными выходами TPIC6B595. Если кому то недоступен TPIC6B595, то можно его заменить на 74НС595 + ULN2803. Оба варианта были опробованы. Так же можно попробовать применить TPIC6С595, она немного слабовата, и слегка грелась, но в целом работала стабильно. Отсчет времени производится с помощью асинхронного тайме – Т2. Ход часов продолжается и при пропадании питания. В это время бОльшая часть схемы обесточена, и только контроллер получает питание от батарейки, аккумулятора , или от ионистора. Мне было интересно «по играться» с ионистором, поэтому применил его. Ток потребления часами в дежурном режиме составляет 15мка. При питании от ионистора на 1Ф, часы «продержались» четверо суток. Этого вполне достаточно для поддержания хода во время перебоев питания. Если применить батарейку СR2032, то теоретически, по расчетам заряда должно хватить на 1,5года. Наличие сетевого напряжения контроллер «слушает» через вывод РВ.3. Напряжение питания, через делитель R2-R3 подается на вывод РВ.3, и в нормальном состоянии равно примерно 1,5в. Если внешнее напряжение упадет ниже 4,1 вольта, то напряжение на выводе РВ.3 станет меньше 1,23вольта, при этом сгенерируется прерывание от компаратора, и в обработчике этого прерывания выключаются все «лишние» узлы контроллера и сам контроллер усыпляется. В этом режиме продолжает работать только отсчитывающий время таймер Т2. При появлении внешнего питания, напряжение на РВ.3 сново подымится выше 1,23в, контроллер «увидев» это, переведет все узлы в рабочее состояние. Если вместо ионистора, будет использоваться батарейка СR2032, то её нужно подключить через диод(предпочтительно диод шоттки). Анод диода подключается к + батарейки, а катод к катоду VD1.

    В обычном режиме на экране отображается время в формате часы-минуты. С интервалом в одну минуту происходит запуск бегущей строки. Бегущей строкой отображается день недели, дата, год, темп. дома, и темп. на улице. Бегущая строка настраиваемая, т.е. можно включить/выключить отображение любого из элементов. (я например всегда отключаю отображение года). При выключении отображения всех элементов бегущей строки, она не запускается вовсе, и часы постоянно отображают только время.

    9 будильников разделены на 3 одноразовых и 6 многоразовых. При включении будильников 1-3, они срабатывают только один раз. Для того чтоб они сработали еще раз, их нужно повторно включать вручную. А будильники 4-9 многоразовые, т.е. они будут срабатывать ежедневно, в установленное время. Кроме того эти будильники можно настроить на сработку только в определенные дни недели. Это удобно, например если не хотите чтоб будильник разбудил Вас в выходные. Или например Вам нужно просыпаться в будние дни в 7-00, а в четверг в 8-00, а на выходных будильник не нужен. Тогда настраиваем один многоразовый на 7-00 в понедельник-среду и пятницу, а второй на 8-00 в четверг….. Кроме того все будильники имеют настройку длительности сигнала, и если Вам, для того чтоб проснуться, мало сигнала в течении 1 минуты, то можно увеличить его на время от 1 до 15мин.

    Коррекция хода производится один раз в сутки, в 00-00. Если часы спешат к примеру на 5 сек в сутки, то в 00-00-00 время установится в 23-59-55, если же часы отстают на 5 сек, то в 00-00-00 время установится в 00-00-05. Шаг коррекции – 0,1 сек. Максимальная коррекция – 59,9 сек/сутки. С исправным кварцем больше вряд ли понадобиться. Коррекция осуществляется и в дежурном режиме при питании от батареи.

    Светодиодные матрицы можно использовать любые 8*8 светодиодов с общим катодом. Как уже было указано, я применил GNM23881AD. В принципе можно «набрать» матрицу и из отдельных светодиодов. Микроконтроллер AtMega16a можно заменить на «старый» AtMega16 с буквой L. При этом, теоретически должен немного увеличится ток потребления от батарейки. Наверное будет работать и просто AtMega16, но могут возникнуть проблемы при работе от 3х вольтовой батарейки. Диод D1 – желательно любой диод шоттки. С обычным выпрямительным тоже работает, но чтоб обезопасить себя от различных глюков, связанных с тем что часть схемы питается напряжением «до диода», а часть «после диода» лучше поискать шоттки. Транзистор VT1 – любой n-p-n.

    Управление часами осуществляется двумя кнопками. Их количество можно было довести до 8шт, не добавляя больше вообще ни одного компонента, кроме самих кнопок, но захотелось попробовать «выкрутится» всего двумя. Кнопки условно названы «ОК» и «ШАГ». Кнопкой «ШАГ» как правило происходит переход к следующему пункту меню, а кнопкой «ОК» изменение параметров текущего меню. Сигнал сработавшего будильника также выключается кнопками «ОК» или «ШАГ». Нажатие любой кнопки во время сигнала будильника отключает его. Схема управления получилась такой:

    Конструктивно часы выполнены на одной ПП. Размер ПП соответствует размеру индикаторов. Минимальная ширина дорог ПП – 0,4мм, расстояние между – 0,4мм. Так что любители «ЛУТа» смогут без труда изготовить плату самостоятельно.

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

    Корпус спаян из стеклотекстолита, прошпаклеван и покрашен в цвет «спелая вишня». Стекло передней панели – обычное тонированное стекло.

    OLED часы на arduino

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

    Список необходимых компонентов:

    • Часовой модуль DS1307 – 1 шт.
    • Датчик температуры DS18B20 – 1 шт.
    • OLED I2C дисплей 0.96″ – 1 шт.
    • Плата Arduino nano V 3.0 – 1 шт.

    Для начала нам потребуется скачать и установить необходимые библиотеки:

    • DS1307
    • OneWire
    • OLED I2C RUS

    Далее подключаем все по схеме

    и загружаем первый пробный скетч для проверки работоспособности дисплея и часового модуля

    после загрузки скетча у нас на дисплее отобразятся часы как на фото

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

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

    и еще закомментируем строки

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

    теперь изменим отображения месяца, добавив в скетч строки

    Почему надписи в скетче отображаются непонятным набором символов читайте в этой статье Русские и украинские шрифты для OLED I2C дисплея

    Теперь наши часики будут выглядеть как на фото.

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

    Ну а теперь, еще более усовершенствуем наши OLED часы и добавим к ним отображение температуры, которую мы будем считывать с датчика температуры DS18B20.

    Для отображения рисунка с градусником на OLED дисплее и значка градуса выберем картинку с рисунком градусника и с помощью графического редактора сохраним ее в формате GIF с именем term.gif, и тоже самое проделаем с картинкой с значком градуса — сохраним ее как grad.gif.

    картинки должны быть двухцветными (белый и черный), доступные форматы картинок png, jpg, gif

    У меня картинка term.bmp имеет размеры 19×40 пикселей, а картинка grad.bmp 13×12 пикселей. Потом нам потребуется конвертировать две картинки с помощью онлайн-сервиса www.rinkydinkelectronics.com

    выбираем наш файл изображения и жмем Make File

    Жмем на Click here to download your file и сохраняем файл grad.c в папку с нашим скетчем, тоже самое проделываем с другим изображением. Сохраняем и закрываем скетч. При повторном открытии он будет иметь еще две вкладки с файлами изображений.

    После этого добавим две строки в скетч, которые инициализируют наши файлы изображений

    а потом отобразим наши изображения на экране OLED дисплея, добавив строки

    Добавим в наш скетч на два цикла. В первом цикле у нас будет отображаться время – назовем его void watch(); Второй цикл будет считывать и отображать температуру void temp();

    А в основном цикле void loop(); пропишем для ротации циклов несколько строчек кода

    В цикле void temp(); пропишем кусочек кода для считывания и отображения температуры

    В цикле void watch(); пропишем наш код, который отвечает за отображение времени

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

    Рейтинг
    ( Пока оценок нет )
    Понравилась статья? Поделиться с друзьями:
    Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: