Stránka 1 z 1

RTC - předbíhající se čas

Napsal: 04 čer 2011, 09:53
od GeorgeB
V jednom přístroji jsem použil RTC obvod PCF8583 s vnějším krystalem 32,768kHz. Bohužel se mi hodiny předbíhají. Dokonce o více než hodinu za měsíc.
Čí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;
}

Napsal: 04 čer 2011, 09:58
od Andrea
Tak k tomu krystalu zkus připojit kapacitu ekvivalentní kapacitě vstupu čítače. :)

Napsal: 04 čer 2011, 11:17
od Atlan
Ja používam na doladenie kacitný trimer.... i ked neviem či ti pomože ked to ide rychlejšie pripadne zmena krištalu.

2,5p-27p na regulaciu oscilatora

Napsal: 04 čer 2011, 11:42
od GeorgeB
Andrea píše:Tak k tomu krystalu zkus připojit kapacitu ekvivalentní kapacitě vstupu čítače. :)

Měřil jsem to osciloskopickou sondou 1:10.
Takže jsem zkusil připojit trimr 10pF a uvidím.
Děkuji za radu.

Napsal: 04 čer 2011, 14:37
od Atlan
zapojil si to medzi OSCI a VDD. Zaujimave ze PCF8563 to ma zapojene medzi OSCI a GND...hm

Napsal: 04 čer 2011, 19:55
od GeorgeB
Atlan píše:zapojil si to medzi OSCI a VDD. Zaujimave ze PCF8563 to ma zapojene medzi OSCI a GND...hm

Nejdřív jsem to dle manuálu http://www.nxp.com/documents/user_manual/UM10301.pdf zapojil proti GND a jemné doladění bylo moc citlivé. Teď jsem to přepájel mezi OSCI a VDD a zdá se,že čas běží jak má. Nastavení není tak citlivý.

Re: RTC - předbíhající se čas

Napsal: 05 čer 2011, 12:25
od kyori
GeorgeB píše:V jednom přístroji jsem použil RTC obvod PCF8583 s vnějším krystalem 32,768kHz. Bohužel se mi hodiny předbíhají. Dokonce o více než hodinu za měsíc.


Člověče, to máš ještě lepší hodinky než bývaly sovětské Pobědy. A to byly nějaký hodinky! Pobědy byly nejrychlejší hodinky na světě. :D