Views: 545
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
Это может быть интересно
Регулятор влажности ch-3800Views: 1553 И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
LED драйвер TM1639Views: 2469 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
MPLAB® Harmony – или как это просто! Часть 1.Views: 3839 Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации …
Стабилизатор тока на SN3350, часть 2Views: 1305 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …
Простой цифровой регулятор мощностиViews: 7727 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
Регулятор влажностиViews: 1363 Регулятор ILLISSI-CH-1000 предназначен для контроля и регулировки относительной влажности в диапазоне от 0 до 100%. Регулятор позволяет работать как в режиме осушения, так и увлажнения. Для измерения возможно …
Одноканальный емкостной сенсор – AT42QT1012Views: 2445 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
CAN – Controller Area NetworkViews: 1246 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROViews: 533 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
Development Boards PIC18F47Q84Views: 8043 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …

