DS 1302 geri kalıyor neden acaba!

Başlatan lakot, 27 Aralık 2007, 18:33:45

lakot

bu aşağıda verilen kodlar bu forumda bulunan klasik PBP ds1302 kullanma komutları fakat bu komutlar geri kalıyor...neden olabilir acaba! ds1302 okuyor gidip yazıyor arada hiç bir işlem yapmıyor.proteus devre şemasında pic in iç frekansı ve ds1302 frekansından kaynaklanabilirmi? bu komutlarda gecikme yapması için bir sebep bulamadım...yardımcı olabilecek olan bi bakıversin ikidakikaya :) kısacası ben bu komutlara hiç ellemedim aynen hexe çevirdim ve donanımını proteusda kurdum.pc saati ile karşılaştırıyorum fakat bir dakika yaklaşık 10 saniye geri kalıyor?


' LCD clock program using Dallas1202/1302 RTC

       Include "MODEDEFS.BAS"  ' Include Shiftin/out modes

Define  LCD_DREG        PORTD   ' Define LCD connections
Define  LCD_DBIT        4
Define  LCD_RSREG       PORTE
Define  LCD_RSBIT       0
Define  LCD_EREG        PORTE
Define  LCD_EBIT        1

' Alias pins
RST     var     PORTA.2
IO      var     PORTC.1
SCLK    var     PORTC.3

' Allocate variables
rtcyear var     byte
rtcday  var     byte
rtcmonth var    byte
rtcdate var     byte
rtchr   var     byte
rtcmin  var     byte
rtcsec  var     byte
rtccontrol var  byte


       Low RST         ' Reset RTC
       Low SCLK

       ADCON1 = 7      ' PORTA and E digital
       Low PORTE.2     ' LCD R/W low = write
       Pause 100       ' Wait for LCD to startup

       ' Set initial time to 8:00:00AM 07/16/99
       rtcyear = $99
       rtcday = $06
       rtcmonth = $07
       rtcdate = $16
       rtchr = $08
       rtcmin = 0
       rtcsec = 0
       Gosub settime   ' Set the time

       Goto mainloop   ' Skip subroutines


' Subroutine to write time to RTC
settime:
       RST = 1         ' Ready for transfer

       ' Enable write
       Shiftout IO, SCLK, LSBFIRST, [$8e, 0]

       RST = 0         ' Reset RTC

       RST = 1         ' Ready for transfer

       ' Write all 8 RTC registers in burst mode
       Shiftout IO, SCLK, LSBFIRST, [$be, rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear, 0]

       RST = 0         ' Reset RTC
       Return

' Subroutine to read time from RTC
gettime:
       RST = 1         ' Ready for transfer

       Shiftout IO, SCLK, LSBFIRST, [$bf]      ' Read all 8 RTC registers in burst mode
       Shiftin IO, SCLK, LSBPRE, [rtcsec, rtcmin, rtchr, rtcdate, rtcmonth, rtcday, rtcyear, rtccontrol]

       RST = 0         ' Reset RTC
       Return

' Main program loop - in this case, it only updates the LCD with the time
mainloop:
       Gosub gettime   ' Read the time from the RTC

       ' Display time on LCD
       Lcdout $fe, 1, hex2 rtcmonth, "/", hex2 rtcdate, "/" , hex2 rtcyear,_
       "  ", hex2 rtchr, ":", hex2 rtcmin, ":", hex2 rtcsec

       Pause 300       ' Do it about 3 times a second

       Goto mainloop   ' Do it forever

       End

tyildizak

1.İsis simulasyonundan %100 doğru sonuçlar beklemeyin. Komut icra süreleri pc işlemci yüküne doğru orantılı olarak değişkendir.

2.Foruma şöyle bir göz atın, bu şekilde büyük puntoyla mesaj yazılmadığını göreceksiniz. Düşünün bakalım, neden?...

sezgin05

Evet isis simülasyonu gerçeğe yakındır ama gerçekle aynı olması beklenmemelidir.Örneğin aynı kod benim bilgisayarımda 4 sn geri kalıyor. :D

ete

İsis de System menüsüne girip alt tarafta bulunan Set Animation Option seçeneğini seçin ve kerana gelen menüde üstte bulunan;
Frames per Secon  seçeneği karısındaki haneye 10 yazın ve DS1302 li programı çalıştırın bakalım saat nasıl çalışacak?.
Yanınızda mutlaka sesli çalışan bir saat olsunki saniyeleri mukayese edebilesiniz.
Bu değişiklikle saat bayağı hızlı çalışacaktır. Frame ayarını dahada düşürürseniz dahada hızlanabilir.
Dolayısıyla isisde yapılan saat denemelerine çok fazla kulak asmayın.
Gerçek devreye bakın. Gerçekte de günde 1-2 saniye yada daha fazla sapma olabilir. Kristal değerlerinden ve PCB nin yapısından kaynaklanan sorunlardan dolayı bu sapmalar olabiliyor. Kristal bacaklarına atacağınız 5-6 pf lık bir kondansatör gerekli stabilizasyonu yapabiliyor. Bu tedbir de her zaman işe yaramıyor. Yaramadığı durumda bir ayarlı trimmer (yine 5-10 pf) atılırsa daha uygun olabilir. Bir frekansmetreniz var ise osilatör bacağındaki frekansı ölçün derim. Tam tamına 32768 yakalarsanız saat doğru gidecek demektir.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

lakot

Alıntı yapılan: "tyildizak"1.İsis simulasyonundan %100 doğru sonuçlar beklemeyin. Komut icra süreleri pc işlemci yüküne doğru orantılı olarak değişkendir.

2.Foruma şöyle bir göz atın, bu şekilde büyük puntoyla mesaj yazılmadığını göreceksiniz. Düşünün bakalım, neden?...


büyük yazı için herkesten özür dilerim yazdıklarımın kodlardan ayrı olsun die böyle yazdım...saygısızlık olarak algılandıysa affola...ilgilenen arkadaşlara çok teşekkür ederim!