Şimdi Ara

ETE Hocanın Prog 7 isimli saat-tarih-derece programı problem?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
3
Cevap
0
Favori
1.161
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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

    AL: LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :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

    ARA:
    GOSUB FLASH
    HIGH PORTA.3
    WHILE SEC=0
    wend
    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
    GOSUB ZAMAN_YAZ
    GOSUB ZAMAN_OKU
    y=0:POZ=0
    goto BASLA

    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

    ZAMAN_OKU:
    high RTC_RST
    shiftout RTC_DTA, RTC_CLK, 0, [$BF]
    SHIFTIN RTC_DTA, RTC_CLK, 1, [SN, DAK, SAAT,GUN , AY, MEM, 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
    low RTC_RST
    return

    ZAMAN_YAZ:

    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, 0, 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

    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.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.