Herkeze iyi geceler,
basit bir devre.12f675 ve ds1302 kullanılarak basit bir zamanlama devresi.fakat ne yaptıysam saniyenin hızlı çalışmasını düzeltemedim.muhtemelen 12f675 ayarları ile ilgili bir sorun.çünkü bu işlemciyi çok fazla kullanmadım.ilgili dosyayı ekliyorum.
define OSC 4
Include "MODEDEFS.BAS"
@ DEVICE pic12F675 'işlemci 12F675
@ DEVICE pic12F675, WDT_OFF 'Watch Dog timer açık
@ DEVICE pic12F675, PWRT_ON 'Power on timer açık
@ DEVICE pic12F675, PROTECT_OFF 'Kod Protek açık
@ DEVICE pic12F675, MCLR_OFF 'MCLR pini kullanılmıyor
@ DEVICE pic12F675, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
DEFINE OSCCAL_1K 1 'OSCCAL değerini yeniden pice yazdırıyor
CMCON=7
ANSEL=%00010000
OPTION_REG.7=1
WPU=%00000000
TRISIO=%011010
GPIO=0
SN VAR BYTE
DAK VAR BYTE
SAAT VAR BYTE
MEM VAR BYTE
GUN VAR BYTE
AY VAR BYTE
YIL VAR BYTE
HGUN VAR BYTE
BOS VAR BYTE
TEMP VAR BYTE
SAYI VAR BYTE
ONLAR VAR BYTE
BIRLER VAR BYTE
HAFTA VAR BYTE
SYMBOL RTC_CLK=GPIO.2
SYMBOL RTC_DTA=GPIO.4
SYMBOL RTC_RST=GPIO.1
symbol ROLE=GPIO.5
PAUSE 300
BASLA:
GOSUB ZAMAN_OKU
IF SAAT=21 AND DAK=23 AND SN<20 THEN
ROLE=1
ELSE
ROLE=0
ENDIF
GOTO BASLA
ZAMAN_OKU:
high RTC_RST:OUTPUT RTC_DTA
shiftout RTC_DTA, RTC_CLK, 0, [$BF]:INPUT RTC_DTA
SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, HAFTA, YIL, MEM] 'OKU
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=HAFTA:GOSUB CEVIR:HAFTA=SAYI
low RTC_RST
return
ZAMAN_YAZ:
MEM=sn:gosub TERSCEVIR:sn=SAYI
MEM=DAK:gosub TERSCEVIR:DAK=SAYI
MEM=SAAT:gosub TERSCEVIR:SAAT=SAYI
MEM=GUN:gosub TERSCEVIR:GUN=SAYI
MEM=AY:gosub TERSCEVIR:AY=SAYI
MEM=YIL:gosub TERSCEVIR:YIL=SAYI
MEM=HAFTA:GOSUB TERSCEVIR:HAFTA=SAYI
high RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$8E, 0] 'WRT Protek açıldı
low RTC_RST:PAUSEUS 10
high RTC_RST
SHIFTOUT RTC_DTA, RTC_CLK, 0, [$BE, SN, DAK, SAAT,GUN , AY, HAFTA, YIL, 128]'YAZ
low RTC_RST
PAUSEUS 10
return
CEVIR:
ONLAR=MEM & %01110000
ONLAR=ONLAR>>4
BIRLER=MEM & %00001111
SAYI=ONLAR*10+BIRLER
return
TERSCEVIR:
ONLAR=MEM DIG 1
ONLAR=ONLAR<<4
BIRLER=MEM DIG 0
SAYI=ONLAR+BIRLER
return
END
http://s3.dosya.tc/server10/qmkd64/TIMER.rar.html
Hocam,
DS1302 kristal frekansı 32.768 midir?
sn işlemci ile alakalı değilde rtc ile alakalı olmalı.
Saniyenin hızlı çalışması ne demek?
saat ileri gidiyorsa kristale paralel kond.
takılması gerekiyor.hatta ayarlı kond. ile frekans 32768 e ayarlanmalı..
kristal frekansı 32.768 zaten devreyi isis de deniyorum gerçek devresinde değil.similasyonu başlattığım zaman saniyenin saymasına gözle bakıldığı zaman zaten anlaşılıyor hızlı ilerlediği.pc nin saniyesiyle karşılaştırdım pc nin saniyesi 39 sn geldiğinde ds1302 bir dakikayı tamamlıyor.yani benim sorunum o klasik saatin ileri yada geri kalması değil.bu sorun isis kaynaklı olabilirmi? fakat aynı proğramı 628a da denediğimde hiç bir problem yok.
Define osc 4 komutunu ekleyin ve İsis den de işlemci osilator ayarını 4 mhz yapın. Gerçek devrede yüksek ihtimal normal çalışır. İsis te zamanlamalari tutturmak icin simulasyon hız ayarlarını yapmanız gerekir ki yinede tam düzgün çalışmıyor.
hocam kristal frekansi tamam ise benc devreyi gercekte deneyin.buyuk bir ihtimal ile sorun kalmayacaktir.bu konuda simulasyon programina fazla guvenmeyin.