Модуль часов реального времени RTC DS1302
Часы реального времени DS1302 для платформы Arduino.
Контроллер Arduino (Ардуино) не имеет своих собственных часов.
А ведь эта полезная опция может решать множество задач. Например, включить полив, включить или выключить освещение, запустить отопление по дате и т. п.
Модуль часов реального времени RTC построен на базе DS1302 и требует всего 3 В для работы.
Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом високосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). Подключение DS1302 к микропроцессу упрощено за счет синхронной последовательной связи. Для этого требуется только 3 провода: (1) RST (сброс), (2) I/O (линия данных) и (3) SCLK (синхронизация последовательной связи). Данные могут передаваться по одному байту или последовательностью байтов до 31. DS1302 разработан, чтобы потреблять малую мощность и сохранять данные и информацию часов при потреблении менее 1 мкВт. DS1302 — преемник DS1202. В дополнение к основным функциям хранения времени DS1302 имеет два вывода питания для подключения основного и резервного источника питания, возможность подключения программируемой цепи заряда к выводу VCC1 и семь дополнительных байтов ОЗУ.
- Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом високосности текущего года вплоть до 2100 г.
- Дополнительное ОЗУ 31 x 8 для хранения данных.
- Последовательный ввод – вывод информации для сокращения выводов микросхемы.
- Напряжение питания: 2.0 — 5.5 В.
- Потребление не более 300 мA при 2.5 В питания.
- Чтение и запись информации по одному байту или потоком.
- Простой 3-проводной интерфейс.
- Совместимость с TTL-микросхемами (Vcc= 5В).
- Рабочая температура модуля: от 0 ° C ~ + 70 ° C
- Размер: 50 x 21 x 12 мм
Обозначение выводов модуля:
VCC — плюс питания
GND — минус питания
CLK — тактирующий сигнал (Clock), подключают к цифровому пину на плате
DAT — подключают к цифровому пину на плате
RST — сброс, подключают к цифровому пину на плате
Модуль может использовать свой элемент питания, или запитываться непосредственно с платы Arduino.
Для работы с модулем рекомендуем установить специальную библиотеку для модулей семейства DS.
Универсальная библиотека для RTC DS1302, DS1307, DS3231 к Arduino (архив ZIP размер 16.4 КБ)
Tiny RTC i2c Часы Реального Времени
Описание
Небольшой модуль, выполняющий функции часов реального времени. Выполнен на базе микросхемы DS1307ZN+. Непрерывный отсчет времени происходит благодаря автономному питанию от батареи, установленной в модуль. Также модуль содержит память EEPROM объемом 32 Кбайт, сохраняющую информацию при отключении всех видов питания. Память и часы связаны общей шиной интерфейса I2C. На контакты модуля выведены сигналы шины I2C. При подключении внешнего питания происходит подзарядка батареи через примитивную цепь подзарядки. На плате имеется место для монтажа цифрового датчика температуры DS18B20. В комплект поставки он не входит.
Основные технические характеристики:• Подсчет реального времени в секундах, минутах, часах, датах месяца, месяцах, днях недели и годах с учетом високосного года вплоть до 2100 г.
• 56 байт энергонезависимого ОЗУ для хранения данных
• 2-х проводной последовательный интерфейс
• Программируемый генератор прямоугольных импульсов. Может выдавать 1 ГЦ, 4.096 кГЦ, 8,192 кГЦ и 32,768 кГц.
• Автоматическое определение отключения основного источника питания и подключение резервного
• 24-х часовой и 12-ти часовой режим
• Потребление не более 500 нA при питании от резервной батареи питания при температуре 25C° (батарея CR2032 в комплект не входит)
- Напряжение питания 5 В
- Размеры 27 х 28 х 8,4 мм
Электрическая схема
Устройство обменивается данными с электроникой прибора с помощью сигналов SCL и SDA. Микросхема IC2 – часы реального времени. Конденсаторы С1 и С2 снижают уровень помех в линии питания VCC. Резисторы R2 и R3 обеспечивают надлежащий уровень сигналов SCL и SDA. С вывода 7 микросхемы IC2 поступает сигнал SQ, состоящий из прямоугольных импульсов частотой 1 Гц. Он используется для проверки работоспособности МС IC2. Компоненты R4, R5, R6, VD1 обеспечивают подзарядку батареи BAT1. Для хранения данных модуль часов реального времени DS1307 содержит микросхему IC1 – долговременная память. US1 – датчик температуры. Сигналы модуля и линии питания выведены на соединители JP1 и P1.
Информационная шина
I2C это стандартный последовательный интерфейс посредством двух сигнальных линий SCL, SDA и общего провода. Линии интерфейса образуют шину. К линиям интерфейса I2C можно подключить несколько микросхем, не только микросхемы модуля. Для идентификации микросхемы на шине, а именно записи данных в требуюмую МС и определения от какой МС поступают данные. Каждая микросхема имеет уникальный адрес для проложенной шины. DS1307 имеет Адрес 0x68. Он записан на заводе-изготовителе. Микросхема памяти имеет адрес 0x50. В программное обеспечение Arduino входит программная библиотека, обеспечивающая поддержку I2C.
Микросхема часов реального времениDS1307 обладает низким энергопотреблением, обменивается данными с другими устройствами через интерфейс I2C, содержит память 56 байт. Содержит часы и календарь до 2100 г. Микросхема часов реального времени обеспечивает другие устройства информацией о настоящем моменте: секунды, минуты, часы, день недели, дата. Количество дней в каждом месяце учитывается автоматически. Есть функция компенсации для високосного года. Имеется флаг, чтобы определить, работают часы в 24-часовом режиме или 12-часовом режиме. Для работы в режиме 12 часов микросхема имеет бит, откуда считываются данные для передачи о периоде времени: до или после обеда.
Микросхема долговременной памяти
ATHYC232 24C32N относится к классу памяти EEPROM серии AT24Cxx. Для этой МС часто применяется наименование AT24C32 или 24C32. Объем хранимых данных 32 Кбайт. Производится компанией Microchip, известной своими микроконтроллерами PIC или не менее известной компанией Atmel. Передача и прием данных происходит по шине I2C. Данные хранятся при отключенном питании на протяжении десятков лет. Количество циклов записи-стирания достигает сотен тысяч.
Батарея
В держатель на обратной стороне платы устанавливается литиевая дисковая батарея CR2032. Она выпускается множеством производителей, например изготовленная фирмой GP обеспечивает напряжение 3,6 В и ток разряда 210 мАч. Батарея подзаряжается во время включения питания, с таким режимом работы литиевой батареи мы сталкиваемся на материнской плате компьютера.
Подзарядка батареи
Восстановление заряда батареи происходит током сквозь компоненты: резистор R5 и диод D1. Резисторы R4 и R6 тоже участвуют в подзарядке. Кроме своей основной функции цепи вносят небольшие отрицательные свойства. Дело в том, что при работе батареи в режиме питания модуля через R4 и R6 происходит паразитный разряд батареи. Если модуль будет работать в такой системе, где подзарядка отсутствует, то R4, R5, R6 и VD1 следует удалить. Вместо R6 установить перемычку, как изображено на фото.
Программное обеспечение
Для работы модуля в составе Arduino вполне подойдет устаревшая библиотека с сайта Adafruit под названием RTCLib. Скетч называется DS1307.pde. Существует обновленная версия. Следует скачать архив, распаковать его, переименовать и скопировать библиотеку в свой каталог библиотек Arduino.
Подключение к Arduino Mega
Подключение к Arduino Uno
DS1307 RTC Модуль часов реального времени для ARDUINO
DS1307 RTC Модуль часов реального времени для ARDUINO.
Полностью собранный модуль часов реального времени и календаря с дополнительной памятью на микросхеме DS1307 для Arduino.
Модуль часы реального времени DS1307 используется в макетах и проектах на микроконтроллерах для получения информации о реальной текущей дате и времени.
Для использования модуля нужно сначала собрать с его помощью макет, создать программу для управления и начинать работу.
Управление модулем реального времени осуществляется с помощью Arduino контроллеров или других управляющих микропроцессорных устройств используя I2C интерфейс.
Микросхема DS1307 имеет на борту программируемый генератор прямоугольных импульсов, позволяющий вырабатывать одну из четырех частот (1Гц, 4096Гц, 8192Гц или 32768Гц), которая в свою очередь может использоваться для коррекции ошибки кварцевого резонатора.
Модуль часы реального времени DS1307 имеет две колодки контактов – Р1 и Р2, а также слот для установки
батареи питания CR2032.
Колодка Р1 имеет контакты SQ, DS, SCL, SDA, VCC, GND, BAT
Колодка Р2 имеет контакты DS, SCL, SDA, VCC, GND
Питание модуля осуществляется от Arduino контроллера, другого управляющего микропроцессорного устройства или от внешнего источника питания.
Микросхема DS1307 имеет встроенный блок, определяющий аварийное отключение питания и автоматически подключающий резервную батарею. При этом отсчет времени продолжается и после восстановления питания часы показывают правильное время.
Характеристики:
работа модуля осуществляется через I2C интерфейс
модуль ведет отсчет времени – часов, минут, секунд
модуль ведет отсчет даты – год, месяц, день, учитывает високосные года
в памяти модуля записан точный календарь до 2100 года с учетом високосных годов
модуль имеет 56 байт энергозависимой памяти, доступной пользователю
Батарея питания: CR2032
габариты: 28х25х8мм
вес: 6 грамм
Модуль часов PCF8563 [База знаний «УмныеЭлементы»]
Описание
Модуль часов реального времени с независимым питанием. Контроллеры Arduino/Genuino не имеют встроенных часов реального времени. Для работы со временем есть функция millis(). Однако, для проектов где требуется время и дата, возможностей данной функции недостаточно и на помощь приходят часы реального времени.
Модуль PCF8563 — это недорогие, точные, с работой по протоколу I2C часы-календарь реального времени. В отличии от других модулей часов — имеют низкое энергопотребление, поддерживают функцию таймера, имеют встроенный календарь. Устройство содержит разъём для батареи типа CR1220 (за счёт чего модуль имеет очень маленькие размеры) и поддерживает точный отсчет времени когда питание устройства прерывается. Часы поддерживают информацию о секундах, минутах, часах, дне, дне недели, месяце и годе. Дата на конец месяца автоматически корректируется, для месяцев, содержащих менее чем 31 день, включая коррекцию по високосному году. Имеют программируемый будильник.
Основные характеристики часов:
Часы реального времени с подсчетом секунд, минут, часов, дня, месяца и года (с корректировкой дат в т.ч. по високосному году до 2100 года)
Погрешность хода: ±2 минуты в год
Программируемый будильник
Поддержка функции таймера
Флаг века
Низкое энергопотребление (от 0,25 мА при питании от 3В и температуры 25°С)
-
Работа по шине I2C
Технические характеристики
Рабочая температура: -40°С — +85°С
Температура хранения данных: -65°С — +150°С
Напряжение питания: 3,3 — 5 В
Максимальное потребление тока:
Физические размеры
Плюсы использования
Высокая точность хода часов
Наличие будильника с функцией прерывания
Широкий диапазон рабочей температуры
Функция календаря
Функция таймера
Минусы использования
Ресурсы для загрузки
Примеры подключения и использования
Пример 1
В примере иллюстрируется первоначальная настройка модуля — установка времени и даты.
Схема подключения:
Скетч для загрузки:
#include <Wire.h> //библиотека для работы с I2C #include <Rtc_Pcf8563.h> //библиотека для работы с часами Rtc_Pcf8563 rtc; //инициализация часов void setup() { //очистка регистров часов rtc.initClock(); //Установка даты: //день месяца, день недели, месяц, век(1=1900, 0=2000), год(0-99) //установим дату 30 - (суббота) - ноября - 0 века - 2025 года rtc.setDate(30, 6, 11, 0, 25); //Установка времени //часы, минуты, секунды //установим время 15 часов 45 минут 0 секунд rtc.setTime(15, 45, 0); } void loop() { }
Пример 2
В примере демонстрируется подключение часов и дисплея к Расширителю I2C. Далее происходит вывод времени, дня недели и даты на дисплей.
Схема подключения:
Подключение расширителя и устройств к нему происходит напрямую, для этого удобно использовать 4-ёх проводной шлейф. Если на устройстве выводы расположены в другом порядке, подключите к расширителю с помощью обычных проводов мама-мама (или тех, которые подходят к Вашему устройству.
Скетч для загрузки:
#include <LiquidCrystal_I2C.h> //подключение библиотеки для работы с дисплеем #include <Wire.h> //библиотека для работы с I2C #include <Rtc_Pcf8563.h> //библиотека для работы с часами LiquidCrystal_I2C lcd(0x27, 16, 2); //создание объекта дисплея с адресом и количеством символов/строк Rtc_Pcf8563 rtc; //создание объекта для работы с часами void setup() { lcd.init(); //инициализация дисплея } void loop() { lcd.home(); //установка курсора в верхний левый угол lcd.print(rtc.formatTime()); //вывод текущего времени на дисплее lcd.setCursor(0, 1); //установка курсора на вторую строку lcd.print(rtc.getWeekday()); //вывод текущего дня недели lcd.setCursor(2, 1); //установка курсора на третью ячейку lcd.print(rtc.formatDate()); //вывод даты }
Пример 3. Засыпать и просыпаться по будильнику часов
В данном примере формируется минипроект — часы с будильником. Часы показывают время на черырёхразрядном индикаторе. У устройства имеется кнопка — которая переводит контроллер в режим сна до следующей минуты, устанавливая на часах будильник на следующую за текущей минуту. Индикацией установки будильника служит появление на индикаторе надписи «ALAR» — от английского alarm (будильник). Для демонстрации того, что устройство находится в режиме сна, на дисплей выводится информация в виде четырёх тире (- — — -). По пробуждению, дисплей снова отображает время.
Библиотеки
Помимо библиотеки для работы с часами, понадобятся библиотеки для режимов сна и модуля индикатора. Их можно загрузить со страниц в Базе Знаний: Режимы сна и энергосбережение и Модуль 4 — разрядного индикатора
Схема подключения:
Скетч для загрузки
#include "SevenSegmentTM1637.h" //подключение библиотеки для работы с дисплеем #include "SevenSegmentExtended.h" //подключение расширенных функций дисплея #include <Wire.h> //библиотека для работы с I2C #include <Rtc_Pcf8563.h> //библиотека для работы с часами #include <Sleep_n0m1.h> //подключение библиотеки для режимов сна const int wakeUpPin = 3; //вывод прерывания const int button = 6; //вывод подключения кнопки Rtc_Pcf8563 rtc; //инициализация часов SevenSegmentExtended display(13, 12); //создание объекта дисплея Sleep sleep; //объект для ввода контроллера в сон void setup() { display.begin(); //инициализация дисплея display.setBacklight(100); //установка яркости в 100% display.print("INIT"); //отображение надписи INIT (инициализация) на дисплее delay(1000); //задержка в 1 секунду pinMode(button, INPUT); //режим вывода кнопки } void loop() { rtc.getTime(); //получение времени с часов byte hour = rtc.getHour(); //запись в переменную количество часов byte minute = rtc.getMinute(); //запись в переменную количество минут display.printTime(hour, minute, false); //вывод времени if (digitalRead(button)) { //была нажата кнопка set_alarm(minute); //установить будильник display.print("----"); //вывести четыре тире, означающие что контроллер спит sleep.pwrDownMode(); //установка режима сна PWR_DOWN //сон будет продолжаться пока на выводе wakeUpPin не поменяется уровень сигнала //в данном случае с "HIGH" на "LOW" sleep.sleepPinInterrupt(wakeUpPin, FALLING); //(номер вывода прерывания, состояние прерывания) //очистка будильника clr_alarm(); } } /* Процедура очищает регистры будильника на часах. * Требуется для корректной работы модуля часов. */ void clr_alarm() { detachInterrupt(1); //отключить прерывание номер 1 (вывод контроллера - 3) rtc.clearAlarm(); //очистить будильник delay(1000); //секундная задержка } /* Процедура устанавливает будильник на часах на одну минуту больше. * Здесь можно устанавливать будильник на любое время методом setAlarm(), * который принимает четыре параметра: * - минуты будильника * - часы будильника * - день будильника * - день недели будильника * Если любое из значений равно 99 - значит берется значение текущего времени. */ void set_alarm(const int& minute) { rtc.setAlarm(minute + 1, 99, 99, 99); //установка будильника на одну минуту display.clear(); //очистить дисплей display.print("ALAR"); //вывести надпись ALAR (ALARM) delay(1000); //подождать секунду display.clear(); //очистить дисплей }Учебное пособие по часам реального времени (RTC) для
Arduino с использованием DS1307
В учебном пособии по часам реального времени Arduino мы узнаем о часах реального времени (RTC) и о том, как Arduino и микросхема часов реального времени DS1307 взаимодействуют в качестве устройства измерения времени. Если вы помните, мы уже реализовали будильник Arduino с использованием RTC DS1307 в более раннем проекте.
Но этот проект не охватывал основы часов реального времени или RTC, спецификации DS1307 RTC IC и способы взаимодействия часов реального времени, таких как DS1307 или DS3231, с Arduino.
Обзор
RTC или часы реального времени — это устройство для измерения времени, обычно в форме интегральной схемы (IC). RTC питается от батареи и отслеживает текущее время даже при отсутствии питания.
Микросхемы часов реального времениприсутствуют в компьютерах, серверах, многих встроенных системах, и фактически они используются везде, где требуется для поддержания точного времени.
Также читайте: БУДИЛЬНИК ARDUINO
Зачем нам нужны часы реального времени (RTC)?
Несмотря на то, что Arduino и почти все микроконтроллеры имеют встроенные таймеры и хронометры (millis () в случае Arduino), они зависят от мощности i.е. они работают до тех пор, пока есть питание. После отключения питания (вручную или из-за отключения электроэнергии) все таймеры сбрасываются на 0.
Хотя хронометраж с использованием внутренних таймеров приемлем для простых проектов, нам нужна альтернатива в таких проектах, как регистраторы данных, часы, будильники и т. Д., Где таймер работает независимо, независимо от внешнего источника питания или если микроконтроллер (или Arduino) перепрограммирован.
Здесь используются микросхемы часов реального времени. Почти все ИС RTC — это слаботочные устройства, которые годами работают на одном литиевом элементе (обычно CR2032).Одна из популярных и наиболее часто используемых микросхем RTC — часы реального времени DS1307.
DS1307 Часы реального времени
DS1307 RTC — это недорогая ИС с малым энергопотреблением для часов реального времени, которая может поддерживать полные часы и календарь, то есть часы, минуты, секунды, а также год, месяц и день. Некоторые из хорошо известных функций популярного DS1307 RTC упомянуты ниже.
- Полная функция хронометража, т.е. часы, минуты, секунды, год с високосным годом, месяцем, числом месяца и днем недели.
- Действительно до 2100 года.
- Низкое энергопотребление: потребляет менее 500 нА при работе от батареи.
- Автоматическое переключение на питание от батареи при отключении электроэнергии.
- 24-часовой или 12-часовой формат с индикатором AM / PM.
DS1307 RTC доступен в виде модулей, которые состоят из всех необходимых компонентов, таких как аккумулятор, разъемы, подтягивающие резисторы и кристалл. Один такой модуль используется в этом проекте и показан ниже.
Схема контактов DS1307 RTC
На следующем изображении показана схема контактов микросхемы DS1307 RTC.Чтобы снизить энергопотребление, необходимо уменьшить количество выводов на ИС. Следовательно, DS1307 RTC использовал связь I2C.
Описание контактов DS1307 RTC
- X1 и X2 : это контакты для подключения кристалла с частотой 32,768 кГц для включения внутреннего генератора. Если к X1 подключен внешний генератор, то X2 можно оставить плавающим.
- VBAT : Контакт источника питания батареи. Должен быть подключен к литиевой батарее 3 В для резервного питания.
- GND : Контакт заземления.
- SDA : Вывод последовательных данных. Это контакт ввода / вывода данных интерфейса I2C. Требуется внешний вывод 5 В, обычно через резистор 10 кОм.
- SCL : Вывод последовательного тактового сигнала. Это входной контакт синхронизации интерфейса I2C. Его также необходимо подтянуть до 5 В через резистор 10 кОм.
- SQW / OUT : Выходной вывод прямоугольной формы. Если не используется, его можно оставить плавающим.
- VCC : Главный вывод питания.
Часы реального времени Arduino DS1307 Интерфейс
Теперь, когда мы немного познакомились с микросхемой часов реального времени DS1307, мы перейдем к интерфейсу Arduino и часов реального времени. Как упоминалось ранее, модуль RTC DS1307 использует связь I2C.
В интерфейсе I2C часов реального времени Arduino микроконтроллер Arduino всегда действует как ведущий, а DS1307 — как ведомый. Мастер связи I2C, то есть Arduino в данном случае, отвечает за тактовый сигнал, доступ к шине, сигналы запуска и остановки.
Принципиальная схема
На следующем изображении показана принципиальная схема интерфейса часов реального времени Arduino DS1307. Эта схема объясняет только основные подключения модуля DS1307 (плата, содержащая микросхему DS1307 вместе с кристаллом, батареей и подтягивающими резисторами).
Чтобы лучше понять модуль часов реального времени DS1307, следующее изображение поможет вам, поскольку оно содержит схему типичного модуля часов реального времени DS1307.
Необходимые компоненты
- Arduino UNO [Купить]
- DS1307 Модуль RTC
- ЖК-дисплей 16 × 2 [Купить здесь]
- Макет
- Соединительные провода
- Блок питания
Схема
Дизайн интерфейса Arduino RTC довольно прост. Подключите контакты SDA и SCL DS1307 RTC к контактам SDA и SCL Arduino, то есть контактам A4 и A5.
Для отображения данных и информации о времени подключается ЖК-дисплей 16 × 2.Подключения выполняются согласно принципиальной схеме.
Работа часов реального времени Arduino Интерфейс DS1307
Здесь реализован простой проект, в котором Arduino UNO взаимодействует с часами реального времени DS1307. В этом проекте мы запрограммируем DS1307 RTC с текущей датой и временем и посмотрим, действительно ли он сохраняет эти данные, даже если источник питания для Arduino будет отключен.
При программировании используется специальная библиотека под названием «RTClib», которую можно загрузить с по этой ссылке .Убедитесь, что он сначала загружен и добавлен в базу данных библиотеки Arduino.
Чтобы загрузить данные и время в микросхему DS1307 RTC, мы использовали функцию, доступную в библиотеке RTClib, где Arduino будет загружать дату и время с компьютера во время загрузки кода.
Код
Приложения
- С помощью интерфейса часов реального времени Arduino мы можем реализовать несколько проектов, связанных с регистрацией данных, сигналами тревоги, часами и т. Д.
- Поскольку модуль RTC DS1307 снабжен батареей, он будет продолжать поддерживать время даже в случае сбоя питания.
SainSmart I2C RTC DS1307 AT24C32 Модуль часов реального времени для Arduino — SainSmart.com
Торговая марка: SainSmart[Снято с производства] Модуль часов реального времени для Arduino
Артикул: 101-50-142 UPC: 6955170831777 Артикул: 11091717012 ID варианта: 45100535892
5 долларов.99
Модуль RTC может предоставить вам часы реального времени.
- 24C32 32K I2C EEPROM память
- Часы реального времени на базе DS1307 с батареей CR2032
Модуль RTC может предоставить вам часы реального времени.
- 24C32 32K I2C EEPROM память
- Часы реального времени на базе DS1307 с батареей CR2032
Arduino DS3231 Часы реального времени (RTC) с монитором температуры
Обзор
Мы рады представить вам часы реального времени (RTC) и монитор температуры на базе Arduino и DS3231.Это простые часы реального времени с указанием времени, дня недели и даты с использованием платы Arduino UNO и модуля DS3231 . Мы также добавили датчик температуры для дальнейшего расширения этого проекта.
Альтернативная ИС для DS3231 — DS1307 . DS3231 RTC имеет встроенную функцию сигнализации, а также датчик температуры с разрешением 0,25 и точностью ± 3 ° C, что упрощает этот проект.
С предыдущей версией аналогичного проекта можно ознакомиться здесь:
1.Arduino DS3231 Часы реального времени с будильником и температурой
- Часы реального времени на базе ESP8266 и DS3231 (RTC)
Взаимодействие модуля часов реального времени PCF8563 с Arduino
Необходимые компоненты:
Для разработки Arduino и часов реального времени (RTC) на базе DS3231 и монитора температуры нам потребуются следующие компоненты.
- Плата Arduino
- DS3231 Модуль RTC
- 16 x 2 ЖК-дисплей
- Батарейка 3V типа таблетка
- Макет
- Перемычки
DS3231 Модуль RTC: Введение:
DS3231 — это недорогие, чрезвычайно точные часы реального времени (RTC) I²C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кварцевым резонатором.Устройство оснащено аккумуляторным входом и поддерживает точное время при отключении основного питания устройства.
RTC хранит информацию секунд, минут, часов, дня, числа, месяца и года . Дата в конце месяца автоматически корректируется для месяцев с менее чем 31 днями , включая поправки на високосный год. Часы работают в 24-часовом формате или 12-часовом формате с индикатором активного низкого уровня AM / PM .Предусмотрены два программируемых будильника по времени и программируемый прямоугольный сигнал.
Прецизионная схема опорного напряжения и компаратора с температурной компенсацией отслеживает состояние VCC для обнаружения сбоев питания, обеспечения выхода сброса и автоматического переключения на резервный источник питания при необходимости. Кроме того, вывод RST с активным низким уровнем контролируется как вход кнопки для генерации сброса микропроцессора.
Основные характеристики:- Высокоточные часы реального времени полностью управляют всеми функциями хронометража
- Часы реального времени отсчитывают секунды, минуты, часы, дату месяца, месяц,
день недели и год, с компенсацией високосного года, действующей до 2100 - Точность ± 2 ppm от 0 ° C до + 40 ° C
- Точность ± 3.5ppm от -40 ° C до + 85 ° C
- Выход цифрового датчика температуры: ± 3 ° C Точность
- Регистр для стареющего трима
- Активный-низкий выход RST / Вход для снятия дребезга кнопки сброса
- Два будильника с указанием времени суток
- Программируемый прямоугольный выходной сигнал
- Простой последовательный интерфейс для подключения к большинству микроконтроллеров
- Быстрый (400 кГц) интерфейс I2C
- Вход резервного питания от батареи для непрерывного хронометража
- Работа с низким энергопотреблением увеличивает время автономной работы
- 3.3V Эксплуатация
- Диапазон рабочих температур: коммерческий (от 0 ° C до + 70 ° C) и промышленный (от -40 ° C до + 85 ° C)
- Сертификат Underwriters Laboratories® (UL)
Схема:
Соедините выводы SDA и SCL DS3231 с выводами SDA и SCL, то есть A4 и A5 Arduino.
Для подключения ЖК-дисплея: соедините контакты 12, 11, 5, 4, 3, 2 Arduino с контактами 4, 6, 11, 12, 13, 14 ЖК-дисплея.
Рабочий:
Чтобы этот проект заработал, сначала добавьте библиотеку для DS3231, которая указана ниже.После этого загрузите код. Как только код загружен, проект начинает работать.
В первой строке отображаются часы реального времени. Но во 2-й строке даты, время, день и температура будут отображаться каждые 3 секунды.
Примечание: Измените код, чтобы установить текущую дату, время и дату в строке ниже.
void setup () { rtc.begin (); ЖК.begin (16,2); rtc.setDOW (ВОСКРЕСЕНЬЕ); // Установить день недели rtc.setTime (18, 50, 35); // Устанавливаем время на 12:00:00 (24-часовой формат) rtc.setDate (16, 12, 2018); // День, Месяц, Год |
Исходный код:
Загрузите файл библиотеки DS3231 отсюда: Загрузка библиотеки DS3231
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 18 19 20 21 22 23 24 25 26 27 28 29 30 000 000 34 35 36 37 38 39 40 | # включить #include DS3231 rtc (SDA, SCL); ЖК-дисплей LiquidCrystal (12, 11, 5, 4, 3, 2); void setup () { rtc.begin (); ЖК начало (16,2); rtc.setDOW (ВОСКРЕСЕНЬЕ); // Установить день недели rtc.setTime (18, 50, 35); // Устанавливаем время на 12:00:00 (24-часовой формат) rtc.setDate (16, 12, 2018); // День, Месяц, Год } void loop () { lcd.setCursor (0,0); lcd.print («Часы реального времени»); lcd.setCursor (0,1); lcd.print («Время:»); lcd.print (rtc.getTimeStr ()); задержка (3000); lcd.setCursor (0,1); lcd.print («Дата:»); lcd.print (rtc.getDateStr ()); задержка (3000); lcd.setCursor (0,1); lcd.print («День:»); lcd.print (rtc.getDOWStr ()); lcd.print («»); задержка (3000); ЖК.setCursor (0,1); lcd.print («Температура:»); lcd.print (rtc.getTemp ()); lcd.print («C»); lcd.print («»); задержка (3000); } |
Предварительный просмотр видео и объяснение:
Часы реального времени (RTC) на базе DS3231 и монитор температуры с использованием Arduino
Взаимодействие модуля часов реального времени DS1302 с Arduino uno — KT757
Arduino IDE 1.8.5 (программируемая платформа для Arduino)
Нажмите, чтобы загрузить: https: // www.arduino.cc/en/Main/Software
DS1302 ЧАСЫ РЕАЛЬНОГО ВРЕМЕНИМодуль часов реального времени MH — 2 основан на интегрированном DS1302, который содержит часы / календарь реального времени и 31 байт статической ОЗУ.
Интегрированный DS1302 похож на модель DS1307, которая отличается некоторыми особенностями:
DS1302 имеет интерфейс SPI, а DS1307 — интерфейс I2C;
DS1302 может заряжать аккумулятор, а DS1307 — нет;
DS1307 оснащен программируемым выходом прямоугольной формы.
Чип связывается с микропроцессором через последовательный интерфейс.RTC (блокировка C в реальном времени) / календарь предоставляет информацию о секундах, минутах, часах, дне, дате, месяце и году.
Для интерфейса, помимо источника питания, требуются только три провода: CE (RST), I / O (линия данных) и SCLK (последовательные часы).
Данные могут передаваться от и к часам / ОЗУ по 1 байту за раз или целым числом до 31 байта.
DS1302 разработан для работы с очень низким энергопотреблением и для хранения данных и информации часов с мощностью менее 1 мкВт.
DS1302 имеет два контакта питания, основной (контакт №1 №4) и еще один для резервного аккумулятора (контакт №8 №4), ток 260 мАч, неперезаряжаемый аккумулятор.Теоретический срок хранения данных более 10 лет.
В этом приложении, например, первичный источник питания обеспечивается Arduino, а вторичный источник питания — батареей CR2032.
.
Здесь вы можете увидеть электрическую схему для часов реального времени DS1302. VCC настроен на прием первичного питания, обычно это 3,3 В, но можно использовать 5 В. Не рекомендуется подавать напряжение более 7В, так как это может повредить блок. VBAT используется для резервного питания от батареи 3,3 В типа CR2032.
Кристалл кварца помещается между контактами №2 и №3, в то время как контакты №5-6-7 используются для передачи данных между модулем и микроконтроллером, он также подключается к контакту CE, обозначенному как RST.
Электропитание | 3,3 В или 5,5 В (макс. 7 В) |
Тип датчика | RTC Цифровой выход |
Тип резервного аккумулятора CR2032 | |
Рабочая температура | 0-70 ° C |
Ссылка для загрузки библиотеки DS1302
https: // yadi.sk / d / xMK-iHMeWzgQ8
Используются следующие контакты:
Контакт + 5 В -> Модуль дисплея и источник питания RTC
Контакт GND -> GND дисплейного модуля и RTC
Контакт Цифровой 2 -> Контакт CE — RTD модуль RTC
Цифровой вывод 3 -> Вывод I / O — Модуль DAT RTC
Цифровой вывод 4 -> Вывод CLCK — Модуль CLK RTC
Вывод аналоговый A4 -> Вывод SDA дисплей
Вывод аналоговый A5 -> Отображение вывода SCL
нажмите, чтобы увидеть код
https: // docs.google.com/document/d/e/2PACX-1vQfgD6z_DbvsePnDIoKMtx1W0B9DcW_LGmpeIDGWZ-LcOoxHtGY3uwuHJ_CMIp_dZ_EWIudq8zKWOny/pub
mm Время на основе000 с программируемым временем000 с возможностью переключения времени на основе 9000 с использованием программируемого времени 9000Используйте функции сигнализации часов реального времени DS3231M, чтобы сделать программируемые, основанные на времени, переключатели для включения и выключения устройств в точное время.
Создание базовой платы DS3231M
Часто упускаются из виду, что сигнализация часов реального времени может использоваться для переключения питания на внешние цепи в точное время.Их также можно использовать для питания внешних цепей столько, сколько необходимо, что делает возможной работу от батареи во многих ситуациях. В этом проекте показано, как сконструировать и запрограммировать DS3231M RTC в качестве переключателя цикла питания. Этот подход также можно распространить на множество внешних цепей для управления мощностью батареи.
Часы реального времени (RTC) — это электронное устройство для измерения времени, обычно доступное в виде единой интегральной схемы. Как правило, эти схемы включают в себя возможность резервного питания для сохранения времени, пока питание основных цепей отключено.Часто можно увидеть эти микросхемы, встроенные в материнские платы компьютеров или любые устройства, требующие доступа ко времени. Однако низкая цена, доступность и относительная точность этих микросхем делают их желательным дополнением ко многим проектам микроконтроллеров. Хотя их основная функция — простое отслеживание времени и даты, некоторые микросхемы RTC также имеют программируемые функции сигнализации. В этом проекте исследуется использование этих функций сигнализации для реализации программируемых временных переключателей. Преимущество этого метода заключается в том, что питание устройства может подаваться в определенное время и только на столько, сколько необходимо, что желательно для работы от батареи.
Не все микросхемы RTC имеют функции сигнализации, но некоторые из них это DS3231 (Maxim Integrated), MCP79410 (Microchip) и ISL12026 (Intersil). Здесь DS3231M используется для создания простого, но полностью функционального строительного блока RTC и, кроме того, для создания примера коммутатора на основе RTC. DS3231M обладает рядом функций, которые делают его привлекательным выбором. Это включает; относительно высокая точность, связь I2C, встроенный резонатор и легкое резервное питание от батареи. RTC также содержит программную настройку для конкретной температурной компенсации и даже встроенный датчик температуры.
В представленном примере также используется плата Arduino UNO с программным обеспечением, специально написанным для облегчения программирования сигналов тревоги. Однако общая концепция и представленные схемы могут быть легко адаптированы для использования с любой микроконтроллерной системой, использующей связь I2C.
Прототип базовой платы DS3231M RTC.На рисунке 1 представлена схема базовой схемы RTC, которая может использоваться в качестве строительного блока для переключателя с временной привязкой.По сути, это простая монтажная плата, которая позволяет подключаться к RTC и обратно. Используемый DS3231M выполнен в виде 8-контактного устройства для поверхностного монтажа. Для макетирования и прототипирования удобно использовать несущую плату, которая требует довольно детальной пайки, но это, вероятно, самая сложная часть конструкции проекта. Помимо DS3231M, схема имеет всего несколько других компонентов и представляет собой полнофункциональный I2C RTC, который можно использовать со многими микроконтроллерами.
Рисунок 1.Схема базовой платы RTC .Часть | Описание |
---|---|
RTC1 | DS3231M |
C1, C2 | 0,01 мкФ конденсатор |
R1, R2 | Резистор 10К |
J1 | 5-контактная перемычка / переходник |
Резисторы R1 и R2 служат в качестве подтягивающих резисторов для линий связи I2C.Если у вас уже есть подтягивающие резисторы на линиях I2C в вашей системе, возможно, потребуется изменить их значение или полностью исключить их. BAT1 — это критически важная резервная батарея 3 В, которая поддерживает работу RTC. Показан CR2025, но можно использовать и другие неперезаряжаемые батареи 3 В, например CR2032. C1 — типичный шунтирующий конденсатор для минимизации колебаний источника питания. C2 не является строго необходимым, но рекомендуется, когда батарея является основным источником питания RTC.
JP1 — это место, где выполняются подключения либо к Arduino UNO для программирования, либо к конечной схеме переключения.Для Arduino используйте соединения, указанные в следующей таблице.
JP1 | Ардуино |
---|---|
Vcc | 5 В или 3,3 В |
SCL | A5 или SCL |
SDA | A4 или SDA |
ЗЕМЛЯ | ЗЕМЛЯ |
СИГНАЛИЗАЦИЯ | не подключен |
DS3231M работает как подчиненное устройство I2C с фиксированным адресом 0x68.По сути, DS3231M представляется мастеру (в данном случае Arduino UNO) как 19-байтовый массив памяти. Эти 19 байтов используются для чтения и записи во внутренние регистры. Перед тем, как пытаться программировать функции, полезно ознакомиться с техническими данными устройства.
19 внутренних регистров сгруппированы в три основные группы; время и дата, будильники и прочее, включая управление и статус. Опять же, знакомство с таблицей данных микросхемы предоставит все подробности, но в таблице ниже представлены общие сведения.
Адрес | Функции |
---|---|
0x00-0x06 | Время и дата |
0x07-0x0d | Аварийный сигнал 1 и Аварийный сигнал 2 |
0x0e-0x12 | Контроль / Статус / Старение / Температура |
DS3231M Сигнализация
Контакт 3, называемый SQW / INT, является выходом сигнализации. Штырь является многофункциональным и может быть запрограммирован либо на вывод прямоугольной волны, либо на сигнал тревоги.В качестве аварийного сигнала это активный низкий выход с открытым стоком. Чтобы использовать функцию сигнализации, подключите внешний подтягивающий резистор, подключенный к источнику напряжения, не превышающему 5,5 В. Источник может быть отдельным от Vcc микросхемы или линии батареи, если заземление подключено.
Имеется два независимых набора регистров аварийных сигналов, каждый из которых может вызывать аварийный сигнал. Когда возникает аварийный сигнал, вывод SQW / INT изменяет состояние, и это изменение будет служить сигналом для других схем, которые формируют основу использования RTC в качестве программируемого переключателя.Когда заявлен сигнал тревоги, он будет оставаться заявленным до тех пор, пока не будет сброшен флаг в одном из внутренних регистров DS3231M. Таким образом, внешняя схема должна иметь возможность писать в DS3231M, чтобы отключить сигнализацию.
Аварийный сигнал можно запрограммировать так, чтобы он возник, когда есть совпадение между определенными регистрами аварийных сигналов и определенными регистрами времени в соответствии с конкретными конфигурациями регистров аварийных сигналов. Тревога №1 может быть настроена на срабатывание при совпадении; 1) секунды, 2) минуты и секунды, 3) часы, минуты и секунды, 4) дата, часы, минуты и секунды, 5) день, часы, минуты и секунды или 6) каждую секунду.Тревога №2 может быть настроена на срабатывание при совпадении; 1) минуты, 2) часы и минуты, 3) дата, часы и минуты, 4) день, часы и минуты или 5) каждую минуту.
A Программное обеспечение DS3231
Из-за своей популярности существует несколько библиотек Arduino и множество примеров кода, доступных для использования с DS3231, и базовая плата на рисунке 1 должна хорошо работать с этими библиотеками и примерами кода. Некоторые из библиотек поддерживают только базовые функции времени суток, в то время как другие являются достаточно всеобъемлющими и разработаны на основе общесистемных функций RTC.
В эту статью включена программа Arduino, специально предназначенная для облегчения проектирования и тестирования программируемых переключателей RTC. В этом отношении его использование немного отличается от обычных эскизов Arduino в том, что всеми регистрами DS3231 можно управлять с помощью серии операторов #define в начале программы, как показано ниже.
// *********************************************** ***************************************
// НАЧАЛО ПРОГРАММИРОВАНИЯ ПОЛЬЗОВАТЕЛЯ ЗДЕСЬ
// *********************************************** ***************************************
// *** Проверка ошибок не выполняется, поэтому соблюдайте формат и диапазоны значений ***
//
// Раздел 1 - часы
// SET_CLOCK YES / NO, если Yes, то значения в секции 1 будут записаны в часы
#define SET_CLOCK NO // ДА / НЕТ
#define SECONDS 0 // 0-59
#define МИНУТЫ 0 // 0-59
// если CLOCK24 ДА, то AMPM пропускается
#define CLOCK24 NO // ДА / НЕТ для 24/12, если НЕТ, установите AMPM
#define AMPM PM // AM / PM AM = 0 PM = 1 (не будет действовать, если CLOCK24 - YES)
#define HOURS 1 // 0–23, если часы равны 24, или 1–12, если часы равны 12 часам
#define DAY 7 // 1-7 1 = воскресенье
#define DATE 1 // День 1–31 месяца
#define МЕСЯЦ 1 // 1–12
#define ГОД 16 // 00-99
//
// Раздел 2 - Тревога №1
// SET_ALARM1 ДА / НЕТ, если Да, то все включенные значения в разделе 2 будут записаны в часы
// после установки значений - тревога №1 должна быть включена в разделе 4
#define SET_ALARM1 NO // ДА / НЕТ
#define A1SECOND 0 // 00-59
#define A1MINUTE 0 // 00-59
// если A1CLOCK24 ДА, то A1AMPM пропускается
#define A1CLOCK24 YES // YES / NO для 24/12 if NO установить A1AMPM
#define A1AMPM PM // AM / PM AM = 0 PM = 1 (не будет действовать, если A1CLOCK24 - YES)
#define A1HOUR 00 // 00-23, если часы равны 24 или 1-12, если часы равны 12 часам
#define A1DYDT YES // YES = День (DoW) Нет = Дата (DoM)
#define A1DAYDATE 1 // Если A1DYDT = YES, то диапазон равен 1-7 (DoW) / Если NO, то диапазон равен (1-31 DoM)
#define A1MASK 3 // 0-4, как описано ниже
// 4 = Тревога раз в секунду
// 3 = Тревога при совпадении секунд
// 2 = Тревога при совпадении минут и секунд
// 1 = Будильник при совпадении часов, минут и секунд
// ЗАМЕЧАНИЕ, следующие два зависят от A1DYDT
// 0 = Если A1DYDT = NO, тогда сигнал тревоги, когда дата, часы, минуты и секунды совпадают
// Если A1DYDT = Yes, то будильник, когда день, часы, минуты и секунды совпадают
//
// Раздел 3 - Тревога №2
// SET_ALARM2 ДА / НЕТ, если Да, то все включенные значения в разделе 3 будут записаны в часы
// после установки значений - тревога №2 должна быть включена в разделе 4
#define SET_ALARM2 NO // ДА / НЕТ
#define A2MINUTE 0 // 00-59
// если A2CLOCK24 ДА, тогда A2AMPM пропускается
#define A2CLOCK24 YES // YES / NO для 24/12 if NO установить A1AMPM
#define A2AMPM PM // AM / PM AM = 0 PM = 1 (не будет действовать, если A2CLOCK24 ДА)
#define A2HOUR 00 // 00-23, если часы равны 24 или 1-12, если часы равны 12 часам
#define A2DYDT YES // YES = Day (DoW) No = Date (DoM)
#define A2DAYDATE 1 // Если A2DYDT = YES, тогда диапазон 1-7 (DoW) / Если NO, то диапазон (1-31 DoM)
#define A2MASK 0 // 0-3, как описано ниже
// 3 = Будильник один раз в минуту (00 секунд каждой минуты)
// 2 = Тревога при совпадении минут
// 1 = Будильник при совпадении часов и минут
// ЗАМЕЧАНИЕ, следующие два зависят от A2DYDT
// 0 = Если A2DYDT = NO, тогда сигнал тревоги, когда дата, часы и минуты совпадают
// Если A2DYDT = Yes, то будильник при совпадении дня, часов и минут
//
// Раздел 4 - Контроль
#define EOSCENABLE YES // ДА / НЕТ, если ДА, включает EOSC, если НЕТ, пропускается
#define EOSCDISABLE NO // ДА / НЕТ, если ДА, отключить EOSC Если НЕТ, он пропускается
// EOSC всегда должен быть включен, чтобы отсчитывать время от батареи
#define ENABLE32KHZ NO // YES / NO Включить сигнал выходного контакта 32KHZ
#define DISABLE32KHZ YES // YES / NO Отключить сигнал выходного контакта 32KHZ
#define ENABLEBBSQW NO // YES / NO Включить сигнал выходного контакта BBSQW [с питанием от батареи], когда INTC = 0
#define DISABLEBBSQW YES // YES / NO Отключить сигнал выходного контакта BBSQW [питание от батареи], если INTC = 0
#define CLEARA1F NO // ДА / НЕТ Сбрасывает флаг прерывания аварийного сигнала 1
#define CLEARA2F NO // ДА / НЕТ Сбрасывает флаг прерывания сигнала тревоги 2
#define INTCNINT YES // YES / NO Устанавливает вывод INT / SQW для прерывания вывода
#define INTCNSQW NO // YES / NO Устанавливает вывод INT / SQW на выход прямоугольной формы
#define A1ENABLE NO // ДА / НЕТ, если ДА, прерывания от аварийного сигнала 1 разрешены, если НЕТ - отключены
#define A2ENABLE NO // ДА / НЕТ, если ДА, прерывания от сигнала тревоги 2 разрешены, если НЕТ - отключены
// Разное
#define SET_AGING NO // YES / NO устанавливает смещение устаревания, определенное ниже
#define AGINGOFFSET 0 // диапазон от -127 до +127 Положительные значения замедляют часы (см. лист данных)
#define REQCONV NO // ДА / НЕТ, если да, запрашивает преобразование температуры
#define CLEAROSF NO // ДА / НЕТ, если да, сбрасывает флаг OSF.Если нет, то никаких действий
//
#define SCNUPDATE 20000 // Частота обновления экрана в мс
// *********************************************** ***************************************
// ПРОГРАММИРОВАНИЕ ПОЛЬЗОВАТЕЛЯ ЗАКАНЧИВАЕТСЯ ЗДЕСЬ
// *********************************************** ***************************************
То есть, вы можете изменить регистры, изменив значения в операторах #define и затем выполнив скетч. После изменения регистров в соответствии с операторами #define программа выводит текущие значения на экран через равные промежутки времени, чтобы вы могли наблюдать за изменениями значений регистров.Следует отметить две особенности этого подхода. Во-первых, когда вы изменяете значения, например время, убедитесь, что вы не сохранили скетч, требующий изменения этих значений, или в следующий раз, когда вы запустите скетч, вы перепрограммируете те же самые значения. В некоторых случаях, например, при установке времени, есть #define, чтобы изменить или пропустить изменение. Во-вторых, помните, что после загрузки эскиза в Arduino он останется на плате и будет выполняться при каждом включении питания. Таким образом, рекомендуется удалить / заменить скетч из Arduino после того, как он был использован для установки желаемых значений регистров.
Переключатель цикла питания
Прототип платы переключателя силового цикла.В качестве примера, иллюстрирующего этот подход, на рисунке 2 представлена схема простой схемы, которая в сочетании с платой DS3231M будет включать и выключать устройство в запрограммированное время. На самом деле я использую эту схему для включения и выключения своего маршрутизатора каждую ночь в 3:35.
Рис. 2. Схема переключателя силового цикла.Часть | Описание |
---|---|
BAT1 | 4 батарейки AAA (щелочные или никель-металлгидридные) |
1 квартал | LP0701N P-канальный МОП-транзистор |
U1 | PICAXE 08M2 + |
K1 | Реле DPDT 5v DC (Axicom) |
R1, R2 | Резистор 10К |
C1 | Поляризованный конденсатор 10 мкФ |
D1 | 1N4001 диод |
JP1 | 5-контактная перемычка / разъем |
CN1 | 2-х контактный разъем |
J1 | домкрат |
S1 | выключатель без фиксации |
Работа цепи
Мой маршрутизатор питается от типичного настенного блока питания 12 В постоянного тока, и вместо прямого подключения выхода постоянного тока к маршрутизатору он подключается к разъему J1.CN1 подключается к цилиндрической вилке, которая входит в маршрутизатор. K1 — это двухполюсное реле с двойным переключением с нормально замкнутыми контактами, по которым подается питание 12 В постоянного тока напрямую от J1 к CN1 и к маршрутизатору — убедитесь, что полярность сохраняется. Таким образом, питание обычно подается на маршрутизатор как обычно, когда реле не находится под напряжением. JP1 подключается к плате DS3231M для использования сигналов ALARM, GND, SCL и SDA. Питание от аккумуляторной батареи поступает на источник полевого МОП-транзистора и на R1.Другая сторона R1 идет как на вывод ALARM на JP1, так и на затвор полевого МОП-транзистора. Когда не подается сигнал тревоги, разница напряжений между затвором и источником равна нулю, и аккумуляторная батарея не получает энергии. Когда возникает аварийный сигнал, напряжение от затвора к источнику на полевом МОП-транзисторе превышает пороговое значение, и полевой МОП-транзистор включается — питание от аккумуляторной батареи будет подаваться на точки, которые я называю «Vswitched». Когда это происходит, катушка реле активируется и прерывает соединение от внешнего источника питания к маршрутизатору.
PICAXE 08M2 + также получает питание от Vswitched и получает питание при возникновении тревоги. Поскольку сигнал тревоги на DS3231M сохраняется до тех пор, пока не будет сброшен флаг во внутреннем регистре, нам необходимо связаться с RTC через интерфейс I2C, чтобы сбросить флаг прерывания и, таким образом, выключить Vswitched. 08M2 + — самое недорогое и простое решение для выполнения этой функции. PICAXE запрограммирован с помощью простых строк ниже для выполнения этой задачи. Программа просто ждет 10 секунд, а затем связывается с DS3231M, чтобы отключить флаг прерывания сигнала тревоги, который отключает «Vswitched».Затем катушка реле возвращается в состояние покоя, и питание маршрутизатора восстанавливается.
hi2csetup I2CMASTER, 010000, i2cslow, i2cbyte
главный:
; убедитесь, что было прерывание от аварийного сигнала 1
hi2cin $ 0f, (b1)
пусть b2 = b1 И 000001; A1F - это бит 0
если b2 = 1, то перейти к выключению
; ловушка ложного срабатывания или другой ошибки
FalseTrigger:
; при желании введите сюда код ошибки
неисправность:
пауза 10000
; теперь очистить флаг RTC A1F
пусть b2 = b1 И 111110
hi2cout $ 0f, (b2)
пауза 10
здесь:
; мы отключили питание и не должны сюда попасть
иди сюда
«Vswitched» также подключен к Vcc на JP1 для подключения к плате RTC.Это необходимо для обеспечения питания RTC и подтягивающих резисторов, необходимых для связи I2C, поскольку PICAXE использует линии I2C для связи с DS3231M. Обратите внимание, что если вы не использовали подтягивающие резисторы I2C с платы RTC (потому что они уже присутствовали в вашей системе), их необходимо включить в плату цикла включения питания. Переключатель мгновенного действия, когда он нажат, позволяет вручную управлять схемой путем принудительного подключения GND к затвору LP0701N.
Несмотря на простоту схемы, все же необходимо учитывать максимальные номинальные характеристики компонентов.Максимальное напряжение на выводе сигнализации составляет 5,5 В. LP0701N имеет максимальное напряжение затвор-источник 10 В и может непрерывно переключаться на 500 мА. Контакты реле рассчитаны на 3 А, а максимальное напряжение 08 м2 + 5,5 В. Батарейный блок обеспечивает 5 В или 4,8 В в зависимости от того, используете ли вы щелочные или никель-металлгидридные элементы. Хотя важно проверить все минимальные и максимальные рейтинги всех компонентов, эта быстрая проверка показывает, что мы находимся в некоторых ключевых номинальных пределах.
Мы также можем произвести очень консервативную оценку ожидаемого срока службы батареи.Если предположить, что батареи имеют емкость 800 мАч (что типично для никель-металлгидридных элементов AAA) и что схема потребляет 200 мА в активном состоянии (на самом деле это намного меньше), мы получаем 4 часа. Мы можем уменьшить это значение на 30%, потому что ничего не работает в точном соответствии со спецификациями, и мы получаем 2,8 часа или 10 080 секунд. Разделите это время на 10 (количество секунд, в течение которых схема работает в день), и мы получим 1008 операций по 10 секунд. Это означает более чем 2 года. Хотя эта цифра является теоретической, она впечатляет и демонстрирует ценность этого метода.
Завершенный проект выключателя цикла питания готов к использованию.Программирование контура
Возвращаясь к операторам #define в прилагаемом скетче Arduino, ниже приведены шаги, необходимые для программирования платы DS3231M для настройки работы схемы. Опять же, знакомство с таблицей данных DS3231M облегчит понимание этих шагов. Для краткости предполагается, что вы уже установили правильное время на RTC — хотя вы также можете использовать программу для этого.Также предполагается, что в начале действуют другие значения по умолчанию в эскизе.
1. Подключите плату RTC к Arduino.
2. Запрограммировать совпадение времени будильника 1 регистрируется на 3:35 утра — просто 3:35 для 24-часового отсчета времени.
// Раздел 2 - Тревога №1
#define SET_ALARM1 ДА // ДА / НЕТ
#define A1SECOND 0 // 00-59
#define A1MINUTE 35 // 00-59
// если A1CLOCK24 ДА, то A1AMPM пропускается
#define A1CLOCK24 YES // YES / NO для 24/12 if NO установить A1AMPM
#define A1HOUR 03 // 00-23, если часы равны 24 или 1-12, если часы равны 12 часам
#define A1MASK 1 // 0-4, как описано ниже
// 1 = Будильник при совпадении часов, минут и секунд
3.Запрограммируйте вывод SQW / INT для выхода прерывания (аварийного сигнала).
#define INTCNINT YES // YES / NO Устанавливает вывод INT / SQW для прерывания вывода
4. Разрешить прерывания сигнала тревоги 1.
#define A1ENABLE YES // ДА / НЕТ, если ДА, прерывания от аварийного сигнала 1 разрешены, если НЕТ - отключены
5. Скомпилируйте и загрузите скетч в Arduino UNO. Это запрограммирует плату RTC по желанию и выдаст результат, аналогичный снимку экрана ниже.Помните, что до тех пор, пока вы не измените загруженную программу, она будет выполнять этот скетч каждый раз, когда вы включаете Arduino UNO.
6. Отключите питание, отсоедините плату RTC от Arduino и подключите ее к цепи включения и выключения питания. Подключите блок питания маршрутизатора к разъему на цепи и подключите вилку цепи к маршрутизатору, убедившись, что вы соблюдаете правильную полярность силовых соединений. Теперь маршрутизатор должен нормально включаться, но каждый день в 3:35 он выключается на 10 секунд, а затем снова включается.
Вывод на экран скетча Arduino UNO после установки значений регистров для переключателя цикла питания.Расширение подхода
Представленная схема силового цикла является специализированной и, как могут возразить некоторые, несколько избыточной. Однако базовый подход очень гибкий и может быть расширен как на аппаратном, так и на программном уровне. Далее следуют некоторые перспективы и соображения по улучшению и расширению.
Аппаратное расширение.В цепи цикла питания питание батареи переключается для непосредственного управления реле и PICAXE. Мы также можем переключить питание от батареи на регулятор напряжения, чтобы получить регулируемое выходное напряжение для работы внешнего контроллера и связанных схем. На рисунке 3 представлена схема, иллюстрирующая этот подход.
Рис. 3. Схема использования регулятора LDO с сигналами RTC.В этом случае мы можем увеличить мощность, заменив батарейный блок AAA на батарейки AA или одну из популярных перезаряжаемых USB-батарей «палок» — при условии, что мы поддерживаем максимальное напряжение 5.5в на контакте сигнализации. Когда подается аварийный сигнал RTC, питание батареи переключается на вход регулятора напряжения 3,3 В LDO (например, TC1262), чтобы обеспечить регулируемый выход 3,3 В при токе до 500 мА. Например, регулируемый выход может использоваться для питания беспроводного микроконтроллера, такого как популярный ESP8266, который может использовать питание от батареи в течение коротких промежутков времени для считывания матрицы датчиков и передачи показаний. После передачи схема может отключить питание, отправив соответствующий код на DS3231M через интерфейс I2C.Регулируемый выход 3,3 В также подключен к Vcc на плате RTC для управления DS3231M и подтягивающими резисторами во время связи I2C.
Расширение программного обеспечения. Схема включения и выключения питания представляет собой одно из простейших вариантов использования возможностей сигнализации RTC — однократную сигнализацию ежедневно. Однако DS3231M имеет два независимых сигнала тревоги, и их можно использовать в качестве дополнительных. Программное обеспечение контроллера также может легко определить, какой аварийный сигнал возник, просмотрев биты флага аварийного сигнала в регистре состояния DS3231M (адрес 0x0f).Однако могут быть реализованы даже более сложные интервалы сигналов тревоги, поскольку контроллер может динамически программировать сигналы тревоги DS3231M. Например, при возникновении сигнала тревоги контроллер может считать время и запрограммировать возникновение следующего сигнала тревоги в зависимости от времени суток или в соответствии с заранее установленным расписанием. Таким образом может быть реализован практически любой интервал между сигналами тревоги и последовательность интервалов, что делает подход способным удовлетворить самые конкретные и требовательные временные требования.
Заключительные мысли
На функции аварийной сигнализации цепей RTC часто не обращают внимания.В этой статье была рассмотрена функция сигнализации DS3231M RTC и представлен подход к использованию этой функции для управления внешними цепями с батарейным питанием, включая микроконтроллеры. Хотя многие микроконтроллеры обладают некоторой степенью возможностей пониженного энергопотребления, «отсутствие питания» является предельным «низким энергопотреблением», и этот подход можно рассматривать с различными устройствами, когда требуется точное время включения и выключения. Их относительно низкая цена и простота использования делают их особенно востребованными для проектов, в которых экономия заряда батареи является первоочередной задачей.
Попробуйте этот проект сами! Получите спецификацию.
RTCAlarmsProject.rar
15 лучших часов реального времени Arduino 2021 года
2755 отзывов Отсканировано
Ранг №1 Songhe DS3231 DS3231SN AT24C32 модуль часов реального времени модуль часов IIC RTC модуль для Arduino без батареи- Микросхема часов: высокоточная микросхема часов DS3231SN
- — это недорогие, чрезвычайно точные часы реального времени (RTC) I2C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кварцевым резонатором.
- Устройство имеет батарейный вход, отключает основное питание и поддерживает точное время.
- Встроенный осциллятор повышает долговременную точность устройства и уменьшает количество компонентов производственной линии.
- DS3231 доступен в коммерческом и промышленном температурных диапазонах с использованием 16-выводного корпуса SO на 300 мил.
- Точность часов: 0-40 ℃, точность 2 ppm, годовая погрешность около 1 минуты.
- рабочее напряжение: 3,3—5,5 В. Интерфейс шины IIC, скорость передачи 400 кГц (при рабочем напряжении 5 В)
- Микросхемы памяти: AT24C32. Микросхема часов: высокоточная микросхема часов DS3231M
- Может каскадироваться с другими устройствами IIC . Адрес 24C32 можно изменить, закоротив A0 / A1 / A2.
- Мы всегда заботились об удобстве для клиентов и улучшали детали функций продукта. Если у вас есть какие-либо проблемы при использовании нашего продукта или вам нужна документация по использованию продукта, пожалуйста, свяжитесь с нами напрямую для получения помощи.Мы ответим на вашу проблему в течение 24 часов.Мы делаем все возможное, чтобы предоставить каждому клиенту самое профессиональное обслуживание.
- Модуль часов DS1302 Модуль часов реального времени RTC для Arduino AVR ARM
- DS1302 содержит часы / календарь реального времени и 31 байт статической ОЗУ
- через простой последовательный интерфейс для связи с микроконтроллером
- Часы реального времени / календарная схема предоставляет секунды, минуты, часы, дни, недели, месяцы, годы информации, количество дней в месяце и високосный год автоматически регулирует количество дней
- Работа часов по индикатору AM / PM решил использовать 24 или 12 часовой формат
- Без батареи. Пожалуйста, знайте это
- Размер: 2,9 см x 2,6 см — 1,14 дюйма x 1,02 дюйма.
- Доступ к DS1307 осуществляется по протоколу I2C.
- В комплект входит : 5 x AVR ARM PIC 51 Новый модуль часов реального времени I2C DS1307 AT24C32 RTC для Arduino
- Если вы не удовлетворены своей покупкой по какой-либо причине, пожалуйста, не стесняйтесь связаться с нами в центре покупателя или по электронной почте поддержки, 24/7 Быстрый ответ.
- Напряжение: 3,3-5 В, Микросхемы памяти: AT24C32 (емкость 32 КБ)
- О типе батареи: Батарея не входит в комплект, вы можете использовать батарею CR2032 или LIR2032.
- Особенность: DS3231 — это ИС RTC, разработанная Maxim Integrated. Это недорогая, чрезвычайно точная ИС RTC со связью через интерфейс I2C. Интересной особенностью микросхемы DS3231 RTC является то, что она имеет встроенный кварцевый генератор и датчик температуры, и, следовательно, вам не нужно подключать внешний кристалл.
- Чип часов: высокоточный чип часов DS3231 (для этого модуля часов есть 3 разных чипа, DS3231N, DS3231SN и DS3231M, мы отправляем его случайным образом.
- DS3231M доступен в том же корпусе, что и популярный DS3231 RTC. RTC хранит информацию о секундах, минутах, часах, дне, дате, месяце и году.
- Предусмотрены два программируемых будильника по времени суток и выход 1 Гц.Адрес и данные передаются последовательно через двунаправленную шину I2C.
- Полная функциональность календаря часов, включая секунды, минуты, часы, день, дату, месяц и год, с компенсацией високосного года до 2100 года. обнаружение сбоев питания, обеспечение выхода сброса и автоматическое переключение на резервное питание при необходимости.
- DS1302 Модуль часов Модуль часов реального времени RTC для Arduino AVR ARM
- DS1302 содержит часы / календарь реального времени и 31 байт статической ОЗУ
- Через простой последовательный интерфейс для связи с микроконтроллером
- Часы реального времени / календарная схема предоставляет секунды, минуты, часы, дни, недели, месяцы, годы информации, количество дней в месяце и високосный год автоматически регулирует количество дней
- Работа часов по индикатору AM / PM решил использовать 24 или 12 часовой формат
- 16-контактные микросхемы памяти DS3231 — AT24C32, чрезвычайно точные часы реального времени (RTC) I2C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кварцевым резонатором.
- Встроенный осциллятор повышает долговременную точность устройства и уменьшает количество компонентов производственной линии.
- Предоставляет два настраиваемых будильника и календарь, который может быть настроен на выходной сигнал прямоугольной формы. Адрес и данные передаются последовательно через двунаправленную шину I2C.
- Высокоточные часы реального времени полностью управляют всеми функциями хронометража. Устройство имеет батарейный вход, отключает основное питание и поддерживает точное хронометраж.
- Прецизионная схема опорного напряжения и компаратора с температурной компенсацией контролирует состояние VCC для обнаружения сбоев питания и обеспечивает выход сброса.Кроме того, вывод RST контролируется как генерирующий сброс микропроцессора.
- 🚩 DS3231 — это недорогие, чрезвычайно точные часы реального времени (RTC) I2C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кварцевым резонатором.
- 🚩RTC хранит информацию о секундах, минутах, часах, дне, дате, месяце и году. Менее 31 дня месяца конечная дата будет автоматически скорректирована, включая поправки на високосный год.
- 🚩 Прецизионная схема опорного напряжения и компаратора с температурной компенсацией отслеживает состояние VCC для обнаружения сбоев питания, обеспечения выхода сброса и, при необходимости, автоматического переключения на резервный источник питания.
- 🚩 Как нам написать? Пожалуйста, нажмите «Stemedu» (вы можете найти «Продано Stemedu» под кнопкой «Купить»), на новой странице нажмите «Задать вопрос», чтобы написать нам по электронной почте
- Напряжение: 3.3-5 В, микросхемы памяти: AT24C32 (емкость памяти 32 КБ)
- Чип микросхемы: высокоточная микросхема часов DS3231 (для этого модуля часов есть 3 разных микросхемы, DS3231N, DS3231SN и DS3231M, мы отправляем их случайным образом.
- О Тип батареи: Батарея в комплект не входит, вы можете использовать батарею CR2032 или LIR2032
- Характеристика: DS3231 — это ИС RTC, разработанная Maxim Integrated. Это недорогая, чрезвычайно точная ИС RTC с обменом данными через интерфейс I2C. ИС DS3231 RTC состоит в том, что в нее встроены кварцевый генератор и датчик температуры, поэтому вам не нужно подключать внешний кристалл.
- Невозможно отобразить ссылку на документацию по продукту. Если вам нужна техническая документация, нажмите «Geekstory» (вы можете найти «Продано Geekstory» под кнопкой «Купить сейчас»), на новой странице нажмите «Задайте вопрос», чтобы отправить нам электронное письмо
- ★ 100% абсолютно новый и качественный.
- ★ Электронные аксессуары и электронные компоненты включают: модули, релейный модуль, 3D-принтер, разъемы, Cubieboard, LCD, IC и LED, макетную плату и провода, программатор.
- ★ Может предоставлять библиотеки и подпрограммы ar-duino
- ★ Использование прецизионного чипа часов DS3231SN, встроенный кристалл 32,768 Может обеспечивать точный год, месяц, день, час, минуту, секунду, данные утром и днем
- ★ Малый размер Диаметр 3 см, расстояние между выводами 22,86 мм
- Идеально подходит для записи видео 4K UHD: Samsung MicroSD Evo идеально подходит для фотографий в высоком разрешении, игр, музыки, планшетов, ноутбуков, экшн-камер, цифровых зеркальных фотоаппаратов, дронов, смартфонов (Galaxy S10, S10 +, S10e, S9, S9 +, Note9, S8 , S8 +, Note8, S7, S7 Edge и т. Д.), Android-устройства и др.
- Сверхбыстрая скорость чтения и записи: скорость чтения до 95 МБ / с и записи до 20 МБ / с; Uhs Speed Class U1 и Speed Class 10 (производительность может варьироваться в зависимости от хост-устройства, интерфейса, условий использования и других факторов). Рабочее напряжение: 2,7-3,6 В
- Создана для долговечной надежности: Ударопрочная карта памяти также является водонепроницаемой, термостойкой, рентгеновской и магнитной
- Расширенная совместимость: включает полноразмерный адаптер для использования в камерах, ноутбуках и настольных компьютерах Компьютеры
- Всесторонний охват различных аспектов основ Arduino, экосистемы и arduino ide
- Охватывает arduino uno, arduino nano и знакомит с последней версией arduino tian, на которой работает linux
- Простой язык, кристально чистый подход и прямолинейная понятная презентация
- Использование удобного стиля для объяснения схем и примеров кода
- Иллюстрировано принципиальными схемами, снимками экрана и фотографиями
- ИДЕАЛЬНАЯ СОВМЕСТИМОСТЬ с программным обеспечением IDE: хорошее обновление для контроллера r3, которое позволит выполнять более сложные программы и проекты
- ПРЯМО ИЗ коробки: используется официальная микросхема ATmega вместо Ch440G, проблем с драйверами нет
- ОТЛИЧНОЕ КАЧЕСТВО : Качество сборки хорошее, разъемы прямые, пайка хорошая. Он поставляется с инструкциями по загрузке и установке драйвера на компьютерах с Windows.Они хорошо упакованы в красивую коробку.
- СЕРТИФИКАЦИЯ FCC и CE: эта плата изготовлена из экологически чистых компонентов и материалов, а также с использованием удобной для пользователя технологии производства. Это отличный инструмент для создания прототипов электронных проектов.
Последнее обновление 2021-10-30 / Партнерские ссылки / Названия продуктов, изображения, описания из Amazon Product Advertising API
Как купить лучшие часы реального времени Arduino?Вы нервничаете, думая о покупке отличных часов реального времени Arduino? Сомнения продолжают закрадываться в вашу голову? Мы понимаем это, потому что мы уже прошли весь процесс исследования часов реального времени Arduino, поэтому мы собрали исчерпывающий список лучших часов реального времени Arduino, доступных на текущем рынке.Мы также составили список вопросов, которые, вероятно, возникают у вас самих.
Мы сделали все, что в наших силах, с нашими мыслями и рекомендациями, но по-прежнему важно, чтобы вы самостоятельно провели тщательное исследование часов реального времени Arduino, которые вы собираетесь купить. Ваши вопросы могут включать следующее:
- Стоит ли покупать часы реального времени Arduino ?
- Какие преимущества дает покупка часов реального времени Arduino ?
- Какие факторы заслуживают внимания при покупке эффективных часов реального времени Arduino?
- Почему так важно инвестировать в любые часы реального времени Arduino Real Time Clock , а тем более в самые лучшие?
- Какие часы реального времени Arduino подходят на текущем рынке?
- Где можно найти подобную информацию о часах реального времени Arduino?
Мы убеждены, что у вас, вероятно, возникнет гораздо больше вопросов относительно часов реального времени Arduino, и единственный реальный способ удовлетворить ваши потребности в знаниях — это получить информацию из как можно большего количества авторитетных интернет-источников.
Потенциальные источники могут включать руководств по покупке Arduino Real Time Clock , рейтинговые сайты, отзывы из уст в уста, онлайн-форумы и обзоры продуктов. Тщательное и внимательное исследование имеет решающее значение, чтобы убедиться, что вы заполучили лучшие часы реального времени Arduino. Убедитесь, что вы используете только заслуживающие доверия и заслуживающие доверия веб-сайты и источники.
Мы предоставляем руководство по покупке часов реального времени Arduino, которое является полностью объективным и достоверным.Для корректуры собранной информации мы используем как искусственный интеллект, так и большие данные. Как мы создали это руководство по покупке? Мы сделали это, используя специально созданный набор алгоритмов, который позволяет нам составить список 10 лучших часов реального времени Arduino, доступных в настоящее время на рынке.
Эта технология, которую мы используем для составления нашего списка, зависит от множества факторов, включая, помимо прочего, следующие:
- Ценность бренда : Каждая марка часов реального времени Arduino имеет свою собственную ценность.Большинство брендов предлагают своего рода уникальное торговое предложение, которое должно предложить нечто иное, чем их конкуренты.
- Характеристики: Какие навороты важны для часов реального времени Arduino?
- Технические характеристики : Можно измерить их мощность.
- Стоимость продукта : Это просто то, сколько денег вы получите от ваших часов реального времени Arduino.
- Оценки клиентов : Цифры оценивают часы реального времени Arduino объективно.
- Отзывы клиентов : эти параграфы, тесно связанные с рейтингами, дают вам из первых рук подробную информацию от реальных пользователей об их часах реального времени Arduino.
- Качество продукции : Вы не всегда получаете то, за что платите, с часами реального времени Arduino, иногда меньше, а иногда больше.
- Надежность продукта : Насколько прочные и долговечные часы реального времени Arduino должны указывать на то, как долго они будут работать для вас.
Мы всегда помним, что поддержание актуальности информации о часах реального времени Arduino является нашим главным приоритетом, поэтому мы постоянно обновляем наши веб-сайты. Узнайте больше о нас из онлайн-источников.
Если вы считаете, что все, что мы представляем здесь относительно часов реального времени Arduino, не имеет отношения к делу, неверно, вводит в заблуждение или ошибочно, то сообщите нам об этом как можно скорее! Мы все время здесь для вас. Свяжитесь с нами здесь. Или вы можете прочитать о нас больше, чтобы увидеть наше видение.
Часы реального времени Arduino с использованием DS3231 RTC и SSD1306 OLED
// Часы реального времени Arduino и монитор температуры с DS3231 и SSD1306 OLED
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 дисплей (OLED_RESET);
#define button1 9 // Кнопка B1 подключена к контакту 9 Arduino
#define button2 8 // Кнопка B2 подключена к контакту 8 Arduino
void setup (void) {
pinMode (button1, INPUT_PULLUP);
pinMode (button2, INPUT_PULLUP);
задержка (1000);
// по умолчанию мы генерируем высокое напряжение из 3.Линия 3в внутри! (аккуратно!)
display.begin (SSD1306_SWITCHCAPVCC, 0x3D); // инициализация с адресом I2C 0x3D (для 128×64)
// инициализация выполнена
// Очистить буфер дисплея.
display.clearDisplay ();
display.display ();
display.setTextColor (БЕЛЫЙ, ЧЕРНЫЙ);
display.drawRect (117, 56, 3, 3, БЕЛЫЙ); // Поместите символ градуса (°)
draw_text (0, 56, «TEMPERATURE =», 1);
draw_text (122, 56, «C», 1);
}
char Time [] = «::»;
char Calendar [] = «/ / 20»;
char temperature [] = «00.00 «;
char temperature_msb;
байт i, секунда, минута, час, день, число, месяц, год, temperature_lsb;
void display_day () {
switch (day) {
case 1: draw_text (40, 0, «ВОСКРЕСЕНЬЕ», 1); перерыв;
случай 2: draw_text (40, 0, «ПОНЕДЕЛЬНИК», 1); перерыв;
случай 3: draw_text (40, 0, «ВТОРНИК», 1); break;
case 4: draw_text (40, 0, «WEDNESDAY», 1); break;
case 5: draw_text (40, 0, «THURSDAY», 1); break;
case 6: draw_text (40, 0, «ПЯТНИЦА», 1); break;
по умолчанию: draw_text (40, 0, «СУББОТА», 1);
}
}
void DS3231_display () {
/ / Преобразовать двоично-десятичный код в десятичный
секунда = (секунда >> 4) * 10 + (секунда >> 4);
минута = (минута >> 4) * 10 + (минута & 0x0F);
час = (час> > 4) * 10 + (час & 0x0F);
дата = (дата >> 4) * 10 + (дата & 0x0F);
месяц = (месяц >> 4) * 10 + (месяц & 0x0F);
год = (год >> 4) * 10 + (год & 0x0F);
// Завершить преобразование
Время [7] = секунда% 10 + 48;
Время [6] = секунда / 10 + 48;
Время [4] = минута% 10 + 48;
Время [3] = минута / 10 + 48;
Время [1] = час% 10 + 48;
Время [0] = час / 10 + 48;
Календарь [9] = год% 10 + 48;
Календарь [8] = год / 10 + 48;
Календарь [4] = месяц% 10 + 48;
Календарь [3] = месяц / 10 + 48;
Календарь [1] = дата% 10 + 48;
Календарь [0] = дата / 10 + 48;
if (temperature_msb <0) {
temperature_msb = abs (temperature_msb);
температура [0] = ‘-‘;
}
else
температура [0] = »;
temperature_lsb >> = 6;
температура [2] = temperature_msb% 10 + 48;
температура [1] = temperature_msb / 10 + 48;
if (temperature_lsb == 0 || temperature_lsb == 2) {
temperature [5] = ‘0’;
если (temperature_lsb == 0) temperature [4] = ‘0’;
else temperature [4] = ‘5’;
}
if (temperature_lsb == 1 || temperature_lsb == 3) {
temperature [5] = ‘5’;
если (temperature_lsb == 1) temperature [4] = ‘2’;
else temperature [4] = ‘7’;
}
draw_text (4, 14, Calendar, 2); // Отображение даты (формат: дд / мм / гггг)
draw_text (16, 35, Time, 2); // Отображаем время
draw_text (80, 56, temperature, 1); // Отображение температуры
}
void blink_parameter () {
byte j = 0;
while (j <10 && digitalRead (button1) && digitalRead (button2)) {
j ++;
задержка (25);
}
}
байта редактирования (байт x_pos, байт y_pos, параметр байта) {
символьный текст [3];
sprintf (текст, «% 02u», параметр);
при этом (! DigitalRead (button1)); // Ждем, пока кнопка B1 не отпустит
while (true) {
while (! DigitalRead (button2)) {// Если кнопка B2 нажата
parameter ++;
if (i == 0 && параметр> 31) // Если дата> 31 ==> дата = 1
параметр = 1;
if (i == 1 && параметр> 12) // Если месяц> 12 ==> месяц = 1
parameter = 1;
if (i == 2 && параметр> 99) // Если год> 99 ==> год = 0
параметр = 0;
if (i == 3 && parameter> 23) // Если часы> 23 ==> hours = 0
parameter = 0;
if (i == 4 && параметр> 59) // Если минуты> 59 ==> минут = 0
parameter = 0;
sprintf (текст, «% 02u», параметр);
draw_text (x_pos, y_pos, текст, 2);
задержка (200); // Ждем 200 мс
}
draw_text (x_pos, y_pos, «», 2);
blink_parameter ();
draw_text (x_pos, y_pos, текст, 2);
blink_parameter ();
if (! DigitalRead (button1)) {// Если нажата кнопка B1
i ++; // Увеличение ‘i’ для следующего параметра
return parameter; // Возвращаем значение параметра и выходим
}
}
}
void draw_text (byte x_pos, byte y_pos, char * text, byte text_size) {
display.setCursor (x_pos, y_pos);
display.setTextSize (размер_текст);
display.print (текст);
display.display ();
}
void loop () {
if (! DigitalRead (button1)) {// Если кнопка B1 нажата
i = 0;
при этом (! DigitalRead (button1)); // Ждем, пока кнопка B1 не будет выпущена
while (true) {
while (! DigitalRead (button2)) {// Пока кнопка B2 нажата
day ++; // Увеличиваем день
наif (day> 7) day = 1;
display_day (); // Вызов функции display_day
delay (200); // Ждем 200 мс
}
draw_text (40, 0, «», 1);
blink_parameter (); // Вызов функции blink_parameter
display_day (); // Вызов функции display_day
blink_parameter (); // Вызов функции blink_parameter
if (! DigitalRead (button1)) // Если кнопка B1 нажата
break;
}
дата = редактировать (4, 14, дата); // Редактировать дату
month = edit (40, 14, month); // Редактировать месяц
year = edit (100, 14, year); // Редактировать год
hour = edit (16, 35, hour); // Редактировать часы
минута = edit (52, 35, минута); // Редактировать минуты
// Преобразовать десятичную дробь в двоично-десятичный
минута = ((минута / 10) << 4) + (минута% 10);
час = ((час / 10) << 4) + (час% 10);
дата = ((дата / 10) << 4) + (дата% 10);
месяц = ((месяц / 10) << 4) + (месяц% 10);
год = ((год / 10) << 4) + (год% 10);
// Завершить преобразование
// Записать данные в DS3231 RTC
Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231
Wire.write (0); // Отправляем адрес регистра
Wire.write (0); // Сброс сезонов и запуск генератора
Wire.write (minute); // Записываем минуты
Wire.write (час); // Записываем час
Wire.write (день); // Записываем день
Wire.написать (дата); // Записываем дату
Wire.write (месяц); // Записываем месяц
Wire.write (год); // Записываем год
Wire.endTransmission (); // Остановка передачи и освобождение шины I2C
delay (200); // Ждем 200 мс
}
Wire.beginTransmission (0x68); // Запуск протокола I2C с адресом DS3231
Wire.написать (0); // Отправляем адрес регистра
Wire.endTransmission (false); // перезапуск I2C
Wire.requestFrom (0x68, 7); // Запрос 7 байтов от DS3231 и освобождение шины I2C в конце чтения
second = Wire.read (); // Считываем секунды из регистра 0
minute = Wire.read (); // Считываем минуты из регистра 1
hour = Wire.