Čítačem jsem měřil frekvenci krystalu a je opravdu přesně 32768Hz. Kdybych měl nějakou chybu v programu(při čtení hodin něchtěně zastavoval čítání), tak by se podle mě hodiny jen zpožďovaly. Ale hodiny se předbíhají u vypnutého zařízení (RTC napájeno jen z lithiové baterky). Po zapnutí přístroje se jen přečtou hodiny (viz kód) a dále se data nepřepisují.
Nestekal jste se s tímto někdy? Případně nemáte někdo rutiny v C pro komunikaci s tímto RTC?
Děkuji za případnou pomoc.
Kód: Vybrat vše
unsigned char rtc_read_time() //naplni registry hour,minute,day,month a year aktualnimy daty
{
unsigned char rtc[17];
unsigned char tmp;
unsigned char vychozi_rok;
if (i2c_start(DevPCF8583+I2C_WRITE)) return 1; //if RTC not accesible return 1
i2c_write(0); //control/status register
i2c_write(0b01000000); //uloz data v RTC do LATCH registru pro cteni
i2c_stop();
i2c_start_wait(DevPCF8583+I2C_WRITE); // set device address and write mode
i2c_write(0); //nastav registr na adresu 0
i2c_start_wait(DevPCF8583+I2C_READ); // set device address and read mode
for (unsigned char i=0;i<17;i++)
{
if (i<16) rtc[i] = i2c_readAck(); // read byte from EEPROM
else rtc[i] = i2c_readNak(); // read last byte from EEPROM
}
i2c_stop();
i2c_start_wait(DevPCF8583+I2C_WRITE); // set device address and write mode
i2c_write(0); //control/status register
i2c_write(0b00000000); //count
i2c_stop();
...
...
return 0;
}