avatar_ete

RTC (Real Time Clock) Yani Gerçek Zaman Saati Kullanımı

Başlatan ete, 01 Mayıs 2012, 10:35:23

kurusaray

Arkadaşlar Ds1307 entegresi ile bir saat uygulaması yapıyorum. Fakat bir sorun var.

CCs C ile yazıyorum önce ekranda doğru değer gözüküyor 1sn az. sonra 25:85:07 değeri gözüküyor. Birer saniye

aralıklarla sürekli bir doğru değerler bir 25:85:07 değerleri gözüküyor sebep ne olabilir acaba.

BİDİL

Arkadaşlar merhaba;

DS1307 kullanıyorum ancak bugüne kadar 24 saat modunda kullandım bunu 12 saat moduna göre kullanmak için değişikliği ilgili satırda= SAAT=((HOUR>>4) & $03)*10+(HOUR & $0F) 'mı yapmam gerekli tam olarak anlayamadım. $03 değerinin karşılığı yanlış çevirmediysem %0011 0000 oluyor. 7.ve 8.bitleri=1 yani $0A yapınca 12 saat modunamı geçiyor?
   
     ZAMANOKU:
        I2CRead SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR]                  
        sn =((SECOND>>4) & $0F)*10+(SECOND & $0F)
        IF SN=ESKISN THEN RETURN
        dak=((MINUTE>>4) & $0F)*10+(MINUTE & $0F)
        SAAT=((HOUR>>4) & $03)*10+(HOUR & $0F) 
        HAFGUN=((WEEK>>4) & $03)*10+(WEEK & $0F) 
        AYGUN=((DAY>>4) & $03)*10+(DAY & $0F)
        AY= ((MONTH>>4) & $01)*10+(MONTH & $0F)
        YIL= ((YEAR>>4) & $0F)*10+(YEAR & $0F)          
        ESKISN=sn
        ;IF SAAT>12 THEN
        ;SAAT=SAAT-12
        ;ENDIF
        ;IF SAAT=00 THEN
        ;SAAT=12
        ;ENDIF
RETURN 
                      
ZAMANYAZ: 
        SECOND =(SN DIG 1)<<4+SN DIG 0
        MINUTE=(DAK DIG 1)<<4+DAK DIG 0
        HOUR=(SAAT DIG 1)<<4+SAAT DIG 0
        WEEK=(HAFGUN DIG 1)<<4+HAFGUN DIG 0        
        DAY=(AYGUN DIG 1)<<4+AYgun DIG 0
        MONTH = (AY DIG 1)<<4 + AY DIG 0
        YEAR =(YIL DIG 1)<<4+YIL DIG 0       
        I2CWrite SDA,SCL,$D0,$00,[SECOND,MINUTE,HOUR,WEEK,DAY,MONTH,YEAR,0]
        PAUSE 10
RETURN

ete

Neden böyle şeyleri data sheete bakarak bulmuyorsunuz anlamıyorum.

"Bit 6 of the hours register is defined as the 12- or 24-hour mode select bit. When high, the 12-hour mode is selected."
Data sheet diyorki Saat registerinin 6 cı biti saatin 12 yada 24 saat modu seçme bitidir. Bu bit HIGH ise 12 saat modu seçilmiş olur"

Ete

enginkanat

merhaba,
ds1307 de i2cwrite sda,scl,$d0,$00,[sn,dk,sa,hft,gn,ay,yil,temp]
ile yazıp i2cread ile okuma yapıyorum.
diğer adresleri nasıl kullanacağımı anlayamadım. mesela devreyi ilk çalıştırdığımda ch bitini nasıl okuyabilirim. bu bit fabrika ayarı 1 olarak geliyor demişsiniz. değeri okuyarak eğer 1 ise saat tarih ayar bölümüne dallandırmak istiyorum adresi nasıl okuyup yazacağımı anlamadım.
birde 1 hz sinyal çıkışı alarak rb0 kesmesi ile saat bilgisini okumak istiyorum bu adresi nasıl programlayabilirim? yada devreye koyacağım bir button ile 12/24 ayarlarını değiştirmek istiyorum
       
  if buton1=0 then
                 i2cread sda,scl,$d0, ???????????
                          okunan değer 12 saat tipi ise
                                 i2cwrite sda,scl,$d0,??????????? 24 saat tipi yap

gibi
ben bu adresleri nasıl kullanacağımı anlayamadım

ete

I2CREAD, Sda,Scl,$d0,$00,[sn]
komut satırı ile SN registerini okuyup;
IF SN.7=1 then SAT_AYAR  komut satırı ile 7. biti test edip 1 ise SAAT_AYAR etiketine yollayabilirsin programı.

7 nolu adreste yer alan Control Registeri, kare dalga çıkışını kontrıl etmektedir. Bu registere;
I2CRead Sda, Scl, $d0, $07,[TEMP]  komut satırı ile ulaşıp ardından bir kereliğine;
TEMP=%00010000  şeklinde kare dalga çıkışını aktive edip bunu
I2CWRITE , Sda, Scl, $D0, $07,[TEMP]  şeklinde geri yerine kayıt etmek gerekiyor.

Saat registerinin 6. biti saatin 24 yada 12 saat formatında çalışacağını belirliyor. Bu bit HIGH ise saat 12 saat modunda LOW ise 24 saat modunda çalışır. Bu durmda bir buton ile bunu değiştirmek istersen,
Butona basılınca bu biti Toggle yapmak gerekir. Yani,
IF BUTON=0 THEN   'butona basılmış ise
  I2CREAD , SDA, SCL, $D0, $02,[SAAT]
   TOGGLE SAAT.6
   I2CWRITE ,SDA, SCL,$D0,$02,[SAAT]
ENDIF

Şeklinde okunup değiştirilip geri yerine yazılmalıdır.

Ete

enginkanat


Powered by EzPortal