Cteni RTC od Ramtronu

RV vicek.radek@cpost.cz
Pondělí Listopad 20 11:40:51 CET 2006


Pavel_t napsal(a):
 > Je to uz > 2 roky co jsem to psal a ted uz to jen kopiruji. Navic ten
> packal se mi nechce lustit ;) Ale pokud porovnam svuj zdrojak s Vasim 
> tak ja vzdy kdyz zapisu WR nebo RD flag ukoncim zapis I2C Stop a pak 
> zacinam cteni I2C Startem, odeslanim adresy a pak samotnym ctenim. Toto 
> je pro pamet (16bit adresa) zobrazeno na Figure 15 v katalogovem liste. 
> A plati to pro I2C komunikaci vseobecne. Mam dojem, ze toto Vas program 
> nedodrzuje.
> 
> Dalsi moznosti chyb, ktere ale u Vas nepredpokladam jsou:
> 
> Pamet a RTC maji odlisnou I2C adresu.
> Pamet se adresuje 16bitove a RTC pouze 8bitove.
> 
> Pavel
> 

Dekuji za odpoved, zkusil jsem to jeste cele prepsat tak ze kazde
vycteni zacinam poslanim adresy a pak prijmu dat (predtim jsem to cetl
sekvencne proto jsem nepouzival I2C Stop). Presto mi to nechodi.
Me prijde ten DS k tomu RTCku dost strohej a myslim ze jsou tam nejasna
mista nebo alespon dosti sporna. Treba to ze je treba adresovat RTC jen
8 bitama z toho primo nikde nevyplyva. Nebo to kdy mam vratit ten bit R
zpatky na nulu pisou jen ze se to ma udelat, ale jestli to muzu udelat
hned nebo az potom co to prectu?


Zkusim ten zdrojak popsat v poznamkach abyste to nemusel lustit:

const
     adr_exp_wr=	%01000000; //adresa expanderu pro zapis
     adr_rtc_rd=	%11010001; //adresa RTC pro cteni
     adr_rtc_wr=	%11010000; //adresa RTC pro zapis
     adr_mem_rd=	%10100001; //adresa pameti pro cteni
     adr_mem_wr=	%10100000; //adresa pameti pro zapis
     adr_rtc_tmk_on=	%00000001; //reg.Flag - povoleni prepisu z jadra
     adr_rtc_tmk_off=	%00000000; //reg.Flag - ukonceni prepisu z jadra

Procedure RTC;
begin
  //zapisu do Flag registru 1 aby se mi prepsalo RTC do registru
  I2C_Start;                    // Issue I2C start signal
  I2C_Wr(adr_rtc_wr);           // poslu adresu zarizeni pro zapis
  I2C_Wr(0);                    // poslu adresu registru Flag
  I2C_Wr(adr_rtc_tmk_on);       // poslu data do Flag - R=1
  I2C_Stop;                     // Issue I2C stop signal

  //nactu postupne vsech 25 registru z Companion
  for k:=0 to 24 do	
  begin
    I2C_Start;                  // Issue I2C start signal
    I2C_Wr(adr_rtc_wr);         // poslu adresu zarizeni pro zapis
    I2C_Wr(k);                  // poslu adresu vycitaneho registru
    I2C_Repeated_Start;         // zopakuji Start sekvenci
    I2C_Wr(adr_rtc_rd);         // poslu adresu zarizeni pro cteni
    a_rtc[k]:= I2C_Rd(0);       // prectu registr bez ACK
    I2C_Stop;                   // Issue I2C stop signal
  end;

  //zapisu do Flag registru 0 - vratim to zpet
  I2C_Start;                    // Issue I2C start signal
  I2C_Wr(adr_rtc_wr);           // poslu adresu zarizeni pro zapis
  I2C_Wr(0);                    // poslu adresu registru Flag
  I2C_Wr(adr_rtc_tmk_off);      // poslu data do Flag - R=0
  I2C_Stop;                     // Issue I2C stop signal

end;

-- 
RadekCX - http://www.cncnet.info




Další informace o konferenci Hw-list