
Views: 532
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
Это может быть интересно
MPLAB X IDE – управление проектами
Views: 1078 Среда MPLAB X IDE позволяет оперативно работать с несколькими проектами, например, если у вас в работе несколько проектов: Для того чтобы переключиться достаточно выбрать другой проект: Для выбора …ch-4000 – универсальная печатная плата
Views: 1112 На смену устаревшей плате ch-3000, пришла новая ch-4000. Плату уже можно приобрести в магазине Ворон. Схема. Плата позволяет создавать таймеры, часы реального времени, регуляторы температуры, регуляторы влажности, вольтметры, …Мониторинг температуры
Views: 1442 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …ch-4050 – дифференциальный терморегулятор
Views: 2036 ch-4050 – это не новая модель, это расширенная версия универсального терморегулятора ch-4000. Различия коснулись в появлении новой функции дифференциального регулирования. Это вид регулирования по разности температур измеренного двумя …Toyota Auto Fader – Модуль включения усилителя
Views: 2057 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …LED модуль P10C4V12
Views: 3282 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …I2C MODULE – PIC18F25K42 Device ID Revision = A001
Views: 1128 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …Защита датчиков температуры DS18B20 от статического электричества
Views: 1943 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …My libraries for Altium Designer
Views: 4198 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/ My libraries for Altium designer (Updated V – 29/05/2022) (c) 2021 …Audio-bluetooth modules F-6188 (BK8000L)
Views: 2387Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …