Flasher 0 1 марта, 2009 Опубликовано 1 марта, 2009 · Жалоба Периодически, пока не выяснено в какой момент, в устройстве (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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 2 марта, 2009 Опубликовано 2 марта, 2009 · Жалоба Flasher "Группа: Свои", имеете 340 постов, а код в посте так и не научились оформлять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться