Код: Выделить всё
char cnt[30];При установке:
Код: Выделить всё
rtc_set_time (bin2bcd(19),bin2bcd(45),bin2bcd(0));
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11));А минут через 10 - 11 становится 06.04.11 и дальше всё идет нормально
Код: Выделить всё
char cnt[30];Код: Выделить всё
rtc_set_time (bin2bcd(19),bin2bcd(45),bin2bcd(0));
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11));Код: Выделить всё
rtc_init (0,0,0);
//делай
DS1307_on ();
//делай
rtc_set_time (bin2bcd(19),bin2bcd(0),bin2bcd(0));
//делай
rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11));
//делай !!!! ОБЯЗАТЕЛЬНО
rtc_get_date(&day,&month,&year); //считать дату
Код: Выделить всё
if (count_RTC > 1000) { // чтобы не опрашивать DS1307 слишком часто
count_RTC = 0;
rtc_get_time(&hour,&min,&sec); //считать время
sec = bcd2bin(sec);
min = bcd2bin(min);
hour = bcd2bin(hour);
bgcolor = 0x95BF; // дата/время
sprintf(cnt,"%02u:%02u:%02u",hour,min,sec);
put_string(106, 1, cnt, 0x001F, 1);
if (min == 0) {
rtc_get_date(&day,&month,&year); //считать дату
//DayOfWeek = bcd2bin(rtc_read(0x03)); // чтение дня недели
day = bcd2bin(day);
month = bcd2bin(month);
year = bcd2bin(year);
bgcolor = 0x95BF; // дата/время
sprintf(cnt,"%02u.%02u.%02u",day,month,year);
put_string(0, 120, cnt, 0x001F, 1);
}
}
Соответственно, непонятно из каких соображений выбирался клокSCL Clock Frequency fSCL 100 kHz max
также видна из кода - дата обновляется каждый час (if(min==0)...), соответственно эта проверка и наступает примерно через 10-15мин - смотря какими минутами инициализируете.А минут через 10 - 11 становится 06.04.11
Ставил задержки по 100 мс. То же самое. Частота у меня 100 кГц. Просто переключаю на 400 кГц на время чтения из 24LC256. Иначе очень медленнно выводится картинка. Потом обратно на 100 кГцGoodefine писал(а):...Код: Выделить всё
rtc_init (0,0,0); //делай DS1307_on (); //делай rtc_set_time (bin2bcd(19),bin2bcd(0),bin2bcd(0)); //делай rtc_set_date (bin2bcd(6),bin2bcd(4),bin2bcd(11)); //делай !!!! ОБЯЗАТЕЛЬНО rtc_get_date(&day,&month,&year); //считать дату
А, вообще, установка времени включением в определенный момент, немного по китайски. По хорошему - часы надо прошивать два раза - первый раз чтоб время поставить, второй раз уже прошивкой в которой отключена установка времени - чтоб часы не сбивать, когда электричество кончится... Но добавить возможность установки с пульта еще есть, хоть и непросто при нынешней организации программы..
ЗЫ. Похоже, cnt[16] хватит за глаза...
Код: Выделить всё
void Draw_Bg_from_Eeprom(void) {
WRCMD(0xEF90);
WRCMD(0x0504); // ориентация
WRCMD(0x0800); // координата X1
WRCMD(0x0983); // координата X2 (83 в hex равно 131 в dec)
WRCMD(0x0A00); // координата Y1
WRCMD(0x0BAF); // координата Y2 (AF в hex равно 175 в dec)
TWBR=0x0C; // 400 kHz i2c
....
// читаем и выводим на экран
....
TWBR=0x48; // 100 kHz i2c
}
Я сам это понял вчера. Не стал писать на форумдата обновляется каждый час (if(min==0)...),
Везде? Тогда еще нужно поставить задержку перед rts_init, поскольку часы вы все равно дергали 400 кГц, х/з как они могут реагировать, а кнопки ресет там нету... Можно попробовать не вычитывать еепромку. Или меньше 100 кГц сделать. Мне кажется дело в таймингах - в модели все корректно прописывается..Ставил задержки по 100 мс
Код: Выделить всё
delay_ms(250);
rtc_init (0,0,0);
delay_ms(250);
DS1307_on ();
delay_ms(250);
rtc_set_time (bin2bcd(20),bin2bcd(26),bin2bcd(0));
delay_ms(250);
rtc_set_date (bin2bcd(7),bin2bcd(4),bin2bcd(11));
delay_ms(250);
rtc_get_date(&day,&month,&year); //считать дату
А что, при прочих равных, при переключении глюки сохраняются?mr_smit писал(а):В общем оставил частоту TWI неизменной - 100 кГц....
а если считать секундные импульсы от DS1307? или на таймере - принипиально?mr_smit писал(а):Ну во-первых это не простой диммер.
...
3. Подключены часы DS1307
...
2 таймера нормально работают, но вот отмерить время (10-15 сек) не могу (3-им таймером)
Т.е. достаточно задержек? А неведомый глюк - может быть это как раз и дерганье часов также, при работе с еепром-кой..mr_smit писал(а): Похоже при наличии задержек при инициализации, изменение скорости TWI никак не сказывается на DS1307. А 02 вместо минут - это опять какой то неведомый глюк. Бог с ним, надоело уже.