Перейти к содержанию
    

Требуется серъезная помощь бригады телепатов с RTC(+)

Периодически, пока не выяснено в какой момент, в устройстве (tiny2313от внутреннего RC+m41t56- почти аналог ds1307) останавливается RTC. Разводка соответсвует рекомендуемой.BOD включен. Питание от 220 через гасящий конденсатор -> стабилитрон на 13 вольт+220мкф для питания 12-вольтового реле, которое пока отключено -> 470 Ом +стабилитрон на 5,1+0.1мкф. К RTC подпаяна литиевая батарейка и 0,1 мкф параллельно.Подтяжки 4,7кОм. Все отмыто ацетоном и бензином Калоша. Кварц уже менял на другой тип.

Компилятор CodeVisionAVR 1.25.9

Код сгенерированный визардом для DS1307 и слегка изменен. Используется программный I2C. Код, модифицирующий время-дату, вызывается по командам USART.

Отлаживал также драконом- в программе просто замораживаются переменные, прочитанные rtc_get_time();

// I2C Bus initialization

i2c_init();

 

// Real Time Clock initialization

// Square wave output on pin SQW/OUT: On

// Square wave frequency: 512Hz

//if(rtc_read(0)&0x7F)rtc_write(0,0);

rtc_write(0x07,0xC0);

 

unsigned char rtc_read(unsigned char address)

{

unsigned char data;

i2c_start();

i2c_write(0xd0);

i2c_write(address);

i2c_start();

i2c_write(0xd1);

data=i2c_read(0);

i2c_stop();

return data;

}

 

void rtc_write(unsigned char address,unsigned char data)

{

i2c_start();

i2c_write(0xd0);

i2c_write(address);

i2c_write(data);

i2c_stop();

}

 

 

void rtc_get_time(void)

{

i2c_start();

i2c_write(0xd0);

i2c_write(0);

i2c_start();

i2c_write(0xd1);

sec=bcd2bin(i2c_read(1)&0x7F);

min=bcd2bin(i2c_read(1)&0x7F);

hour=bcd2bin(i2c_read(0)&0x3F);

i2c_stop();

}

 

void rtc_set_time(void)

{

i2c_start();

i2c_write(0xd0);

i2c_write(0);

i2c_write(bin2bcd(sec));

i2c_write(bin2bcd(min));

i2c_write(bin2bcd(hour));

i2c_stop();

}

void rtc_get_date(void)

{

i2c_start();

i2c_write(0xd0);

i2c_write(4);

i2c_start();

i2c_write(0xd1);

date=bcd2bin(i2c_read(1)&0x3F);

month=bcd2bin(i2c_read(1)&0x1F);

year=bcd2bin(i2c_read(0));

i2c_stop();

}

 

void rtc_set_date(void)

{

i2c_start();

i2c_write(0xd0);

i2c_write(4);

i2c_write(bin2bcd(date));

i2c_write(bin2bcd(month));

i2c_write(bin2bcd(year));

i2c_stop();

}

 

 

http://www.platan.ru/pdf/datasheets/stm/m41t56.pdf

m41t56.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Flasher

"Группа: Свои", имеете 340 постов, а код в посте так и не научились оформлять

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...