zdravim, mohl by mi nekdo prosim poradit s timto problemem?
obvod DS1302 mam pripojene na ATmeg8, hodiny funguji, ale sekundy a minuty bezi normalne do 9, pak skoci 16 a tak dal. A bezi to az do 89, pak zase 0. Cas od jedne do nuly odpovida minute, takze predpokladam, ze mam chybu nekde ve cteni. Zde prikladam kod na cteni bytu.
Diky moc za odpovedi
void init_DS1302(void) // inicializace DS1302
{
SCLK_M; // nastavit pin hodin SCLK
RESET_M; // nastavi resetovaci pin
SDA_M1; // nastavi I/O pin jako vystup
SCLK0; // log. 0 na SCLK
RESET0; // log. 0 na reset
SDO0; // log. 0 na I/O
}
void sync_DS1302 ( void ) // synchronizace hodin
{
_delay_us(5); // ceka 5 us
SCLK1; // log.1 na SCLK
_delay_us(5); // ceka 5 us
SCLK0; // log.0 na SCLK
_delay_us(5); // ceka 5 us
}
unsigned char read_DS1302(unsigned char adresa) // cteni dat z DS1302
{
unsigned char cc1, data;
init_DS1302(); // inicializace DS1302
data=0;
RESET1; // aktivuje linku a zahaji prenos
for (cc1=0; cc1<8; cc1++) // prenos command BYTE
{
if ((adresa&0x01) == 1) {SDO1;} // log. 1 na I/O
else SDO0; // log. 0 na I/O
adresa = adresa >> 1; // posun o jeden bit vpravo
sync_DS1302(); // synchronizace hodin
}
SDA_M0; // nastavi I/O pin jako vstup
data = 0;
for (cc1=0; cc1<8;cc1++) // prenos dat
{
SCLK0; // log.0 na SCLK
_delay_us(2); // ceka 2us
data = data >>1; // posun o jeden bit vpravo
if (PIND&PDx1) data=data|0x80;
sync_DS1302(); // synchronizace hodin
}
SDO0; // ukonceni komunikace
SCLK0; // log.0 na SCLK
RESET0; // log. 0 na reset
return data;
}
:arrow: administrator: přejmenováno z "Chyba hodin RTC DS1302"