Views: 446
DS1340 часы реального времени от ОПИСАНИЕ. Особенностью этой микросхемы является наличие схемы управления питанием резервного источника питания. Для резервирования питания можно использовать как обычную литиевую батарейку, так и обычный конденсатор или ионистор.
Особенности управления.
В 9 регистре хранится флаг OSF – это флаг аварии. Авария может возникать по нескольким причинам, сбой работы генератора от внешних помех, выключение генератора битом EOSC, снижение напряжения основного питания или напряжения резервного питания ниже нормы. Этим битом необходимо контролировать работу часов после включения питания, если этот бит установлен, то гарантированно произошел сбой времени и необходима коррекция. На практике это кусок кода может выглядеть так:
// инициализация часов, если батарейка разряжена i2c_start (0xD0,0); // загрузка адреса устройства,функция запись i2c_write (0x09); // адрес ячейки памяти для обращения i2c_restart (0xD0,1); // загрузка адреса устройства,функция чтение temp=i2c_read_noack (); // i2c_stop (); // if (temp & 0b10000000 ) // если бит CH bit = 1, значить "села" батарейка { // необходима коррекция времени, установка значений по умолчанию i2c_start (0xD0,0); // установка адреса. i2c_write (0x00); // установить адрес обращения i2c_write (0x00); // 00H данные записи СЕКУНДЫ и включаем часы в работу i2c_write (0x30); // 01H данные записи МИНУТЫ i2c_write (0x12); // 02H данные записи ЧАСЫ i2c_write (0x01); // 03H данные записи ДЕНЬ НЕДЕЛИ i2c_write (0x26); // 04H данные записи ДАТА i2c_write (0x06); // 05H данные записи МЕСЯЦ i2c_write (0x13); // 06H данные записи ГОД i2c_stop (); i2c_start (0xD0,0); // установка адреса. i2c_write (0x07); // установить адрес обращения i2c_write (0b01000000); // 07H Control/512Hz на выходе частота i2c_stop (); i2c_start (0xD0,0); // установка адреса. i2c_write (0x08); // установить адрес обращения i2c_write (0b10101001); // 08H Trickle Charger One diode, 250? resistor i2c_stop (); i2c_start (0xD0,0); // установка адреса. i2c_write (0x09); // установить адрес обращения i2c_write (0x00); // 09H Oscillator Stop Flag (OSF) i2c_stop (); }
Бит OSF устанавливается аппаратно, его нужно программно сбросить (установить программно нельзя).
Если необходимо отключить работу генератора, например, для экономии разряда батареи, то это можно сделать установив бит EOSC в 1.
Обратите внимание, что запись (или чтение) в регистры данных 0 -6 можно выполнять последовательно в одном цикле. А для записи в системные регистры 0x07, 0x08, 0x09 надо обращаться конкретно к каждому.
Для чтения и записи данных в регистры часов можно использовать следующие функции:
// преобразование двоичного в двоично-десятичное char bin_decbin (char data) { char dest, edin; dest=data%100/10; edin=data%10; data=edin; data+=dest<<4; return data; } //сохранение настроект календаря void savetime (void) { i2c_start (0xD0,0); // установка адреса. i2c_write (0x00); // адрес ячейки памяти для обращения i2c_write (bin_decbin (rtcSecN)); // данные записи СЕКУНДЫ i2c_write (bin_decbin (rtcMinN)); // данные записи МИНУТЫ i2c_write (bin_decbin (rtcHourN)); // данные записи ЧАСЫ i2c_write (day); // данные записи ДЕНЬ НЕДЕЛИ i2c_write (bin_decbin (rtcMdayN)); // данные записи ДАТА i2c_write (bin_decbin (rtcMonN)); // данные записи МЕСЯЦ i2c_write (bin_decbin (rtcYearN)); // данные записи ГОД i2c_stop (); }// // преобразование двоично-десятичного в двоичное char decbin_bin (char data) { char a; a=data>>4; a=a*10; data=data&0b00001111; data+=a; return data; } void readtime (void) { // char a; // чтение даты и времени i2c_start (0xD0,0); // загрузка адреса устройства,функция запись i2c_write (0x00); // адрес ячейки памяти для обращения i2c_restart (0xD0,1); // загрузка адреса устройства,функция чтение rtcSecN=i2c_read_ack(); rtcSecN=rtcSecN&0b01111111; rtcSecN=decbin_bin (rtcSecN); rtcMinN=i2c_read_ack(); rtcMinN=rtcMinN&0b01111111; rtcMinN=decbin_bin (rtcMinN); rtcHourN=i2c_read_ack(); rtcHourN=rtcHourN&0b00111111; rtcHourN=decbin_bin (rtcHourN); day=i2c_read_ack(); day=day&0b00000111; rtcMdayN=i2c_read_ack(); rtcMdayN=rtcMdayN&0b00111111; rtcMdayN=decbin_bin (rtcMdayN); rtcMonN=i2c_read_ack(); rtcMonN=rtcMonN&0b00011111; rtcMonN=decbin_bin (rtcMonN); rtcYearN=i2c_read_noack(); rtcYearN=decbin_bin (rtcYearN)+100; i2c_stop (); }//
Так как время и дата храниться в часах в двоично десятичном формате, а обрабатывать её удобно в двоичном. для преобразование одно байта используются функции:
Преобразование двоичного в двоично-десятичное
char bin_decbin (char data)
Преобразование двоично-десятичного в двоичное
char decbin_bin (char data)
Для записи и чтения:
Сохранение настроек календаря
void savetime (void)
Чтение времени и даты
void readtime (void)
Для работы с PIC24 можно использовать библиотеку I2C
Это может быть интересно
- The art of DJViews: 118 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …
- 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204Views: 830 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
- Проект с использованием MCC часть 01Views: 2544 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
- Простой цифровой регулятор мощностиViews: 6732 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
- CCP модуль для декодирования ИК-кодов пультов ДУViews: 1049 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
- Проект с использованием MCC часть 03Views: 1591 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
- MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)Views: 493 RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника …
- Altium Designer my setup system and project structure V23.3Views: 176 Оновлення бази даних та шаблонів від березня 2023 року. Updating the database and templates from March 2023. Altium Designer my Libraries, Project templates, System settings by Catcatcat. Дивись …
- Стабилизатор тока на SN3350, часть 2Views: 1162 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …
- Проект с использованием MCC часть 10Views: 840 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …