Chyba hodin RTC DS1302 - sekundy a minuty běží do 9, pak 16

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"

Citace z datasheetu:

Musíš udělat převod…

Diky :slight_smile: ja vedel ze nebude marny jsem napsat :wink: