DS1307 a vubec

Mikro mikro.shw
Středa Březen 17 12:05:21 CET 2004


----- Original Message -----
From: "Jakub Ladman" <ladmanj@volny.cz>
To: "Multiple recipients of list" <hw-news@list.gin.cz>
Sent: Sunday, February 11, 2001 3:18 PM
Subject: DS1307 a vubec


> Chci se zeptat, jestli nekdo z Vas delal z RTC obvodem Dallas DS1307.
> Pripade ze ano, aby se vyjadril k nasledujicimu.
>
> Program pisu v C51. Komunikace po i2c je odladena, s jinymi obvody funguje
> skvele. Pri komunikaci s DS postupuji takto.
>
> Pisu a ctu po jednotlivych bytech, je to pro me vyhodnejsi, nez si data
> seskupovat v bufferu a pak zapsat jako blok a jako blok do bufferu
nacitat.
>
> Zapis probiha v jednom bloku - zacatek komunikace, pisu adresu vnitrniho
> registru, pisu 1 byte dat, konec komunikace.
> Cteni ve dvou blocich - zacatek komunikace, pisu adresu vnitrniho
registru,
> konec komunikace, zacatek komunikace cteni 1 byte dat, konec komunikace.

 VYNECHAT KONEC KOMUNIKACE - spravne je: START, ZAPIS ADRESY, START, CTENI
REGISTRU, STOP


> Vidite nekdo na tomto postupu nejakou ocividnou chybu?
>
> Nevite nekdo k cemu slouzi bit CH v regitstru 00H ? Je to ten co v nem
jsou
> sekundy, nikde v datasheetu jsem o tom nenasel ani zminku.
> Diky za pomoc
> Jakub Ladman
>

CN = 0 -> povoleni behu oscilatoru



maly priklad

// Otestuje funkcnost RTC a RAM, nacte (pripadne nastavi default) parametry
bit ReadParamRTC (void) {
  byte Cnt = 10;
  byte Tmp;

  do{
    PutReg (RtcPort, 0, 0);     // otestuje zapis do RTC
    Tmp = GetReg(RtcPort,0);
    if(Tmp==0) break;      // OK
  }while (--Cnt!=0);

  if(!TestReg(RtcPort,0x08,0xA5)) Tmp++;
  if(!TestReg(RtcPort,0x09,0x5A)) Tmp++;

  if (Tmp!=0){        // RTC je nefunkcni, nebo nejsou platne parametry
    PutReg(RtcPort, 0x07, 0x10);   //
    PutReg(RtcPort, 0x08, 0xA5);   //|
    PutReg(RtcPort, 0x09, 0x5A);   //| pocatecni inicializace
    PutReg(RtcPort, 0x0A, 0x00);   //| promennych v RTC
    PutReg(RtcPort, 0x0C, 0x00);   //|
    CallEx = 0x00;                          // default restrikce pristupu na
ex.linku
    FlgSys = 0x00;                          // default flagy systemu
    return 0;         // oznamime ERROR
  }
  else{          // RTC a parametry jsou OK
    CallEx = GetReg(RtcPort,0x0A);          // restrikce pristupu na
ex.linku
    FlgSys = GetReg(RtcPort,0x0C) & 0x0C;   // flagy systemu
    return 1;        // oznamime OK
  }
}

//  FILE        : i2c.h
//  DATE        : 25.12.2000
//  DESCRIPTION :
//  CPU TYPE    : 89C52

#ifndef INCLUDE_I2C_H
#define INCLUDE_I2C_H

  extern bit  PutByte (char Addr, char Data);
  extern char GetByte (char Addr);
  extern bit  PutReg  (char Addr, char Reg, char Data);
  extern char GetReg  (char Addr, char Reg);
  extern bit  TestReg (char Addr, char Reg, char Data);

#endif

;=======================
===========================================================================
rd_fault:       setb    c               ;set error code
                ret                     ;
_GetReg:        jnb     SCL,rd_fault    ;
                jnb     SDA,rd_fault    ;jump if bus fault
                Start                   ;set start condition
                mov     a,r7            ;setup slave address
                lcall   Xmit_Byte       ;send slave address
                jc      rd3             ;jump on error
                mov     a,r5            ;setup register address
                lcall   Xmit_Byte       ;send register address
                jc      rd3             ;jump on error
                Start                   ;set repeated start
                mov     a,r7            ;setup slave address
                setb    acc.0           ;indicate read operation
                lcall   Xmit_Byte       ;send slave address again
                jc      rd3             ;jump on error
rd1:            lcall   Rec_Byte        ;go receive
                mov     r7,a            ;store data byte
rd2:            setb    SDA             ;set SDA idle
                Emit_Clock              ;emit clock pulse
rd3:            Stop                    ;set stop condition
                ret                     ;
;=======================
===========================================================================






Další informace o konferenci Hw-list