Rtc h. Универсальная библиотека iarduino_RTC для часов реального времени DS1302, DS1307, DS3231 на Arduino

Как использовать RTC модули с Arduino. Какие функции предоставляет библиотека iarduino_RTC. Как настроить и синхронизировать часы реального времени. Какие преимущества дает использование RTC модулей в проектах Arduino.

Обзор библиотеки iarduino_RTC для работы с RTC модулями

Библиотека iarduino_RTC представляет собой универсальное решение для работы с популярными модулями часов реального времени (RTC) на платформе Arduino. Она поддерживает следующие микросхемы RTC:

  • DS1302
  • DS1307
  • DS3231

Основные возможности библиотеки включают в себя:

  • Установка и чтение даты/времени
  • Настройка будильников
  • Получение температуры (для DS3231)
  • Управление выводом SQW
  • Работа с энергонезависимой памятью модулей

Подключение RTC модулей к Arduino

Для подключения RTC модуля к Arduino необходимо соединить следующие выводы:

  • VCC — питание 5В или 3.3В (в зависимости от модуля)
  • GND — земля
  • SDA — линия данных I2C (A4 на Arduino Uno)
  • SCL — линия тактирования I2C (A5 на Arduino Uno)

Некоторые модули также имеют дополнительные выводы, например SQW для вывода прямоугольного сигнала.


Инициализация и базовое использование библиотеки

Для начала работы с библиотекой необходимо подключить ее и создать объект RTC:

«`cpp #include iarduino_RTC rtc(RTC_DS3231); void setup() { Serial.begin(9600); rtc.begin(); } void loop() { Serial.println(rtc.gettime(«d-m-Y, H:i:s, D»)); delay(1000); } «`

В этом примере мы инициализируем объект RTC для работы с модулем DS3231 и выводим текущее время в Serial каждую секунду.

Установка и синхронизация времени

Библиотека iarduino_RTC предоставляет несколько способов установки времени:

«`cpp void setup() { rtc.begin(); // Метод 1: Установка по отдельности rtc.settime(0, 30, 12, 1, 5, 2023, 1); // 12:30:00 1 мая 2023, понедельник // Метод 2: Установка строкой rtc.settime(«12:30:00 01.05.2023»); // Метод 3: Синхронизация с компилятором rtc.settime(__TIME__, __DATE__); } «`

Какой метод выбрать для установки времени? Это зависит от конкретной задачи:

  • Метод 1 удобен, когда время задается пользователем через интерфейс
  • Метод 2 полезен при получении времени в виде строки, например из NTP
  • Метод 3 идеален для начальной синхронизации при прошивке устройства

Работа с будильниками

RTC модули DS3231 и DS1307 поддерживают функцию будильника. Библиотека iarduino_RTC позволяет легко настраивать и использовать будильники:


«`cpp void setup() { rtc.begin(); rtc.setAlarm(ALM_MATCH_HOURS, 0, 30, 7); // Будильник на 7:30 } void loop() { if(rtc.alarmFired(1)) { Serial.println(«Сработал будильник!»); rtc.clearAlarm(1); } delay(1000); } «`

В этом примере мы устанавливаем будильник на 7:30 и проверяем его срабатывание в основном цикле. Как можно использовать будильники в проектах Arduino?

  • Включение устройств по расписанию (например, полив растений)
  • Периодический сбор данных с датчиков
  • Управление энергопотреблением — «пробуждение» устройства в определенное время

Получение температуры с DS3231

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

«`cpp void loop() { float temp = rtc.gettemperature(); Serial.print(«Температура: «); Serial.print(temp); Serial.println(» C»); delay(1000); } «`

Зачем может понадобиться температура с RTC модуля? Вот несколько применений:


  • Мониторинг температуры внутри устройства
  • Компенсация температурной зависимости других датчиков
  • Дополнительные данные для систем умного дома

Работа с энергонезависимой памятью

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

«`cpp void setup() { rtc.begin(); // Запись данных rtc.writeRTC(0, 123); // Запись байта 123 в ячейку 0 // Чтение данных byte data = rtc.readRTC(0); Serial.print(«Прочитано: «); Serial.println(data); } «`

Как можно использовать эту память в проектах Arduino?

  • Хранение калибровочных коэффициентов для датчиков
  • Сохранение настроек устройства
  • Ведение журнала событий
  • Хранение счетчиков или аккумулированных значений

Управление выводом SQW

Многие RTC модули имеют вывод SQW (Square Wave), который может генерировать прямоугольный сигнал различной частоты. Библиотека iarduino_RTC позволяет управлять этим выводом:


«`cpp void setup() { rtc.begin(); rtc.setSQWPin(SQW_1Hz); // Генерация сигнала 1 Гц } «`

Какие возможности дает использование вывода SQW?

  • Генерация тактового сигнала для других устройств
  • Создание простых часов с секундной стрелкой
  • Синхронизация нескольких устройств
  • Создание звуковых сигналов различной частоты

Преимущества использования RTC модулей в проектах Arduino

Использование отдельных RTC модулей в проектах Arduino имеет ряд преимуществ по сравнению с использованием встроенных средств микроконтроллера:

  • Высокая точность хода часов (особенно у DS3231)
  • Сохранение времени при отключении питания
  • Разгрузка основного микроконтроллера от задачи отсчета времени
  • Дополнительные функции (будильники, температура, NVRAM)
  • Возможность быстрого переноса кода между разными проектами

Заключение

Библиотека iarduino_RTC предоставляет удобный и универсальный интерфейс для работы с популярными RTC модулями на платформе Arduino. Она позволяет легко добавить в проект функции точного отсчета времени, будильников и дополнительного хранения данных. Использование RTC модулей открывает широкие возможности для создания проектов, требующих точной синхронизации, работы по расписанию или длительного автономного функционирования.



Управление системным временем и RTC в высокоуровневом приложении — Azure Sphere

  • Статья
  • Чтение занимает 4 мин

Часы RTC (часы в реальном времени) используются для хранения времени на устройстве Azure Sphere, когда устройство теряет питание и не имеет доступа к сетевому подключению после перезагрузки устройства. Это позволяет устройству поддерживать время во время потери питания, даже если у него нет доступа к NTP-серверу.

Если задано системное время, оно не сохраняется, когда устройство теряет питание. Чтобы сохранить время во время потери питания, необходимо вызвать функцию Applibs clock_systohc. При clock_systohc вызове системное время передается в формат RTC.

Требования к RTC

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

Включите заголовок rtc в проект:

 #include <applibs\rtc.h>

Параметры манифеста приложения

Чтобы использовать API-интерфейсы RTC и стандартных часов, SystemTime необходимо добавить возможность приложения в манифест приложения, а затем задать значение

true. Манифест приложения Azure Sphere содержит дополнительные сведения о манифесте приложения.

{
  "SchemaVersion": 1,
  "Name" : "Mt3620App3_RTC",
  "ComponentId" : "bb267cbd-4d2a-4937-8dd8-3603f48cb8f6",
  "EntryPoint": "/bin/app",
  "CmdArgs": [],
   "Capabilities": {
    "AllowedConnections": [],
    "AllowedTcpServerPorts": [],
    "AllowedUdpServerPorts": [],
    "HardwareAddressConfig": true,
    "Gpio": [],
    "Uart": [],
    "WifiConfig": false,
    "NetworkConfig": false,
    "SystemTime": true,
    "TimeSyncConfig": true
  }
}

Получение системного времени

Чтобы получить системное время, вызовите стандартную функцию clock_gettime .

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

Чтобы задать системное время, вызовите стандартную функцию clock_settime .

Синхронизация системного времени с RTC

Когда системное время задано, оно не сохраняется, когда устройство теряет питание. Чтобы сохранить время во время потери питания, вызовите функцию Applibs clock_systohc . При clock_systohc вызывается системное время, которое передается в формат RTC.

Настройка клиентской службы NTP

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

Задание часового пояса

Системное время и время RTC хранятся в gmt/UTC. Вы можете изменить часовой пояс setenv , используемый приложением, вызвав функцию для обновления переменной среды TZ, а затем вызвав функцию tzset .

В проекте SetTimeFromLocation показано, как использовать обратный IP-поиск для получения сведений о расположении, получения времени для расположения и задания времени устройства. Этот проект входит в коллекцию Azure Sphere, коллекцию несвязанного скрипта, служебных программ и функций.

ОС Azure Sphere поддерживает некоторые, но не все возможные форматы для переменной среды TZ:

  • Текущий часовой пояс можно задать с использованием летнего времени (DST) или без нее. Примеры: EST+5, EST+5EDT. Это значение является положительным, если локальный часовой пояс находится к востоку от простого меридиана, а отрицательный — к востоку.
  • Вы не можете указать дату и время, когда DST должен вступает в силу.
  • Невозможно указать файл часового пояса или базу данных.

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

Указание NTP-сервера

Клиентскую службу NTP можно настроить для получения времени из нескольких источников. Источник времени по умолчанию , prod.time.sphere.azure.netкак указано в требованиях к сети ОС Azure Sphere.

NTP-клиент пытается синхронизироваться каждые 15 секунд до успешной синхронизации. После успешной синхронизации она пытается повторно синхронизировать время каждые 24 часа. Когда Azure Sphere выполняет синхронизацию времени, она сначала использует случайный исходный порт клиента UDP в диапазоне от 32678 до 61000. В случае сбоя этого порта Azure Sphere попытается использовать порт 124 в качестве исходного порта клиента UDP.

Можно указать, что система получает время с DHCP-сервера, или указать источник времени в приложении с помощью Networking_TimeSync_EnableCustomNTP или Networking_TimeSync_EnableDefaultNTP.

Если настроено использование DHCP для источников сервера времени, Azure Sphere будет обрабатывать параметр DHCP 042, а NTP-клиент будет обрабатывать только первые две записи, отправленные в параметре DHCP, которые должны быть указаны в порядке предпочтения. Они будут рассматриваться как сервер-источник и сервер-получатель.

Вы также можете настроить сервер времени с помощью Networking_TimeSync_EnableCustomNTP, если вы хотите указать сервер основного и дополнительного времени с помощью приложения. Максимальная длина для каждого полного доменного имени сервера составляет 255 символов.

Резервный вариант

  • Если NTP-клиент настроен для получения серверов времени через DHCP или API, для указания поведения резервного копирования требуется дополнительный параметр.

  • Клиент попытается сначала связаться с сервером основного времени. Если клиенту не удается получить допустимый ответ сервера времени, он будет пытаться использовать дополнительный сервер времени (если он указан).

  • Если указан дополнительный Networking_NtpOption_FallbackServerEnabled сервер времени и он завершается сбоем или при сбое параметра вернуться к значениям ос по умолчанию через сбой, система будет обращаться к источнику времени ОС по умолчанию prod.

    time.sphere.azure.net.

    • В течение следующего 24-часового интервала синхронизации ОС будет выполнять запрос к основному серверу времени.
  • Если вы указали Networking_NtpOption_FallbackServerDisabled, ОС будет выполнять запросы к серверу-источнику и серверу-получателю каждые 15 секунд, пока не будет успешно синхронизирован с одним из серверов времени.

Устройства с несколькими адресами

Параметры сервера времени — это глобальный параметр, а не параметр для каждого интерфейса. Если устройство Azure Sphere является многонастройным и оба интерфейса получают сведения о NTP-сервере через DHCP, то будет использован последний обработанный набор параметров DHCP NTP.

Пример системного времени

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

В проекте SetTimeFromLocation показано, как использовать обратный IP-поиск для получения сведений о расположении, получения времени для расположения и задания времени устройства. Этот проект входит в коллекцию Azure Sphere, коллекцию несвязанного скрипта, служебных программ и функций.

Пользовательский пример NTP

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

linux/rtc.h на мастере · torvalds/linux · GitHub

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
/*
* Общий интерфейс RTC.
* Эта версия содержит часть пользовательского интерфейса для часов реального времени
* обслуживание. Он используется как с устаревшим mc146818, так и с EFI 9.0006
* Struct rtc_time и первые 12 ioctl Пола Гортмейкера, 1996 г. — выделено
* из в этот файл для ядер 2.4.
*
* Авторское право (C) 1999 Hewlett-Packard Co.
* Авторское право (C) 1999 г. Стефан Эранян
*/
#ifndef_UAPI_LINUX_RTC_H_
# определить _UAPI_LINUX_RTC_H_
#include h>
#include
#include
/*
* Структура, используемая для передачи данных через следующий ioctl. Похож на
* struct tm в , но она должна быть здесь, чтобы ядро ​​
* исходный код является автономным, что позволяет выполнять кросс-компиляцию и т. д. и т. д.
*/
структура rtc_time {
интервал tm_sec;
интервал tm_min;
интервал tm_hour;
интервал tm_mday;
интервал tm_mon;
интервал tm_year;
интервал tm_wday;
интервал tm_yday;
интервал tm_isdst;
};
/*
* Эта структура данных вдохновлена ​​EFI (v0. 92) пробуждение
* API тревог.
*/
структура rtc_wkalrm {
разрешен беззнаковый символ; /* 0 = тревога отключена, 1 = тревога включена */
ожидание беззнакового символа; /* 0 = тревога не ожидается, 1 = тревога ожидается */
время структуры rtc_time; /* время установки будильника */
};
/*
* Структура данных для управления коррекцией PLL, улучшенная функция RTC
* pll_value используется для получения или установки текущего значения коррекции,
* остальная часть структуры используется для запроса аппаратных возможностей.
* Создан по образцу часов реального времени, используемых в компьютерах Q40/Q60, но
* должен быть достаточно гибким для других устройств
*
* +ve pll_value означает, что часы будут работать быстрее на
* pll_value*pll_posmult/pll_clock
* -ve pll_value означает, что часы будут работать медленнее на
* pll_value*pll_negmult/pll_clock
*/
структура rtc_pll_info {
интервал pll_ctrl; /* заполнитель для более изящного элемента управления */
интервал pll_value; /* получить/установить значение коррекции */
интервал pll_max; /* максимальное +ve (быстрее) значение корректировки */
интервал pll_min; /* max -ve (более медленное) значение корректировки */
интервал pll_posmult; /* коэффициент для коррекции +ve */
интервал pll_negmult; /* коэффициент для коррекции -ve */
длинных pll_clock; /* базовая частота PLL */
};
структура rtc_param {
__u64 параметр;
союз {
__u64 значение_у;
__s64 значение;
__u64 точка;
};
__у32 индекс;
__u32 __pad;
};
/*
* вызовы ioctl, разрешенные для интерфейса /dev/rtc, если
* любой из драйверов RTC включен.
*/
#define RTC_AIE_ON _IO(‘p’, 0x01) /* Тревога внутр. включить */
#define RTC_AIE_OFF _IO(‘p’, 0x02) /* … выкл. */
#define RTC_UIE_ON _IO(‘p’, 0x03) /* Обновить внутр. включить */
#define RTC_UIE_OFF _IO(‘p’, 0x04) /* … выкл. */
#define RTC_PIE_ON _IO(‘p’, 0x05) /* Периодический интервал. включить */
#define RTC_PIE_OFF _IO(‘p’, 0x06) /* … выключено */
#define RTC_WIE_ON _IO(‘p’, 0x0f) /* Сторожевой таймер, внутр. включить */
#define RTC_WIE_OFF _IO(‘p’, 0x10) /* … выкл. */
#define RTC_ALM_SET _IOW(‘p’, 0x07, struct rtc_time) /* Установить время будильника */
#define RTC_ALM_READ _IOR(‘p’, 0x08, struct rtc_time) /* Чтение времени будильника */
#define RTC_RD_TIME _IOR(‘p’, 0x09, struct rtc_time) /* Чтение времени RTC */
#define RTC_SET_TIME _IOW(‘p’, 0x0a, struct rtc_time) /* Установить время RTC */
#define RTC_IRQP_READ _IOR(‘p’, 0x0b, unsigned long) /* Скорость чтения IRQ */
#define RTC_IRQP_SET _IOW(‘p’, 0x0c, unsigned long) /* Установить скорость IRQ */
#define RTC_EPOCH_READ _IOR(‘p’, 0x0d, unsigned long) /* Чтение эпохи */
#define RTC_EPOCH_SET _IOW(‘p’, 0x0e, unsigned long) /* Установить эпоху */
#define RTC_WKALM_SET _IOW(‘p’, 0x0f, struct rtc_wkalrm)/* Установить сигнал пробуждения*/
#define RTC_WKALM_RD _IOR(‘p’, 0x10, struct rtc_wkalrm)/* Получить сигнал пробуждения*/
#define RTC_PLL_GET _IOR(‘p’, 0x11, struct rtc_pll_info) /* Получить поправку PLL */
#define RTC_PLL_SET _IOW(‘p’, 0x12, struct rtc_pll_info) /* Установить коррекцию PLL */
#define RTC_PARAM_GET _IOW(‘p’, 0x13, struct rtc_param) /* Получить параметр */
#define RTC_PARAM_SET _IOW(‘p’, 0x14, struct rtc_param) /* Установить параметр */
#define RTC_VL_DATA_INVALID _BITUL(0) /* Напряжение слишком низкое, данные RTC неверны */
#define RTC_VL_BACKUP_LOW _BITUL(1) /* Низкое резервное напряжение */
#define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Резервная копия пуста или отсутствует */
#define RTC_VL_ACCURACY_LOW _BITUL(3) /* Напряжение низкое, точность RTC снижена */
#define RTC_VL_BACKUP_SWITCH _BITUL(4) /* Произошло резервное переключение */
#define RTC_VL_READ _IOR(‘p’, 0x13, unsigned int) /* Обнаружение низкого напряжения */
#define RTC_VL_CLR _IO(‘p’, 0x14) /* Очистить информацию о низком напряжении */
/* флаги прерывания */
#define RTC_IRQF 0x80 /* Любое из следующего активно */
#define RTC_PF 0x40 /* Периодическое прерывание */
#define RTC_AF 0x20 /* Тревожное прерывание */
#define RTC_UF 0x10 /* Прерывание обновления для RTC 1 Гц */
/* список функций */
#define RTC_FEATURE_ALARM 0
#define RTC_FEATURE_ALARM_RES_MINUTE 1
#define RTC_FEATURE_NEED_WEEK_DAY 2
#define RTC_FEATURE_ALARM_RES_2S 3
#define RTC_FEATURE_UPDATE_INTERRUPT 4
#define RTC_FEATURE_CORRECTION 5
#define RTC_FEATURE_BACKUP_SWITCH_MODE 6
#define RTC_FEATURE_ALARM_WAKEUP_ONLY 7
#define RTC_FEATURE_CNT 8
/* список параметров */
#define RTC_PARAM_FEATURES 0
#define RTC_PARAM_CORRECTION 1
#define RTC_PARAM_BACKUP_SWITCH_MODE 2
#define RTC_BSM_DISABLED 0
# определить RTC_BSM_DIRECT 1
#define RTC_BSM_LEVEL 2
# определить RTC_BSM_STANDBY 3
# определить RTC_MAX_FREQ 8192
#endif /* _UAPI_LINUX_RTC_H_ */

RTClib — библиотеки Arduino

RTClib — библиотеки Arduino

Вилка фантастической RTC-библиотеки Jeelab

Автор
Adafruit
Веб-сайт
https://github. com/adafruit/RTClib
Категория
Хронометраж
Лицензия
MIT
Тип библиотеки
Рекомендуемый
Архитектуры
Любые

Работает с DS1307, DS3231, PCF8523, PCF8563 на различных архитектурах

Имя файла Дата выпуска Размер файла
RTClib-2.1.1.zip 2022-08-09 51,54 КиБ
RTClib-2.1.0.zip 2022-08-08 51,54 КиБ
RTClib-2.0.3.zip 2022-05-16 50,61 КиБ
RTClib-2.0.2.zip 2021-12-21 50,62 КиБ
RTClib-2.0.1.zip 2021-11-08 50,62 КиБ
RTClib-2. 0.0.zip 2021-10-29 50,56 КиБ
RTClib-1.14.2.zip 2021-10-25 47,33 КиБ
RTClib-1.14.1.zip 2021-08-03 47,37 КиБ
RTClib-1.14.0.zip 2021-07-22 47,42 КиБ
RTClib-1.13.0.zip 2021-04-08 45,10 КиБ
RTClib-1.12.5.zip 2021-02-09 45,17 КиБ
RTClib-1.12.4.zip 2020-11-30 45,17 КиБ
RTClib-1.12.3.zip 2020-11-23 45,14 КиБ
RTClib-1.12.2.zip 2020-11-17 45,14 КиБ
RTClib-1. 12.1.zip 2020-11-03 45,15 КиБ
RTClib-1.12.0.zip 20.10.2020 45,14 КиБ
RTClib-1.11.4.zip 2020-10-16 41,34 КиБ
RTClib-1.11.3.zip 2020-09-30 40,38 КиБ
RTClib-1.11.2.zip 2020-09-01 40,25 КиБ
RTClib-1.11.1.zip 2020-08-17 39,98 КиБ
RTClib-1.11.0.zip 2020-07-21 37,96 КиБ
RTClib-1.10.0.zip 2020-06-29 37,75 КиБ
RTClib-1.9.0.zip 2020-06-29 37,50 КиБ
RTClib-1. 8.0.zip 2020-05-26 37,29 КиБ
RTClib-1.7.0.zip 2020-05-16 35,17 КиБ
RTClib-1.6.0.zip 2020-05-07 34,91 КиБ
RTClib-1.5.0.zip 2020-04-25 30,17 КиБ
RTClib-1.4.1.zip 2020-04-06 26,75 КиБ
RTClib-1.4.0.zip 2020-03-10 26,74 КиБ
RTClib-1.3.4.zip 2020-02-29 26,05 КиБ
RTClib-1.3.3.zip 2019-10-25 25,98 КиБ
RTClib-1.3.2.zip 2019-10-11 25,91 КиБ
RTClib-1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *