Views: 493
RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована.
Основные особенности модуля RTCC:
• Работает в режиме глубокого сна.
• Возможность выбора источника синхронизации.
• Обеспечивает часы, минуты и секунды, используя 24-часовой формат.
• Видимость полусекундного периода.
• Предоставляет календарь – день недели, дату, месяц и год.
• Конфигурация сигнала тревоги на полсекунды, одна секунда, 10 секунд, одна минута, 10 минут, один час, один день, одна неделя, один месяц или один год.
• Повтор будильника с декрементным счетчиком.
• Тревога с бессрочным повторным звонком.
• Коррекция года с 2000 по 2099 год.
• Формат BCD для небольших программных накладных расходов.
• Оптимизирован для работы в течение длительного времени.
• Пользовательская калибровка тактового генератора 32,768 кГц/32K Частота INTRC с периодической автоматической настройкой.
• Оптимизирован для работы в течение длительного времени.
• Дробная вторая синхронизация.
• Калибровка с точностью ± 2,64 секунды за месяц.
• Калибрует до 260 ppm ошибки кристалла.
• Возможность периодически запускать внешние устройства без вмешательства ЦП (внешнее управление мощностью).
• Выход управления мощностью для управления внешней цепью.
• Калибровка вступает в силу каждые 15 секунд.
• Выполняется с любого из следующих действий:
– Внешний источник тактовой частоты (RTC) 32,768 кГц.
– Внутренний генератор LPRC 31,25 кГц.
– Внешний вход 50 Гц или 60 Гц.
Блок схема модуля часов реального времени:С чего я начинаю проектировать часы если необходимо их реализовать в самом микроконтроллере? Первое это что будет служить тактовым генератором и не долго думаю выбираем встроенный вторичный генератор, он позволяет работать с низкочастотными резонаторами, в нашем варианте интересует резонатор на 32,768 Гц.
Второй этап, это резервное питание. Ряд микроконтроллеров типа PIC24FJ128GA204 FAMILY имеют специальный вывод VBAT.
Этот вывод предназначен для подключения к источнику резервного питания и позволяет питать генератор часов при отключении основного питания. Я предпочитаю, для резервного питания использовать ионисторы. Использования ионисторов позволят забыть о проблеме замены батарейки и сделать работу устройства практически вечной. Если вы используете 3,3 вольтовое питание, то для зарядки и ионистора рекомендую использовать следующую схему:
Ионисторы имеют стандартное напряжение 2,7 вольта (естественно есть варианты и на 3,0 и на 5,0 вольт, но 2,7 самое распространённое), для ограничения тока зарядки (ток через диоды учитываем), устанавливает резистор R15, для понижения напряжения до 2,7 вольта и как вентиль, использует диодную сборку.
Схему подключения резонатора к выводам думаю все разберутся (в этом МК используются выводы RA4 and RB4), обычно резонатор и два запускающих конденсатора.
Теперь сама конфигурация в MCC. “Просто добавьте воды” – добавьте модуль RTCC в ресурсы проекта:
Если вам нужны только данные времени и даты, то ничего настраивать не нужно, ну можете установить значение часов и календаря при инициализации модуля:
Кликаем на значок часов:
и настраиваем как ваше сердцу будет угодно, тут надо подразумевать, что это выполняется начальная инициализация модуля в проекте.
******************** тут был большой перерыв в написании и я, если честно, забыл чем хотел поделиться, по этому далее что помню по использованию этого модуля *******
MCC предоставляет для пользователя минимум функции, опишу только то как я использовал их в проектах. Добавлю свои три функции для автоматического перехода на летнее время, хотя считаю что это безобразие, с летним временем, надо отменять.
Вся информация в библиотеке МСС передаётся через структуру tm
struct tm { /* date and time components */ int tm_sec; // секунды int tm_min; // минуты int tm_hour; // час int tm_mday; // день int tm_mon; // месяц int tm_year; // год int tm_wday; // день недели int tm_yday; // номер дня в году int tm_isdst; // флаг летнего времени };
Функция void RTCC_Initialize(void); предназначена для инициализации модуля реального времени и должна быть запущене один раз перед использованием других функций. Но тут можно не беспокоиться МСС за вас это выполнит при конфигурации системы. Убедиться можно, что это выполнено просмотрев файл system.c в папке MCC Generatef Files функция
void SYSTEM_Initialize(void) { PIN_MANAGER_Initialize(); // OSCILLATOR_Initialize(); CLOCK_Initialize(); INTERRUPT_Initialize(); HLVD_Initialize(); OC4_Initialize(); OC1_Initialize(); OC3_Initialize(); ADC1_Initialize(); OC2_Initialize(); RTCC_Initialize(); SPI1_Initialize(); UART1_Initialize(); TMR2_Initialize(); UART2_Initialize(); TMR3_Initialize(); TMR5_Initialize(); }
Следующая функция получить время bool RTCC_TimeGet(struct tm *currentTime);
как я её пользовался для создаю структуру в которой будет храниться параметры время которую я буду использовать, например, для индикации
struct tm currentTime; // структура времени для индикации
Делаю свою функцию чтения времени которую буду вызывать при необходимости
void readtime (void) // обновить дату-времени { if (RTCC_TimeGet (¤tTime)) // Чтение времени и даты { SummertimeS (¤tTime); // функции обработки летнего времни Status.tm_sec = RAM.tm_sec = currentTime.tm_sec; // Секунды - [0,59] Status.tm_min = RAM.tm_min = currentTime.tm_min; // Минуты - [0,59] Status.tm_hour = RAM.tm_hour = currentTime.tm_hour; // Час - [0,23] Status.tm_wday = RAM.tm_wday = currentTime.tm_wday; // День недели - [0,6] Status.tm_mday = RAM.tm_mday = currentTime.tm_mday; // День месяца - [1,31] Status.tm_mon = RAM.tm_mon = currentTime.tm_mon; // месяц - [1,12] Status.tm_year = RAM.tm_year = currentTime.tm_year; // год - [00,99] } }
Для чего так заумно? Время, которое “идёт” в часах оно настраивается как текущее часовое время и может синхронизироваться автоматически через инет с часовыми серверами, а для индикации у нас возникает показывать или “нормальное время” или 2летнее”. В переменная currentTime – применятся для получение текущего времени часов, потом я его обрабатываю функцией SummertimeS которая в зависимости от даты корректирует часы. И только после это загружаю его в разные области памяти в зависимости потребностей (Status и RAM это разные мои переменные в проекте, но вы должны, если пойдёте по этому принципу самостоятельно для себя определить, где вы будете и как хранить извлечённое время из модуля часов реального времени (RTCC)).
Следующая функция void RTCC_TimeSet(struct tm *initialTime); предназначена для записи параметров времени в модуль RTCC. Считаю с нет не возникнет проблем, например, нам необходимо синхронизировать время, с сервера точного времени, со временем в нашем модуле RTCC, мы обновляем данные в структуре currentTime и вызываем функцию RTCC_TimeSet.
Пример, как я использовал для корекции времени
realTime.tm_sec = combu.tm_sec; // секунды realTime.tm_min = combu.tm_min; // минуты realTime.tm_hour = combu.tm_hour; // час realTime.tm_wday = combu.tm_wday; // день недели realTime.tm_mday = combu.tm_mday; // число realTime.tm_mon = combu.tm_mon; // месяц realTime.tm_year = combu.tm_year; // год if (SunTimeS (&realTime)) { if (--realTime.tm_hour < 0)realTime.tm_hour = 0; // Определение летнего времени) } RTCC_TimeSet (&realTime); // загрузить новые параметры времени
Есть еще две функции чтении и записи времени которые использую двоично десятичный формат преобразования времени, которые применяться в основном в микросхемах часах реального времени bool RTCC_BCDTimeGet(bcdTime_t *currentTime); и void RTCC_BCDTimeSet(bcdTime_t *initialTime). Я их не использовал, но считаю проблем их использовании при необходимости не возникнет.
По библиотеке определения летнего времени. Суть её определить в каком периоде находиться устройство и при необходимости реальное время корректировать на час вперед когда период летнего времени или не корректировать когда нормальное время. Задача библиотеки вычислить последнее число последнего воскресенья месяца.
В ней есть три функции
void SummertimeS ( struct tm *initialTime ); // функции обработки летнего времени
uint8_t DayOfWeekS (uint8_t day, uint8_t month, uint16_t year); // определение последнего числа последнего воскресенья месяца
bool SunTimeS ( struct tm * dt ); // Определение летнего времени
Эта библиотека из проекта, я её как универсальную не делал, для её использования вам понадобиться изменить имя EE.SAr (глобальная переменная) переменной которой задается флаг использовать переход на летнее время или не использовать.
MCC PIC24 - модуль REAL-TIME CLOCK AND CALENDAR (RTCC) библиотека перевода часов на летнее время 0.00 KB 1868 downloads
Библиотека перевода часов на летнее время ...Вот еще одну функцию хочу показать, как я проверяю работоспособность модуля, типа тикает он или не тикает:
/* неисправность внутрених часов реального времени*/ void errorRealTime (void) // проверка на исправность внутрених часов реального времени { static uint16_t min = 77, hor = 77; // прошлое значение времени // сравнить новое значение времени с прошлым if (min == RAM.tm_min && hor == RAM.tm_hour) RAM.ERR.erRealTime = 1; // нет хода времени else RAM.ERR.erRealTime = 0; // часы исправны // запомнить текущее значение min = RAM.tm_min; // hor = RAM.tm_hour; // }//-----------------------------------------------------------------------------
P.S. Трудно чёто добавить когда выпал с темы, задавайте вопросы, что знаю расскажу. У меня использование библиотеки от МСС не вызвало проблем, настройку точности хода не использовал, т.к. применяю в основном сейчас синхронизацию времени от серверов точного времени через инет.
Это может быть интересно
- NeoPixel LED and PIC24Views: 646 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
- Altium Designer – подготовка документации для производства и сборки печатных платViews: 3678 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
- CLUBBEST – reasoning on the visualization of music.Views: 130 ВІД ЗАХОДУ ДО СВІТАНКУ АБО ПОБАЧИТИ МУЗИКУ. Час доби, коли почуття людини загострюються, – це час від заходу до світанку. В цей час людина відкрита для …
- LM317 и светодиодыViews: 7856 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
- Мультимедийная сеть – AVC-LAN TOYOTAViews: 5733 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …
- MAX7219/21 и 8х8 LED дисплеиViews: 931 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
- BMP280 – температура и атмосферное давление – учебный проектViews: 2062 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
- Регулятор влажности ch-3800Views: 1429 И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
- Temperature measurement with NTC thermistor.Views: 325 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
- MPLAB® Harmony – или как это просто! Часть 4.Views: 2050 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …
Комментарии