PIC 16F84A İLE DS1302 SORUNU

Başlatan isikyasar, 07 Aralık 2011, 23:14:15

isikyasar

Device = 16F84a

Dim SN As Byte
Dim DAK As Byte
Dim SAAT As Byte
Dim GUN As Byte
Dim AY As Byte
Dim YIL As Byte
Dim MEM As Byte
Dim SAYI As Byte
Dim DAY As Byte
Dim ONLAR As Byte
Dim BIRLER As Byte

Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTA.1
Declare LCD_RSPin PORTA.0

Symbol RTC_RST = PORTB.0
Symbol RTC_DTA = PORTB.2
Symbol RTC_CLK = PORTB.1
'***********Sensör Tanımlamaları***********
Symbol DQ = PORTA.4
Dim Temp As Word   
Dim CA As Byte     
Dim CPerD As Byte   
Dim ISARET As Byte
Dim OKU As Byte
Symbol AR = "+"
Symbol EK = "-"
Symbol SIF = " "

basla:
   'GoSub SENSOROKU
   GoSub ZAMAN_OKU
       
        Print AT 1,1,"SAAT: ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
        Print AT 2,1,"TRH: ",DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL,"  "
          'Print at 2,1,"ISI   : ",ISARET, Dec (Temp>>1), ".", Dec (Temp.0 * 5),0,"C"
   
     
goto basla

 
ZAMAN_OKU:

         High RTC_RST
         SHOut RTC_DTA, RTC_CLK, 0, [$BF]
         SHIn RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, DAY, YIL, MEM]
         Low RTC_RST
         MEM=SN:GoSub CEVIR:SN=SAYI
         MEM=DAK:GoSub CEVIR:DAK=SAYI
         MEM=SAAT:GoSub CEVIR:SAAT=SAYI
         MEM=GUN:GoSub CEVIR:GUN=SAYI
         MEM=AY:GoSub CEVIR:AY=SAYI
         MEM=YIL:GoSub CEVIR:YIL=SAYI
         MEM=DAY:GoSub CEVIR:DAY=SAYI

         Return

CEVIR:
    ONLAR=MEM & %01110000
    ONLAR=ONLAR>>4
    BIRLER=MEM & %00001111
    SAYI=ONLAR*10+BIRLER
Return

SENSOROKU:

OWrite DQ, 1, [$CC, $44]   
Repeat
DelayMS 5     
ORead DQ, 4, [CA]     
Until CA <> 0   
OWrite DQ, 1, [$CC, $BE] 
ORead DQ, 2,[Temp.LowByte,Temp.HighByte, CA, CA, CA, CA, CA, CPerD]
If Temp=0 Then ISARET = SIF
If Temp>0 Then ISARET = AR
If Temp>500 Then
Temp=65536-Temp
ISARET = EK
EndIf

return



BORD ÜZERİNE KURDUM. ÇALIŞMIYOR. DS 1302 Yİ SÖKTÜĞÜMDE BİLE EKRANDA RAKAMLAR HALA DURUYOR. 
SAAT  00:00:00
TRH   00/00/2000
EKRANDA BU ŞEKİLDE DURUYOR.

NASIL ÇALIŞTIRABİLİRİM.

ete

BASLA satırından evvel aşağıdaki komut satırını ilave ediver;

High RTC_RST
         SHOut RTC_DTA, RTC_CLK, 0, [$8E,0]
         Low RTC_RST

Saniye registeri 7. biti fabrikadan HIGH olarak yollanır. Bu hıgh olduğu müddetçe saat stop konumundadır. Bu komut dizisi sn yi sıfırlayarak çalışmayı başlatır.
Aslında birde ayar vermen gerekir.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

isikyasar

Device = 16F84a

output porta.2
Dim SN As Byte
Dim DAK As Byte
Dim SAAT As Byte
Dim GUN As Byte
Dim AY As Byte
Dim YIL As Byte
Dim MEM As Byte
Dim SAYI As Byte
Dim DAY As Byte
Dim ONLAR As Byte
Dim BIRLER As Byte

Declare LCD_DTPin PORTB.4
Declare LCD_ENPin PORTA.1
Declare LCD_RSPin PORTA.0

Symbol RTC_RST = PORTB.0
Symbol RTC_DTA = PORTB.2
Symbol RTC_CLK = PORTB.1
'***********Sensör Tanımlamaları***********
Symbol DQ = PORTA.4
Dim Temp As Word   
Dim CA As Byte     
Dim CPerD As Byte   
Dim ISARET As Byte
Dim OKU As Byte
Symbol AR = "+"
Symbol EK = "-"
Symbol SIF = " "

High RTC_RST
         SHOut RTC_DTA, RTC_CLK, 0, [$8E,0]
         Low RTC_RST

basla:
   'GoSub SENSOROKU
   GoSub ZAMAN_OKU
       
        Print AT 1,1,"SAAT: ",DEC2 SAAT,":",DEC2 DAK,":",DEC2 SN
        Print AT 2,1,"TRH: ",DEC2 GUN,"/",DEC2 AY,"/20",DEC2 YIL,"  "
          'Print at 2,1,"ISI   : ",ISARET, Dec (Temp>>1), ".", Dec (Temp.0 * 5),0,"C"
   
     
goto basla

 
ZAMAN_OKU:

         High RTC_RST
         SHOut RTC_DTA, RTC_CLK, 0, [$BF]
         SHIn RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, DAY, YIL, MEM]
         Low RTC_RST
         MEM=SN:GoSub CEVIR:SN=SAYI
         MEM=DAK:GoSub CEVIR:DAK=SAYI
         MEM=SAAT:GoSub CEVIR:SAAT=SAYI
         MEM=GUN:GoSub CEVIR:GUN=SAYI
         MEM=AY:GoSub CEVIR:AY=SAYI
         MEM=YIL:GoSub CEVIR:YIL=SAYI
         MEM=DAY:GoSub CEVIR:DAY=SAYI

         Return

CEVIR:
    ONLAR=MEM & %01110000
    ONLAR=ONLAR>>4
    BIRLER=MEM & %00001111
    SAYI=ONLAR*10+BIRLER
Return

SENSOROKU:

OWrite DQ, 1, [$CC, $44]   
Repeat
DelayMS 5     
ORead DQ, 4, [CA]     
Until CA <> 0   
OWrite DQ, 1, [$CC, $BE] 
ORead DQ, 2,[Temp.LowByte,Temp.HighByte, CA, CA, CA, CA, CA, CPerD]
If Temp=0 Then ISARET = SIF
If Temp>0 Then ISARET = AR
If Temp>500 Then
Temp=65536-Temp
ISARET = EK
EndIf

return


basla komutundan önce verdiğin kodu yaptım ama yine olmadı. ekran komple 00:00:00 olarak duruyor. nasıl başlatabilirim.

POWER

saati o anki zamana tuşlardan ayarla ve normal ekrana dön.muhtemelen saniye saymaya başlayacak.daha önce benimde başıma gelmişti böyle bir sorun.
TB6BKG

isikyasar

otomatik olarak bugüngü tarih ve saati girmek istiyorum. herhangi bir ayar butonu koymadım devreye.

enerji verildiğinde bugünkü tarih ve saatten başlatmak istiyorum.

yardımcı olurmusun.
teşekkürler

POWER

ayar butonu koymamak mantıksız olmuş.bence ayar butonu ekle her zaman lazım.birde ortada isis şeması filan yok böyle nasıl yardım edelim.
TB6BKG

isikyasar


isikyasar

http://



butonsuz başlatılabilirmi şimdilik?