Oprava RTC

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
mad32
Příspěvky: 1
Registrován: 07 dub 2010, 00:00

Oprava RTC

#1 Příspěvek od mad32 »

Zdravím, může mi někdo pomoci se znovunastavením RTC DS 1302S.
Uživatelský avatar
Atlan
Příspěvky: 4514
Registrován: 10 kvě 2004, 00:00
Bydliště: Košice

#2 Příspěvek od Atlan »

co tam chces znovu nastavovat som troska nepochopil.....
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#3 Příspěvek od Bernard »

Před léty jsem to dělal nějak takto:

Kód: Vybrat vše

void
reset_clk (void) {
  RTC_CLOCK = 0; 
  RTC_SEL = 0;
  RTC_SEL = 1;
}

void
reset_rtc (void) {
  unsigned char jj;
;
  RTC_SEL = 0;
  RTC_CLOCK = 0;
  RTC_DATA = 1;
  delay(100);
  zapis_rtc(CTRL_WR,RTC_UNLOCK);
  jj = citaj_rtc(SEK_RD);
  if ((jj & 0x80)!=0)
    zapis_rtc(SEK_WR, 0);
}

void
zapis_rtc (unsigned char POVEL_WR, unsigned char HODNOTA) {
  reset_clk();
  zapis_bajt(POVEL_WR);
  zapis_bajt(HODNOTA);
  reset_clk();
}

void
zapis_bajt (unsigned char HODNOTA) {
  unsigned char jj;

  for (jj=8; jj>0; jj--) {
     RTC_DATA = 0;
     if (HODNOTA & 0x01)
       RTC_DATA = 1;
     RTC_CLOCK = 0;      
     RTC_CLOCK = 1;      // hrana dela zapis
     HODNOTA >>= 1;
  }
}

unsigned char
citaj_bajt (void) {
  unsigned char HODNOTA, POMOC, jj;
;
  HODNOTA = 0x00;
  RTC_DATA = 1;
  for (jj=0; jj<8; jj++) {
    RTC_CLOCK = 1;
      RTC_CLOCK = 0;
      POMOC = 0;
      POMOC |= RTC_DATA;
      POMOC <<= 7;
      HODNOTA >>= 1;
      HODNOTA |= POMOC;
  }
  return HODNOTA;
}

unsigned char
citaj_rtc (unsigned char POVEL_RD) {
  unsigned char POMOC = 0;

  reset_clk();
  zapis_bajt (POVEL_RD);
  POMOC = citaj_bajt();
  reset_clk();
  return POMOC;
}

void
set_clock (void) {
;
  reset_rtc ();
  zapis_rtc(SEK_WR,0x80);
  zapis_rtc(MIN_WR,DATUM_CAS [1]);
  zapis_rtc(HOD_WR,DATUM_CAS [2]);
  zapis_rtc(DEN_WR,DATUM_CAS [3]);
  zapis_rtc(MES_WR,DATUM_CAS [4]);
  zapis_rtc(DOW_WR,DATUM_CAS [5]);
  zapis_rtc(ROK_WR,DATUM_CAS [6]);
  zapis_rtc(SEK_WR,DATUM_CAS [0]);
}


Jestli ti to pomůže netuším. :wink:
Odpovědět

Zpět na „Poradna“