
Views: 482
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
Это может быть интересно
AD9833 – Programmable Waveform Generator – part two
Views: 1793 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …Проект с использованием MCC часть 16
Views: 1143 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …УКВ – радиоприем, часть 2
Views: 6287 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …Модуль CAN в микроконтроллерах PIC18
Views: 5798 Введение CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …Бегущие огни (ch-bo-36)
Views: 2488 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …Простой цифровой милливольтметр постоянного тока
Views: 4136 Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля …Проект с использованием MCC часть 08
Views: 1101 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …LATINO – открытый проект ch-светомузыки
Views: 1682 Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была …Сенсорный выключатель света
Views: 13651 Хотя в настоящий момент актуальны системы управления освещением с передачей данных по электросети, но я думаю, что проекты такого рода тоже имеют право на жизнь. Анонс Три вида …Дифференциальный терморегулятор
Views: 4035 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …