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

Visits: 433


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

 


Это может быть интересно


  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
    Visits: 1398 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …
  • ESP8266  процедура получение данных даты и времени от серверов точного времени.ESP8266 процедура получение данных даты и времени от серверов точного времени.
    Visits: 5792 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени,  если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
  • ESP32-первое знакомствоESP32-первое знакомство
    Visits: 6332 Музыкальная тема к статье, слушаем: Настало время познакомиться c ESP32 и для меня, для этого я приобрел в ГАММЕ отладочную плату с модулем ESP-WROOM-32 (ESP32-DevKitC). Первая задача, как …
  • Real-time music visualization technologyReal-time music visualization technology
    Visits: 91 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
  • CLUBBEST – reasoning on the visualization of music.CLUBBEST – reasoning on the visualization of music.
    Visits: 101 ВІД ЗАХОДУ ДО СВІТАНКУ АБО ПОБАЧИТИ МУЗИКУ.     Час доби, коли почуття людини загострюються, – це час від заходу до світанку. В цей час людина відкрита для …
  • Регулятор влажности ch-3800Регулятор влажности ch-3800
    Visits: 1400   И еще один проект на плате ch-c3xxx –  универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …
  • MPLAB X IDE – управление проектамиMPLAB X IDE – управление проектами
    Visits: 907 Среда  MPLAB X IDE позволяет оперативно работать с несколькими проектами, например, если у вас в работе несколько проектов: Для того чтобы переключиться достаточно выбрать другой проект: Для выбора …
  • Altium Designer first projectAltium Designer first project
    Visits: 229 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Visits: 817 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Гаджеты для домашней автоматики – Датчик приближенияГаджеты для домашней автоматики – Датчик приближения
    Visits: 1939 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …