Подключение часов реального времени ds1302 к Arduino
Итак, часы реального времени. Эта полезная штучка решает большинство полезных задач, связанных со временем. Допустим управление поливом в 5 часов утра на даче. Или включение и выключение освещения в определённый момент. По дате можно запускать отопление в каком-нибудь доме. Вещь достаточно интересная и полезная. А конкретно? Мы с вами рассмотрим часы реального времени DS1302 для популярной платформы Arduino.
Из этой статьи вы узнаете:
У меня ни на минуту не покидает мысль об этом. Я сплю и вижу, когда мы наконец — то придём к тому, что каждый сможет позволить себе купить персонального робота — помощника
Не важно, чем он будет заниматься, уборкой мусора, стрижкой газонов, мойкой автомобиля
Я просто представляю себе, насколько сложные алгоритмы они должны содержать в своих «мозгах».
Ведь мы придём к тому, что мы будем так же прошивать ПО, как на персональных компах. Так же скачивать прикладные программы. Пришивать руки, ноги, менять клешни, манипуляторы.
Посмотрите фильмы «Я-робот», «Искусственный интеллект», «Звёздных воинов».
Японцы уже давно внедряют свои разработки. Чем мы хуже?? У нас очень слабая популярность. Я знаю немногих разработчиков. По пальцам пересчитать. Мы занимаемся другим. Мы перекупщики. Просто покупаем готовые наборчики, роботов — игрушек и всякую дребедень.
Почему не разрабатываем вот это:
Я закончил свои размышления вслух. Давайте мы с вами поговорим о подключении Таймера часов реального времени DS1302 к Arduino.
Работа программного обеспечения
Интерфейс DS5000
Программа, приведённая в Приложении, написана для взаимодействия DS5000 с DS1307 с помощью двухпроводного интерфейса. DS5000 запрограммирован с использованием макетной платы DS5000T фирмы Dallas Semiconductor, которая позволяет использовать ПК в качестве терминала ввода/вывода. Программные средства KIT5K поставляемые вместе с макетной платой DS5000T обеспечивают высокоуровневый интерфейс для загрузки программных приложений в DS5000 или установки его параметров через Program command. Программное обеспечение KIT5K содержит эмулятор терминала ввода/вывода, чтобы позволить пользователю запускать программные приложения в микроконтроллер DS5000, который связан с пользователем через COM порт ПК.
Исходный код DS1307
Первый раздел исходного кода, расположенный в Приложении, используется при конфигурации DS5000 для последовательного соединения с ПК. Также в начале кода находится подпрограмма MASTER_CONTROLLER, которая используется для управления демонстрационной программой.
Подпрограммы, которые следуют непосредственно за подпрограммой MASTER_CONTROLLER, являются драйверами низкого уровня и служат для управления двухпроводным интерфейсом. Они не являются индивидуальными для DS1307, а могут быть использованы с любым совместимым с двухпроводным интерфейсом «ведомым» устройством. Вот эти подпрограммы:
SEND_START
Подпрограмма используется для генерации состояния START на двухпроводной шине.
SEND_STOP
Подпрограмма используется для генерации состояния STOP на двухпроводной шине.
SEND_BYTE
Подпрограмма посылает 8-разрядное слово (первым является старший значащий бит (MSB)) по двухпроводной шине и девятый тактовый импульс для импульса подтверждения приёма.
READ_BYTE
Подпрограмма читает 8-разрядное слово с двухпроводной шины. Она проверяет очищен ли флаг LASTREAD после того, как считан последний байт из «ведомого» устройства. Если это был не последний байт, то DS5000 посылает импульс подтверждения по девятому тактовому импульсу, а если это был последний считанный байт из «ведомого» устройства, то DS5000 посылает «неподтверждение».
SCL_HIGH
Подпрограмма осуществляет переход линии SCL из низкого в высокое состояние и обеспечивает высокое состояние линии SCL перед продолжением.
DELAY и DELAY_4
Эти две подпрограммы включены для обеспечения сохранения временной диаграммы двухпроводной шины.
Остальная часть кода, включённая в приложение, специально предназначена для демонстрации функций DS1307. Продемонстрированы следующие функции:
Setting Time
Время считывается с клавиатуры и сохраняется в сверхоперативной памяти DS5000. Затем оно передаётся по двухпроводной шине в DS1307.
Set RAM
Одиночный байт в шестнадцатеричном виде считывается с клавиатуры и записывается в RAM DS1307.
Read Date/Time
Дата и время считываются по двухпроводной шине и сохраняются в сверхоперативной памяти DS5000. Затем они выводятся на экран. Это продолжается до тех пор, пока не будет нажата кнопка на клавиатуре.
OSC On/OSC Off
Тактовый генератор DS1307 может быть включен или выключен.
Функция SQW/OUT может быть включена или выключена. Она будет переключаться на частоте 1 Гц.
Таблица 1. AC электрические характеристики
Параметр | Символ | Эффективноезначение | Единицы |
Тактовая частота SCL | fSCL | 59 | кГц |
Время свободного состояния шины между состояниями STOP и START | tBUF | 5.7 | мкс |
Время удержания(повторенного) состояния START | tHD:STA | 6.2 | мкс |
Период низкого состояния тактового импульса SCL | tLOW | 10.5 | мкс |
Период высокого состояния тактового импульса SCL | tHIGH | 6.5 | мкс |
Время установки для повторного состояния START | tSU:STA | 5.3 | мкс |
Время удержания данных | tHD:DAT | 5.5 | мкс |
Время установки данных | tSU:DAT | 3.1 | мкс |
Время установки для состояния STOP | tSU:STO | 5.4 | мкс |
Заключение
Было показано, как правильно подсоединять напрямую DS1307 или любое двухпроводное «ведомое» устройство к 8051-совместимому микроконтроллеру. Соединение должно быть таким, чтобы временная диаграмма двухпроводного интерфейса на микроконтроллере не нарушалась драйверами низкого уровня. Для этого в программный код должны быть включены подпрограммы задержки. Приведённых в таблице 1 эффективных значений, придерживались при конфигурации аппаратной части, описанной в данном техническом руководстве.
Документация
Rus Пример программы на языке Асемблер | ||
100 Kb Engl Исходный фаил | ||
Rus Описание интерфейса I2C | ||
Програмное обеспечение микроконтроллеров MCS-51 | ||
200 Kb Engl Описание DS1307 — часы реального времени с IIC интерфейсом |
Главная —
Микросхемы —
DOC —
ЖКИ —
Источники питания —
Электромеханика —
Интерфейсы —
Программы —
Применения —
Статьи
Функции кнопок
На LCD шилде кнопки подписаны (смотрите на фото). Первые пять из шести доступных кнопок (button) были запрограммированы следующим образом:
Кнопка #1 (подписана SELECT) — это кнопка Menu. Эта кнопка отвечает за отображение листаемого списка доступных функций (таймер, установка будильника).
Кнопка #2 (подписана LEFT) — кнопка Select. Служит для выбора функции. Примечание: также используется для инкремента на 10 , когда выбраны часы, минуты и т.п.
Кнопки #3 и 4 (подписаны UP и DOWN) — кнопки Increment и Decrement (инкремент и декремент). Используются для уменьшения и увеличения часов и минут при настройке таймера или будильника. Используются также для переключения между временами суток AM и PM.
Кнопка #5 (подписана RIGHT) — GO! Используется для принятия выбранного значения (например, настроенных минут или часов).
Кнопка #6 (отмечена RST) — Reset, которая перезагружает наш Arduino.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!
Подключение DS1307 к дисплею LCD 1602 i2c
Схема подключения часов реального времени с дисплеем
Рассмотрим два варианта подключения модуля RTC к Arduino и текстового дисплея 1602. В первом варианте используется протокол SPI для модуля часов, поэтому к предыдущей схеме потребуется добавить только дисплей с iic модулем. А в скетче следует расскомментировать соответствующую строку. После внесения правок в схему и программу — загрузите следующий скетч в микроконтроллер.
Скетч. Часы с экраном LCD 1602 и DS1302
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1302,6,8,7); // для модуля DS1302 - RST, CLK, DAT #include <Wire.h> // библиотека для устройств I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для дисплея LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя дисплею void setup() { delay(300); LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея time.begin(); time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг } void loop() { // если прошла 1 секунда выводим время на дисплей if (millis() % 1000 == 0) { LCD.setCursor(0,0); LCD.print(time.gettime("d M Y, D")); LCD.setCursor(4,1); LCD.print(time.gettime("H:i:s")); delay(1); } }
- в данном примере с помощью команды можно выводить на текстовый экран текущее время и дату в разном формате.
При подключении экрана и модуля RTC к одной шине iic — порты SDA(A4) и SCL(A5), следует указать в скетче какой модуль используется. Схема подключения размещена выше, кроме того вы можете использовать сканер шины i2c для того, чтобы увидеть адреса устройств. Если адреса, которые установлены производителем по умолчанию вы не изменяли — соберите схему и загрузите следующий пример в плату.
Схема подключения DS1307 и LCD по i2c
Скетч. Часы с LCD 1602 и DS1302 I2C Arduino
#include <iarduino_RTC.h> iarduino_RTC time(RTC_DS1307); // для модуля DS1307 с i2C #include <Wire.h> // библиотека для устройств I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для дисплея LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя дисплею void setup() { delay(300); LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея time.begin(); time.settime(0, 30, 18, 12, 6, 20, 5); // 0 сек, 30 мин, 18 часов, 12, июня, 2020, четверг } void loop() { // если прошла 1 секунда выводим время на дисплей if (millis() % 1000 == 0) { LCD.setCursor(0,0); LCD.print(time.gettime("d M Y, D")); LCD.setCursor(4,1); LCD.print(time.gettime("H:i:s")); delay(1); } }
Модуль 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В;
Во второй группе контактов находятся:
- SQ – 1 МГц;
- 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. Это связано с тем, что в часах пропадает питание, и отсчет времени прекратится. По этой причине нельзя вытаскивать батарею во время работы модуля.
Чтобы провести настройку времени на модуле, нужно в скетче найти строку
RTC.adjust(DateTime(__DATE__, __TIME__));
В этой строке будут находиться данные с компьютера, которые используются ля прошивки модуля часов реального времени. Для корректной работы нужно сначала проверить правильность даты и времени на компьютере, и только потом начинать прошивать модуль часов. После настройки в мониторе отобразятся следующие данные:
Настройка произведена корректно и дополнительно перенастраивать часы реального времени не придется.
Считывание времени. Как только модуль настроен, можно отправлять запросы на получение времени. Для этого используется функция now(), возвращающая объект DateTime, который содержит информацию о времени и дате. Существует ряд библиотек, которые используются для считывания времени. Например, RTC.year() и RTC.hour() – они отдельно получают информацию о годе и часе. При работе с ними может возникнуть проблема: например, запрос на вывод времени будет сделан в 1:19:59. Прежде чем показать время 1:20:00, часы выведут время 1:19:00, то есть, по сути, будет потеряна одна минута. Поэтому эти библиотеки целесообразно использовать в случаях, когда считывание происходит нечасто – раз в несколько дней. Существуют и другие функции для вызова времени, но если нужно уменьшить или избежать погрешностей, лучше использовать now() и из нее уже вытаскивать необходимые показания.
Подключение и настройка
Часы реального времени общаются с управляющей электроникой по протоколу I²C / TWI. Для подключения используется два 3-проводных шлейфа. При подключении модуля к Arduino удобно использовать Troyka Shield.
Если хотите оставить минимум проводов —
воспользуйтесь Troyka Slot Shield.
Пример работы с Arduino
- testClock.ino
-
// библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // размер массива для времени #define LEN_TIME 12 // размер массива для даты #define LEN_DATE 12 // размер массива для дня недели #define LEN_DOW 12 // создаём объект для работы с часами реального времени RTC clock; // массив для хранения текущего времени char timeLEN_TIME; // массив для хранения текущей даты char dateLEN_DATE; // массив для хранения текущего дня недели char weekDayLEN_DOW; void setup() { // открываем последовательный порт Serial.begin(9600); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную // clock.set(10,25,45,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции clock.set(__TIMESTAMP__); // что бы время менялось при прошивки или сбросе питания // закоментируйте оба метода clock.set(); } void loop() { // запрашиваем данные с часов clock.read(); // сохраняем текущее время, дату и день недели в переменные clock.getTimeStamp(time, date, weekDay); // выводим в serial порт текущее время, дату и день недели Serial.print(time); Serial.print("\t"); Serial.print(date); Serial.print("\t"); Serial.println(weekDay); // ждём одну секунду delay(1000); }
Пример работы с Iskra JS
В качестве примера выведем в «поле консоли» текущее время, дату и день недели. Для запуска примера понадобится библиотека для Iskra JS. Она обеспечивает простую работу с модулем и прячет в себе все тонкости протокола обмена данными между часами реального времени и управляющей платой.
- rtc.js
-
// Настраиваем шину I2C PrimaryI2C.setup({sda SDA, scl SCL, bitrate 100000}); // Создаем новый объект Rtc var rtc = require('@amperka/rtc').connect(PrimaryI2C); // Устанавливаем на часах текущее время контроллера rtc.setTime(); // Результат в виде строки ISO: 2016-21-1T12:1:14 print(rtc.getTime('iso'));
Способ программирования Arduino для работы с DS1302
Обязательно нужно скачать действующую библиотеку из надёжных источников.
Библиотека позволяет считывать и записывать параметры реального времени. Небольшое описание я привожу ниже:
#include // Подключаем библиотеку.iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ ]] ); // Создаём объект.
Функция begin (); // Инициализация работы RTC модуля.
Функция settime ( СЕК ]]]]] ); // Установка времени.
Функция gettime ( ); // Чтение времени.
функция blinktime ( ПАРАМЕТР ); // Заставляет функцию gettime «мигать» указанным параметром времени.
функция period ( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах.
Переменная seconds // Возвращает секунды от 0 до 59.
Переменная minutes// Возвращает минуты от 0 до 59.
Переменная hours // Возвращает часы от 1 до 12.
Переменная Hours // Возвращает часы от 0 до 23.
Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm).
Переменная day // Возвращает день месяца от 1 до 31.
Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).
Переменная month // Возвращает месяц от 1 до 12.
Переменная year // Возвращает год от 0 до 99.
Пишем простенькую программу. Установка текущего времени в RTC модуль (DS1302):
Источник
➤
Сравнение популярных модулей RTC DS1302, DS1307, DS3231
В этой таблице мы привели список наиболее популярных модулей и их основные характеристики.
Название | Частота | Точность | Поддерживаемые протоколы |
DS1307 | 1 Гц, 4.096 кГц, 8.192 кГц, 32.768 кГц | Зависит от кварца – обычно значение достигает 2,5 секунды в сутки, добиться точности выше 1 секунды в сутки невозможно. Также точность зависит от температуры. | I2C |
DS1302 | 32.768 кГц | 5 секунд в сутки | I2C, SPI |
DS3231 | Два выхода – первый на 32.768 кГц, второй – программируемый от 1 Гц до 8.192 кГц | ±2 ppm при температурах от 0С до 40С.
±3,5 ppm при температурах от -40С до 85С. Точность измерения температуры – ±3С |
I2C |
Подключение часов реального времени ds1302 к Arduino
Итак, часы реального времени. Эта полезная штучка решает большинство полезных задач, связанных со временем. Допустим управление поливом в 5 часов утра на даче. Или включение и выключение освещения в определённый момент. По дате можно запускать отопление в каком-нибудь доме. Вещь достаточно интересная и полезная. А конкретно? Мы с вами рассмотрим часы реального времени DS1302 для популярной платформы Arduino.
Из этой статьи вы узнаете:
У меня ни на минуту не покидает мысль об этом. Я сплю и вижу, когда мы наконец — то придём к тому, что каждый сможет позволить себе купить персонального робота — помощника
Не важно, чем он будет заниматься, уборкой мусора, стрижкой газонов, мойкой автомобиля
Я просто представляю себе, насколько сложные алгоритмы они должны содержать в своих «мозгах».
Ведь мы придём к тому, что мы будем так же прошивать ПО, как на персональных компах. Так же скачивать прикладные программы. Пришивать руки, ноги, менять клешни, манипуляторы.
Посмотрите фильмы «Я-робот», «Искусственный интеллект», «Звёздных воинов».
Японцы уже давно внедряют свои разработки. Чем мы хуже?? У нас очень слабая популярность. Я знаю немногих разработчиков. По пальцам пересчитать. Мы занимаемся другим. Мы перекупщики. Просто покупаем готовые наборчики, роботов — игрушек и всякую дребедень.
Почему не разрабатываем вот это:
Я закончил свои размышления вслух. Давайте мы с вами поговорим о подключении Таймера часов реального времени DS1302 к Arduino.
Пример проекта с i2C модулем часов и дисплеем
Проект представляет собой обычные часы, на индикатор будет выведено точное время, а двоеточие между цифрами будет мигать с интервалом раз в одну секунду. Для реализации проекта потребуются плата Arduino Uno, цифровой индикатор, часы реального времени (в данном случае вышеописанный модуль ds1307), шилд для подключения (в данном случае используется Troyka Shield), батарейка для часов и провода.
В проекте используется простой четырехразрядный индикатор на микросхеме TM1637. Устройство обладает двухпроводным интерфейсом и обеспечивает 8 уровней яркости монитора. Используется только для показа времени в формате часы:минуты. Индикатор прост в использовании и легко подключается. Его выгодно применять для проектов, когда не требуется поминутная или почасовая проверка данных. Для получения более полной информации о времени и дате используются жидкокристаллические мониторы.
Модуль часов подключается к контактам SCL/SDA, которые относятся к шине I2C. Также нужно подключить землю и питание. К Ардуино подключается так же, как описан выше: SDA – A4, SCL – A5, земля с модуля к земле с Ардуино, VCC -5V.
Индикатор подключается просто – выводы с него CLK и DIO подключаются к любым цифровым пинам на плате.
Скетч. Для написания кода используется функция setup, которая позволяет инициализировать часы и индикатор, записать время компиляции. Вывод времени на экран будет выполнен с помощью loop.
#include
#include «TM1637.h»
#include «DS1307.h» //нужно включить все необходимые библиотеки для работы с часами и дисплеем.
char compileTime = __TIME__; //время компиляции.
#define DISPLAY_CLK_PIN 10
#define DISPLAY_DIO_PIN 11 //номера с выходов Ардуино, к которым присоединяется экран;
void setup()
{
display.set();
display.init(); //подключение и настройка экрана.
clock.begin(); //включение часов.
byte hour = getInt(compileTime, 0);
byte minute = getInt(compileTime, 2);
byte second = getInt(compileTime, 4); //получение времени.
clock.fillByHMS(hour, minute, second); //подготовка для записывания в модуль времени.
clock.setTime(); //происходит запись полученной информации во внутреннюю память, начало считывания времени.
}
void loop()
{
int8_t timeDisp; //отображение на каждом из четырех разрядов.
clock.getTime();//запрос на получение времени.
timeDisp = clock.hour / 10;
timeDisp = clock.hour % 10;
timeDisp = clock.minute / 10;
timeDisp = clock.minute % 10; //различные операции для получения десятков, единиц часов, минут и так далее.
display.display(timeDisp); //вывод времени на индикатор
display.point(clock.second % 2 ? POINT_ON: POINT_OFF);//включение и выключение двоеточия через секунду.
}
char getInt(const char* string, int startIndex) {
return int(string — «0») * 10 + int(string) — «0»; //действия для корректной записи времени в двухзначное целое число. В ином случае на экране будет отображена просто пара символов.
}
После этого скетч нужно загрузить и на мониторе будет показано время.
Программу можно немного модернизировать. При отключении питания выше написанный скетч приведет к тому, что после включения на дисплее будет указано время, которое было установлено при компиляции. В функции setup каждый раз будет рассчитываться время, которое прошло с 00:00:00 до начала компиляции. Этот хэш будет сравниваться с тем, что хранятся в EEPROM, которые сохраняются при отключении питания.
Для записи и чтения времени в энергонезависимую память или из нее нужно добавить функции EEPROMWriteInt и EEPROMReadInt. Они нужны для проверки совпадения/несовпадения хэша с хэшем, записанным в EEPROM.
Можно усовершенствовать проект. Если использовать жидкокристаллический монитор, можно сделать проект, который будет отображать дату и время на экране. Подключение всех элементов показано на рисунке.
В результате в коде нужно будет указать новую библиотеку (для жидкокристаллических экранов это LiquidCrystal), и добавить в функцию loop() строки для получения даты.
Алгоритм работы следующий:
- Подключение всех компонентов;
- Проверка – на экране монитора должны меняться ежесекундно время и дата. Если на экране указано неправильное время, нужно добавить в скетч функцию RTC.write (tmElements_t tm). Проблемы с неправильно указанным временем связаны с тем, что модуль часов сбрасывает дату и время на 00:00:00 01/01/2000 при выключении.
- Функция write позволяет получить дату и время с компьютера, после чего на экране будут указаны верные параметры.
Способ программирования Arduino для работы с DS1302
Обязательно нужно скачать действующую библиотеку из надёжных источников.
Библиотека позволяет считывать и записывать параметры реального времени. Небольшое описание я привожу ниже:
#include // Подключаем библиотеку.iarduino_RTC ОБЪЕКТ ( НАЗВАНИЕ ]] ); // Создаём объект.
Функция begin (); // Инициализация работы RTC модуля.
Функция settime ( СЕК ]]]]] ); // Установка времени.
Функция gettime ( ); // Чтение времени.
функция blinktime ( ПАРАМЕТР ); // Заставляет функцию gettime «мигать» указанным параметром времени.
функция period ( МИНУТЫ ); // Указывает минимальный период обращения к модулю в минутах.
Переменная seconds // Возвращает секунды от 0 до 59.
Переменная minutes// Возвращает минуты от 0 до 59.
Переменная hours // Возвращает часы от 1 до 12.
Переменная Hours // Возвращает часы от 0 до 23.
Переменная midday // Возвращает полдень 0 или 1 (0-am, 1-pm).
Переменная day // Возвращает день месяца от 1 до 31.
Переменная weekday // Возвращает день недели от 0 до 6 (0-воскресенье, 6-суббота).
Переменная month // Возвращает месяц от 1 до 12.
Переменная year // Возвращает год от 0 до 99.
Пишем простенькую программу. Установка текущего времени в RTC модуль (DS1302):
Источник
Библиотека 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 можно получать различную информацию:
blinktime(параметр) — указывает функции gettime мигать одним из параметров времени
period(минуты) — устанавливает период обращения к модулю в минутах (от 0 до 255)
Источник
Модуль DS1302 (RTC): схема, описание
Ориентация по времени полезна при создании устройства для автоматического полива растений, включении света или отопления по строгому расписанию и т.д. Контроллер Arduino не имеет встроенных часов, поэтому при необходимости выполнения задач микроконтроллером Arduino Uno в строго определенное время суток, понадобится использовать в проекте модуль часов DS1302 или ближайшие аналоги.
Микросхема отличается низким энергопотреблением и позволяет отсчитывать время с точностью до секунд. Подключение ds1302 к Ардуино осуществляется с помощью пяти контактов. Выводы VCC и Gnd отвечают за питание модуля. Контакты CLK,DAT и RESX подключают к цифровым пинам микроконтроллера. В скетче можно самим указать задействованные цифровые пины (в нашем примере использован 6,7 и 8 пин).
Заключение
Модули часов используются во многих проектах. Они нужны для систем регистрации данных, при создании таймеров и управляющих устройств, которые работают по заданному расписанию, в бытовых приборах. С помощью широко распространенных и дешевых модулей вы можете создать такие проекты как будильник или регистратор данных с сенсоров, записывая информацию на SD-карту или показывая время на экране дисплея. В этой статье мы рассмотрели типичные сценарии использования и варианты подключения наиболее популярных видов модулей.
С момента приобретения arduino, все никак не было или возможности или времени что-то сделать, начать «изучать» это дело. Но всегда был интерес к любому программированию будь то C, VHDL и прочее.
И вот однажды попал мне в руки экранчик lcd1602, где-то раньше читал, что его под ардуинку собирают. А у меня как раз с распайкой под пины, наверное от какого-нибудь ардуновского набора. Ну и решил, что надо бы его проверить, но проверить его простым включением и выводом текста не слишком интересно. Так и появилась идея написать банально часы и выводить это всё на экранчик.
Наверное стоит обговорить еще тот факт, что это самые простые часы, без кнопок, будильников, погоды и прочего.
После чтения даташитов и изучения информации по подключению экрана к ардуинке получил следующую схему:
При подключении ардуино к usb увидите, что экран загорится синим. На нем должны появится квадратики (экран проинициализирован), если вы их не видите попробуйте покрутить переменный резистор.
Приступим к написанию кода. Логика программы думаю понятна всем, она ровным счетом такая же, как и в любых часах. То есть: Считаем секунды, дошли до 60 — прибавляем минуту, секунды обнуляем, минуты дошли до 60, прибавляем час, обнуляем минуты и секунды.
Вот собственно и сам код программы, с подробнейшими комментариями:
#include //Подключим библиотеку для работы с дисплеем
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (RS, E, DB4, DB5, DB6, DB7) //Подключение лисплея к пинам ардуино в моем случае УНО
int m=9; //минуты
int h=13; //часы
int s=55; //секунды
void setup()
{ }
void loop()
{
s=s+1; //считаем секунды
delay(990); //пауза для отсчета секунд (подбирается эксперементально)
if (s==60) //при 60секундах
{
s=0; //обнуляем секунды
m=m+1; //добавляем минуту
if(m==60) //при 60 минутах
{
m=0; // обнуляем минуты
h=h+1; //добавляем час
}
}
//Вывод на дисплей
//Вывод времени
lcd.begin(16, 2); //Задаем размерность экрана формат: кол-во символов в строке на кол-во строк
lcd.setCursor(0, 0); //Устанавливаем курсор в начало 1й строки
lcd.print(«Time:»); //Выводим надпись «Time:»
lcd.setCursor(6, 0); //Устанавливаем курсор в 6й знак, 1й строки
lcd.print(h); //Выводим часы
lcd.setCursor(8, 0); //Устанавливаем курсор в 8й знак, 1й строки
lcd.print(«:»); //Вывод двоеточие
lcd.setCursor(9, 0); //Устанавливаем курсор в 8й знак, 1й строки
lcd.print(m); //выводим минуты
lcd.setCursor(11, 0); //Устанавливаем курсор в 8й знак, 1й строки
lcd.print(«:»); // Вывод двоеточие
lcd.setCursor(12, 0); //Устанавливаем курсор в 8й знак, 1й строки
lcd.print(s); //Выводим секунды
}
Всё! Готово, прошиваемся и смотрим что получилось:
Всё, работает. Надеюсь что статья поможет кому-нибудь. Если будет интересно, то напишу следуюущую статью, где сделаем часы + дата
Спасибо за внимание
Проект, который отлично впишется в интерьер вашего DIY угла, комнаты, гаража или офиса, в котором вы собираете роботов и всякие гиковские автоматизированные проекты на Arduino.
На выходе проекта вы получите в пределах одного модуля следующие фичи:
- Часы!;
- Отображение даты и времени на LCD экране;
- Встроенный счетчик времени (для того, чтобы засекать время, затраченное на один проект);
- Будильник (чтобы напоминать о том, что вы засиделись и пора устроить себе разминку);
- Отслеживание движения (сберегает заряд аккумулятора, отключая LCD экран, когда вас нет рядом);
- Отлично впишется в ваш интерьер Arduino-разработчика!