Arkadaslar ETE Hocamızın 7 adet saat projelerı var bunların yedıncısını yaptım cok guzel çalışıyor fakat tek bır sıkıntısı var saat te ıken yanıp sönmesı gereken orta ledler sürekli sabıt yanıyor tarıhtede sabıt yanıyor(tarıhte normal) derecede ıse sonuyor. Sıkıntı yazılımdamı. devremde bişey yok çünkü program 6 nın (tarihsiz versiyon) hex sini yukleyıp çalıştırdıgım zaman ledler sanıye ıle bırlıkte flash yapıyor. Bu konuda kı probleme yardımcı olack arkadsm varmı...
arkadaslar kaynak kodları eklemeden kımse yardımcı olamadı sanırım. Pic Basic ten anlıyan arkadaslar bu programda saat te ıken ledlerın flash yapmamasının sabıt kalmasının nedenı ne olbılır.
PORTA=0:portb=0 TRISB=0 TRISA=%11100000 '----------------------------------------------------------------- @ DEVICE pic16F628 'işlemci 16F628 @ DEVICE pic16F628, WDT_ON 'Watch Dog timer açık @ DEVICE pic16F628, PWRT_ON 'Power on timer açık @ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı @ DEVICE pic16F628, MCLR_off 'MCLR pini kullanılMIYOR. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak '----------------------------------------------------------------- 'DEFINE OSC 4 '------------------------------------------------------------------------- ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git. OPTION_REG=%10000101 'Pull up dirençleri İPTAL- Bölme oranı 1/64. INTCON=%10100000 'Kesmeler aktif ve TMR0 kesmesi aktif TMR0=0 CMCON=7 '---------------------------------------------------------------------------- Comm_Pin VAR PortA.4 ' One-wire Data-Pin "DQ" PortB.0 da Busy VAR BIT ' Busy Status-Bit POZ VAR BIT GOR VAR BYTE HAM VAR WORD ' Sensör HAM okuma değeri ISI VAR WORD ' Hesaplanmış ISI değeri Float VAR WORD ' Holds remainder for + temp C display X VAR WORD Y VAR BYTE SAYI VAR BYTE SIGN_BITI VAR HAM.Bit11 ' +/- sıcaklık İşaret biti, 1 = olursa eksi sıcaklık NEGAT_ISI CON 1 ' Negatif_Cold = 1 Deg CON 223 ' ° işareti SIGN VAR BYTE ' ISI değeri için +/- işaret TEMP VAR BYTE ' Div32 bit hesap için geçici değişken SAYAC VAR BYTE SN VAR BYTE DAK VAR BYTE SAAT VAR BYTE GUN VAR BYTE AY VAR BYTE YIL VAR BYTE MEM var byte ' Temporary data holder 'TARIH var byte ' Second byte to ds1302 ONLAR VAR BYTE BIRLER VAR BYTE ESN VAR BYTE '--------------------------------------------- SYMBOL DTA=PortB.0 SYMBOL CLK=PORTB.1 SYMBOL RTC_DTA=PORTA.0 SYMBOL RTC_CLK=PORTA.1 SYMBOL RTC_RST=PORTA.2 symbol SEC =PORTA.5 SYMBOL ASAGI =PORTA.6 SYMBOL YUKARI=PORTA.7 '----------------------------------------------------------------------------- CLEAR 'tüm değişkenler sıfırlandı low RTC_RST low RTC_CLK GOSUB GECIKME '----------------------------------------------------------------------------- HIGH PORTA.3 gosub ZAMAN_OKU:esn=SN BASLA: IF Y=15 THEN Y=0 IF Y>5 AND Y<11 THEN GOSUB EKRAN1 IF Y>10 THEN GOSUB EKRAN2 IF Y<6 THEN GOSUB EKRAN0
ATLA: if SEC=0 THEN AYAR 'MODE TUŞUNA BASILMIŞ İSE AYAR'A GİT gosub SENSOROKU 'SONSÖR OKU VE SICAKLIĞI EKRANA YAZ
GOTO BASLA
EKRAN0: if sayac=28 then LOW porta.3 X= SAAT DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2
X= SAAT DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3
X= DAK DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4
X= DAK DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5
X= sn DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6
X= SN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN
EKRAN1:LOW PORTA.3 SAYI=0 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2 IF SIGN_BITI = NEGAT_ISI THEN SAYI=64 SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3 x=(ISI DIG 1):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4 x=(ISI DIG 0):GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5 X=10:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6 X=11:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN
EKRAN2:IF POZ=0 THEN HIGH porta.3 X= GUN DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.2:PAUSEUS 2:LOW PORTB.2
X= GUN DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.3:PAUSEUS 2:LOW PORTB.3
X= AY DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.4:PAUSEUS 2:LOW PORTB.4
X= AY DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.5:PAUSEUS 2:LOW PORTB.5
X= YIL DIG 1:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.6:PAUSEUS 2:LOW PORTB.6
X= YIL DIG 0:GOSUB AL SHIFTOUT DTA,CLK,1,[SAYI] HIGH PORTB.7:PAUSEUS 2:LOW PORTB.7 RETURN '----------------------------------------------------- AYAR: LOW PORTA.3:SN=0:POZ=1:GOSUB FLASH IF Y>10 THEN TARIHAYAR WHILE SEC=0 WEND HOUR: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN MINBIR IF YUKARI=0 THEN SAAT=SAAT+1 IF SAAT=24 THEN SAAT=0 ENDIF IF ASAGI=0 THEN SAAT=SAAT-1 IF SAAT=255 THEN SAAT=23 ENDIF GOSUB GECIKME GOTO HOUR
MINBIR: GOSUB FLASH WHILE SEC=0 WEND
MINUTE: GOSUB EKRAN0 LOW PORTA.3 IF SEC=0 THEN ara IF YUKARI=0 THEN DAK=DAK+1 IF DAK=60 THEN DAK=0 ENDIF IF ASAGI=0 THEN DAK=DAK-1 IF DAK=255 THEN DAK=59 ENDIF GOSUB GECIKME GOTO MINUTE
SECBIR: WHILE SEC=0 WEND
GECIKME: FOR X=0 TO 1800 PAUSEUS 50 NEXT RETURN DELAY: FOR X=0 TO 1900 PAUSEUS 10 NEXT RETURN
FLASH: TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY TOGGLE PORTA.3:GOSUB DELAY:TOGGLE PORTA.3:GOSUB DELAY return '------------------------------------------------------------------------------- TARIHAYAR: WHILE SEC=0 WEND GUNAL: GOSUB EKRAN2 IF SEC=0 THEN AYBIR IF YUKARI=0 THEN GUN=GUN+1 IF GUN=32 THEN GUN=1 ENDIF IF ASAGI=0 THEN GUN=GUN-1 IF GUN=255 THEN SAAT=31 ENDIF GOSUB GECIKME GOTO GUNAL
AYBIR: GOSUB FLASH WHILE SEC=0 WEND
AYAL: GOSUB EKRAN2 IF SEC=0 THEN YILBIR IF YUKARI=0 THEN AY=AY+1 IF AY=13 THEN AY=1 ENDIF IF ASAGI=0 THEN AY=AY-1 IF AY=255 THEN AY=12 ENDIF GOSUB GECIKME GOTO AYAL YILBIR: gosub FLASH WHILE SEC=0:WEND YILAL: GOSUB EKRAN2 IF SEC=0 THEN ARA IF YUKARI=0 THEN YIL=YIL+1 IF YIL=100 THEN YIL=0 ENDIF IF ASAGI=0 THEN YIL=YIL-1 IF YIL=255 THEN YIL=99 ENDIF GOSUB GECIKME GOTO YILAL
'----------------ISI SENSÖR OKUMA BÖLÜMÜ -------------------------------- SENSOROKU: '-----------------DİKKAT İSİS'de BU SATIR AKTİF EDİLECEK---------------------- ' ham=$ff5e:Gosub hesapla:return 'NORMAL ÇALIŞMADA BU SATIR SİLİNECEK '------------------------------------------------------------------------------ OWOUT Comm_Pin, 1, [$CC, $44]' ISI değerini oku Bekle: OWIN Comm_Pin, 4, [Busy] ' Busy değerini oku IF Busy = 0 THEN Bekle ' hala meşgulmü? , evet ise goto Bekle..! OWOUT Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku OWIN Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir. GOSUB Hesapla RETURN
Hesapla: ' Ham değerden Santigrat derece hesabı Sign = "+" IF SIGN_BITI = NEGAT_ISI THEN Sign = "-" temp=($ffff-ham+1)*625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM+1) ' ISI = DIV32 10 ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. GEC: FLOAT = (ISI //1000)/100 ISI=ISI/1000 RETURN
DISABLE KESME:IF POZ=1 then CIK SAYAC=SAYAC+1 'kesme sayacı 1 sn= 61(sayac) x 256 (Tmr0) x 64 (bölme) IF SAYAC=58 then '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us) SAYAC=0 'sayaç sıfırlanıyor Y=Y+1 GOSUB ZAMAN_OKU if Y<5 then HIGH porta.3 ENDIF CIK: INTCON.2=0 'TMR0 Kesme bayrağı sıfırlanıyor RESUME ENABLE
END
walla ete ustanın yaptığı devreler gibi çalışan ama kendim yaptığım kafama göre bazı özellikler elklediğim (satt başı sinyal sesi, kaydet ve seç için dit sesleri, sesli ve sessiz fonks, otomatik ayara geçme fonsiyonu vb gibi bazı fonksiyonlar ekleyerek yaptım onu verim sana dicem ama sen zaten bu devreyi yapmışın. Kod yorumuna gelincede bir olayın tamirini yapmak yenisini yapmaktan çok daha zordur. Programı yapan kişi o satırda uyguladığı programlama mantığı kişiye göre çok değişiklik gösterir. Ben bile kendi yaptığım saatin hadi donanımını geç bi tarafa bi bakmaya anlarsında yazılımını yazarken her satıra ne yapmak istediğimi yazıyorum. Düşün bir şimdi aradan aylar geçmiş ve yazdığım programı açıpda bir göz artsam yandaki açıklama o satırda ne yapmak istediğimi yazdığım cümleler olmasa 2 saat programı baştan sona incelemem gerekecek çünkü insan unutuyo. O anki düşündüğün mantığı programa yansıtıyosun. Demem oki bu soruyu bence en iyi anlıyorsan yine kendin bulursun anlamıyosanda işin ustası yazılımı yazan kişiye sorman gerekir bence. Hem programda yazılım sorunu varsada gidermiş olur böylece.
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme