Часы реального времени DS1340

Views: 446


ds1340_Catcatcat_02

DS1340 часы реального времени от  ОПИСАНИЕ. Особенностью этой микросхемы является наличие схемы управления питанием резервного источника питания. Для резервирования питания можно использовать как обычную литиевую батарейку, так и обычный конденсатор или ионистор.

ds1340_Catcatcat_03

Особенности управления.

В 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-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    Views: 2435 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Views: 1472 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Views: 2184 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • JDY-62A Audio bluetooth moduleJDY-62A Audio bluetooth module
    Views: 1693 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    Views: 1045 И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ
    Views: 1049 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • Простой сенсорный регулятор светаПростой сенсорный регулятор света
    Views: 2319 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …
  • Индикатор температурыИндикатор температуры
    Views: 2672 Проект для начинающих, на демо плате BB-2T3D-01. Простой индикатор температуры. Проект никак не задумывался, просто на витрину магазин Ворон нужна была демонстрационная модель на макетной плате, чего нибудь работающего. Остановились на индикаторе …
  • WiFi ESP8266 – AT команды связанные с функцией Wi-FiWiFi ESP8266 – AT команды связанные с функцией Wi-Fi
    Views: 5303 AT команды связанные с функцией Wi-Fi Функции Wi-Fi подключения, запускаться из командной строки Команда Описание  1 AT+CWMODE Проверка, настройка режима работы Wi-Fi (sta/AP/sta+AP), (не рекомендуется для новых проектов). 2 …
  • LM317 и светодиодыLM317 и светодиоды
    Views: 7856 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …


Поделись этим!