
Views: 484
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 1879 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. Трудно чёто добавить когда выпал с темы, задавайте вопросы, что знаю расскажу. У меня использование библиотеки от МСС не вызвало проблем, настройку точности хода не использовал, т.к. применяю в основном сейчас синхронизацию времени от серверов точного времени через инет.
Это может быть интересно
I2C MODULE – PIC18F25K42 Device ID Revision = A001
Views: 1091 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …Audio-bluetooth modules BK8000L (noname)
Views: 663 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …PIC18F25K42 – v. A001 – выявленные баги.
Views: 612 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …Стабилизатор тока для светодиодов SN3350
Views: 2611 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …Цифровой спидометр для автомобиля
Views: 10169 Универсальность печатной платы ch-c0030pcb позволяет создавать на её основе разнообразные устройства. Одним из таких устройств является электронный спидометр для автомобиля, в котором можно задать два компаратора скорости, например, для …MPLAB X IDE – управление проектами
Views: 978 Среда MPLAB X IDE позволяет оперативно работать с несколькими проектами, например, если у вас в работе несколько проектов: Для того чтобы переключиться достаточно выбрать другой проект: Для выбора …Бегущие огни (ch-bo-36)
Views: 2433 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …Стабилизатор тока на SN3350, часть 2
Views: 1131 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …Универсальный терморегулятор ch-c3000
Views: 2992 Терморегулятор ch-c3000 предназначен для управления системами регулирования температуры в пределах от – (минус) 55 до + 125 С. Регулятор может использоваться как в системах отопления, так и в …MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
Views: 1126 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
Комментарии