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

Views: 458


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

 


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


  • Development of temperature control and management systemsDevelopment of temperature control and management systems
    Views: 148 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Views: 4011 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
  • Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROAltium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PRO
    Views: 290 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
  • NS108-5050-16bit от NewstarNS108-5050-16bit от Newstar
    Views: 590 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Views: 9635 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Views: 1764 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • Счетчики посетителейСчетчики посетителей
    Views: 1266 Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
  • PIC18F25K42 – v. A001 – выявленные баги.PIC18F25K42 – v. A001 – выявленные баги.
    Views: 616 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …
  • Интерактивные LedИнтерактивные Led
    Views: 473 Тема проекта   продолжение следует…. Это может быть интересно
  • The art of DJThe art of DJ
    Views: 143 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …


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