Saat konusunda....

Başlatan oguztkn, 26 Eylül 2013, 01:07:12

oguztkn

Hocam ve arkadaslar
Elimde 4 adet 7 segment display vardı kendime bir saat ve termometre yapayım dedim.Displayleri denerken iki renkli olduğunu farkettim hevesim daha da arttı.Saat entegresi olarak ds1302 sıcaklık için ds18b20 kullandım.Displayleri sürmek içinde bir adet uln2803 kullandım displayleri tarama yöntemi ile sürmeye karar verdim.Şemayıda ekte görebilirsiniz.Devrenin tüm işleri bitti program kısmına geldim programda Ete hocanın saat-ısı projesinin kodlarından yararlandım birkaç yerini kopyaladım sadece tarama yöntemini daha önce yapmadım nasıl yapılacağını da internette okuyarak anladım ama kodlara nasıl başlayacağımı bilmedim.Kodları ekledim hatam yada nerden başlayacağım konusunda yardım ederseniz sevinirim.Bittiğinde video ve resim eklerim.

Şimdiden Teşekkürler....


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.09.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;@ DEVICE pic16F877
;@ DEVICE pic16F877,WDT_OFF
;@ DEVICE pic16F877,PWRT_ON
;@ DEVICE pic16F877,PROTECT_OFF
;@ DEVICE pic16F877,XT_OSC
'******************************************************************************* ADCON1=7
CMCON=7
TRISA=%00000000
TRISB=%00000001
TRISC=%00000000
TRISD=%00000000
TRISE=%00000111
PORTA=0
PORTB=0
PORTC=0
PORTD=0
'*******************************************************************************
Comm_Pin  VAR PortB.0   ;One-wire Data-Pin "DQ" PortB.0 da
SYMBOL  RTC_DTA = PORTB.3 ;Ds1302 I/O ucu
SYMBOL  RTC_CLK = PORTB.2 ;Ds1302 SCLK ucu
SYMBOL  RTC_RST = PORTB.1 ;Ds1302 RST ucu
symbol  SEC     = PORTE.2 ;Saat ayar set tusu
SYMBOL  ASAGI   = PORTE.0 ;Saat ayar asagi tusu
SYMBOL  YUKARI  = PORTE.1 ;Saat ayar yukari tusu
;*******************************************************************************
SYMBOL  Yesil   = PORTB.4 ;Saniye ledleri yesil icin
SYMBOL  Kirmizi = PORTB.5 ;Saniye ledleri kirmizi icin
;*******************************************************************************
SYMBOL  KD1     = PORTD.0 ;
SYMBOL  KD2     = PORTD.1 ; Displayleri aktif etme uclari
SYMBOL  KD3     = PORTD.2 ;      Kirmizi renk icin
SYMBOL  KD4     = PORTD.3 ;
;*******************************************************************************
SYMBOL  YD1     = PORTD.4 ;
SYMBOL  YD2     = PORTD.5 ; Displayleri aktif etme uclari
SYMBOL  YD3     = PORTD.6 ;      Yesil renk icin
SYMBOL  YD4     = PORTD.7 ;
;*******************************************************************************
;///////////////////////  TARAMA YONTEMI ICIN SEGMENTLER ///////////////////////
SYMBOL  IN1     = PORTC.0 ; Segment A
SYMBOL  IN2     = PORTC.1 ; Segment B
SYMBOL  IN3     = PORTC.2 ; Segment C
SYMBOL  IN4     = PORTC.3 ; Segment D
SYMBOL  IN5     = PORTC.4 ; Segment E
SYMBOL  IN6     = PORTC.5 ; Segment F
SYMBOL  IN7     = PORTC.6 ; Segment G
SYMBOL  IN8     = PORTC.7 ; Segment Nokta
'*************************************************************************
Busy           VAR BIT      ' Busy Status-Bit
GOR         VAR BIT
HAM         VAR WORD     ' Sensor HAM okuma degeri
ISI         VAR WORD     ' Hesaplanmis ISI degeri
Float       VAR WORD     ' Holds remainder for + temp C display
X           VAR WORD 
Y           VAR BYTE 
SAYI        VAR BYTE   
SIGN_BITI   VAR HAM.Bit11'   +/- sicaklik isaret biti,1 = olursa eksi sicaklik
NEGAT_ISI   CON 1        ' Negatif_Cold = 1
Deg         CON 223      ' ° isareti
SIGN        VAR BYTE     '  ISI degeri icin  +/-  isaret
TEMP        VAR BYTE     ' Div32 bit hesap icin gecici degisken
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
OUTBYTE     var byte    ' Second byte to ds1302
REG_ADR     var byte    ' First byte to DS1302
ONLAR       VAR BYTE
BIRLER      VAR BYTE
ESN         VAR BYTE
;*******************************************************************************
CLEAR                   'Tum degiskenler sifirlandi
low RTC_RST
low RTC_CLK
PAUSE 200
esn=0:GOR=0
;*******************************************************************************
gosub ZAMAN_OKU:esn=SN
BASLA:
       GOSUB ZAMAN_OKU
       IF ESN<>SN THEN
         y=SN/5:IF GOR=0 THEN TOGGLE porta.3
         IF (Y*5)=SN THEN GOR=1-GOR
       ENDIF 
         IF GOR=1 THEN
          GOSUB EKRAN1
          GOTO ATLA
         ENDIF
       
       GOSUB EKRAN0
       
ATLA:  if SEC=0 THEN AYAR  'MODE TUSUNA BASILMIS ISE AYAR'A GIT
       gosub SENSOROKU     'SONSOR OKU VE SICAKLIGI EKRANA YAZ
       ESN=SN
       GOTO BASLA
;*******************************************************************************
;--------------------Sicaklik Okuma Bolumu--------------------------------------
    IF SIGN_BITI = NEGAT_ISI THEN
       Sign   = "-" 
       temp=($ffff-ham+1)*625
       ISI  = DIV32 10

    endif
    TEMP = 625 * (HAM+1)       
    ISI = DIV32 10    ' Div32 hassas derece hesabi icin 32 bit bolme yapiyoruz.
GEC:
    FLOAT = (ISI //1000)/100
    ISI=ISI/1000
    RETURN
;*******************************************************************************   
;--------------------Zaman Okuma Bolumu-----------------------------------------
ZAMAN_OKU:   
       
    sayac=1-sayac: 'if sayac=1 then low porta.3   
    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
    low RTC_RST :PAUSE 100
    Return
;*******************************************************************************
;--------------------Ayar Bolumu------------------------------------------------
AYAR:  gosub FLASH
       SN=0           
       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 100
        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
        goto BASLA
FLASH:
      TOGGLE PORTB.4:PAUSE 150:TOGGLE PORTB.5:PAUSE 150
      TOGGLE PORTB.4:PAUSE 150:TOGGLE PORTB.5:PAUSE 150
      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     
;*******************************************************************************     
     
     

     
     
     
 

ete

Bu şemayı neye göre düzenledin ? yada direk bir yerden mi aldın.
Elindeki displayler büyük segmenlerden oluşmuyor ise yani bir çizgide birden fazla led yok ise kullandığın şema anlamsız.
Öncelikle deneme yapmalısın. Bir segmenti yakmak için ne kadarlık bir voltaj gerekiyor. ? Şayet 5V sınırları içerisinde ise şeman yanlış.
Aslında şeman zaten yanlış. Üstelik bunu displaylerin ortak anot mu? yoksa katod mu olduğunu bilmeden (söylememişsin) söylüyorum. Dikkat ediyor isen segmentleri ULN üzerinden sürüyorsun. Displaylerin Ortak anot değil ise bu mantık pek kullanılan bir yöntem değil. Zira ULN çıkışta sana aktif olduğu zaman LOW verecektir. Hadi buna tamam diyelim. 7 Segmentlerin Ortak anot ise buradan low alır ortak uçlarada High verirsen segmentleri yakabilirsin.
Peki ortak uçlara bakalım. Onları birer NPN transistörle sürüyorsun. Halbuki PNP ile sürmen gerekir idi. Bağlantı şeklin onu gösteriyor. Zira NPN transistörün emitterinden GND girer Collectoründen çıkartır. Sen emitterden +X V girmişsin Collectorlerıda ortak uçlara bağlamışsın bu kısım kesin olarak çalışmayacaktır. Çalışması için o transistörlerin PNP olanlarını kullanacaksın. Tabiiki 7 segmentler ortak anot iseler.
Led transistörleride yanlış. Çok şey yanlış bu şemada.

Gelelim displayler nasıl sürülecek. Tabiiki kesme kullanılması en doğrusu. Her 1000 us de bir kesme oluşturacaksın. Bunu yapacaksan eğer programdaki pause lerin tamamını kladırman gerekecek unutma aksi taktirde aksaklıklar çıkar ortaya.
ELinde 4 adet display var. Bunun her biri her 1000 us de bir sırası ile yanacak. Şimdi adım adım olacakları yazalım;
Önce displaylere numara verelim 3210 şeklinde sıralanmış olsunlar. Sıra isimli bir değişkenin olacak ve bu hangi displayin aktif olacağını belirleyecek.
-İlk kesme oluştu diyelim. Sıra=0 olacağı için "0" nolu displayde gösterilecek bilgi yada rakam her neyse ULN üzerinden displaylere verilecek. Bu displayi sürecek olan ortak uçu süren transistör aktif edilecek Böylece "0" nolu display ilgili rakamı göstermiş olacak.
- Sıra=sıra+1 yapılıp kesmeden çıkılacak.
- ikinci kesme oluştu, öncelikle 0 nolu displayi süren transistör kapatılcak. Böylece 0 nolu display kapanmış olacak.
  Sıra=1 olduğundan bu sefer 1 nolu display de gösterilecek rakam karşılığı ULN üzerinden displaylere verilecek.. Bu displayi sürecek olan ortak uca bağlı transistör aktif edilecek böylece ilgili rakam 1 nolu displayde belirecek.
- SIra=sıra+1 yapılıp kesmeden çıkılacak.
Benzer mantıkla bütün displaylerde rakamlar sırası ile gösterilecek. Sonuçta SIra=Sıra+1 yapıldığında sıra=4 olacak sıra=4 ise sıra=0 şeklinde birkomut verilerek sistem başa döndürülecek.
Hepsi bu kadar.
4 mhz de Tmr0 kesmesi kullanılarak her 1000us de bir kesme oluşturmak için;
- Bölme oranın 1/4 olmalı. Bu nedenle OPTION_REG=%10000001  vermelisin. Bit.7=1 yaptım ama istersen onu sıfır yapabilirsin. Bu pullupları kapatmak içindir. Açmak için sıfır yapılmalı.
- TMR0 ön yükleme değerin 7 olmalı. O halde hem başlangıçta hemde kesme içinde çıkmadan evvel TMR0=7 değerini vermelisin.
- Global kesmeler ve TMR0 kesmesini aktif etmelisin  INTCON=%10100000

Ete

oguztkn

Öncelikler şemayı kendim çizdim ortada bir şema yok.Displayler ise her segmentinde 4 adet led var iki kırmızı iki yeşil.Display ortak Anot.Aktif etme uçlarını yani anot uçlarını bd139 kullandım akım konusunda sorun olmaması için.Sizin söylediğiniz pnp olayında düşünememişim ezbere yapmışım benimde kafama dank etti bd140 ile değiştireceğim.Sürme konusunda ise uln2803 kullandım gerçi tarama yönteminde fazla akım akmayacağı için gerek varmı tereddütünde kaldım ama gene de koydum.Şema konusunda başka eksiğim varmı ?

ete

Başka eksik yok. Ancak. Madem her segmentde 2 led var normalde uln ye gerek olmaz diye düşünüyorum. Segment ledleri 3,4 v değil iseler ki muhtemeln 2v dolayında bir voltaj yeterli olacaktır direk pic çıkışı ile sürülebilir. Seri akım sınırlama direnci r=(5-4)/0,010=100 ohm yeterli olacaktır.
Bu durumda segment datalarını terslenmiş vermen gerekir.  Mesela 1 rakamı için verdiğin %00000110 yerine %11111001 şeklinde bilgi vermelisin.

Ete

oguztkn

#4
hocam devreyi tekrar düzenledim pnp transistor kullandım.uln yi de kaldırdım ara 130 ohm dirençle direk
pic ile sürdüm.Şemayı da ekledim şimdilik tek renk ile çalıştırayım diğer rengi daha sonra ayarlarım.
programda ise pek ilerleyemedim som hali bu
sizin programınızdan ds1302 ve ds18b20 nin okuma bölümlerini kopyaladım bu programa ve bacaklarını uyarladım,kesme nin ayarlarını yaptım sadece göstereceğim bölüm ve ayar bölümü kaldı birde kendim tmr0 kesmesi denedim ama tıkandım burda kafam stop etti
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2013 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25.09.2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;@ DEVICE pic16F877
;@ DEVICE pic16F877,WDT_OFF
;@ DEVICE pic16F877,PWRT_ON
;@ DEVICE pic16F877,PROTECT_OFF
;@ DEVICE pic16F877,XT_OSC
'*******************************************************************************
@ DEVICE pic16F877A
@ DEVICE pic16F877A,WDT_OFF
@ DEVICE pic16F877A,PWRT_ON
@ DEVICE pic16F877A,PROTECT_OFF
@ DEVICE pic16F877A,XT_OSC
CMCON=7
'*******************************************************************************

OPTION_REG=%10000001
INTCON=%10100000
TRISA=%00000000
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
TRISE=%00000111
'*******************************************************************************
Comm_Pin  VAR PortC.0   ;One-wire Data-Pin "DQ" PortB.0 da
SYMBOL  RTC_DTA = PORTC.2 ;Ds1302 I/O ucu
SYMBOL  RTC_CLK = PORTC.1 ;Ds1302 SCLK ucu
SYMBOL  RTC_RST = PORTC.3 ;Ds1302 RST ucu
symbol  SEC     = PORTE.2 ;Saat ayar set tusu
SYMBOL  ASAGI   = PORTE.0 ;Saat ayar asagi tusu
SYMBOL  YUKARI  = PORTE.1 ;Saat ayar yukari tusu
;*******************************************************************************
SYMBOL  Yesil   = PORTA.0 ;Saniye ledleri yesil icin
SYMBOL  Kirmizi = PORTB.7 ;Saniye ledleri kirmizi icin
;*******************************************************************************
SYMBOL  KD1     = PORTB.2 ;
SYMBOL  KD2     = PORTB.3 ; Displayleri aktif etme uclari
SYMBOL  KD3     = PORTB.5 ;      Kirmizi renk icin
SYMBOL  KD4     = PORTB.6 ;
;*******************************************************************************
SYMBOL  YD1     = PORTB.0 ;
SYMBOL  YD2     = PORTB.1 ; Displayleri aktif etme uclari
SYMBOL  YD3     = PORTB.4 ;      Yesil renk icin
SYMBOL  YD4     = PORTC.7 ;
;*******************************************************************************
;///////////////////////  TARAMA YONTEMI ICIN SEGMENTLER ///////////////////////
SYMBOL  a     = PORTD.0 ; Segment A
SYMBOL  b     = PORTD.1 ; Segment B
SYMBOL  c     = PORTD.2 ; Segment C
SYMBOL  d     = PORTD.3 ; Segment D
SYMBOL  e     = PORTD.4 ; Segment E
SYMBOL  f     = PORTD.5 ; Segment F
SYMBOL  g     = PORTD.6 ; Segment G
SYMBOL  nkta  = PORTD.7 ; Segment Nokta
'*************************************************************************
Busy        VAR BIT      ' Busy Status-Bit
GOR         VAR BIT
HAM         VAR WORD     ' Sensor HAM okuma degeri
ISI         VAR WORD     ' Hesaplanmis ISI degeri
Float       VAR WORD     ' Holds remainder for + temp C display
X           VAR WORD 
Y           VAR BYTE 
SAYI        VAR BYTE   
SIGN_BITI   VAR HAM.Bit11'   +/- sicaklik isaret biti,1 = olursa eksi sicaklik
NEGAT_ISI   CON 1        ' Negatif_Cold = 1
Deg         CON 223      ' ° isareti
SIGN        VAR BYTE     '  ISI degeri icin  +/-  isaret
TEMP        VAR BYTE     ' Div32 bit hesap icin gecici degisken
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
OUTBYTE     var byte    ' Second byte to ds1302
REG_ADR     var byte    ' First byte to DS1302
DAKBIR      VAR BYTE
DAKON       VAR BYTE
SAATBIR     VAR BYTE
SAATON      VAR BYTE
BIRLER      VAR BYTE
ONLAR       VAR BYTE
ESN         VAR BYTE
ZZ          var byte
WW          VAR BYTE
SIRA        VAR BYTE
;*******************************************************************************
CLEAR                   'Tum degiskenler sifirlandi
low RTC_RST
low RTC_CLK
TMR0=7
PAUSE 200
esn=0:GOR=0
INTCON=%10100000
ON INTERRUPT GOTO KESME
PORTB=255
;*******************************************************************************
Basla:
     
      FOR ZZ=0 to 14
        GOSUB ZAMAN_OKU
        X=DAK DIG 0:GOSUB AL:DAKBIR=SAYI
        X=DAK DIG 1:GOSUB AL:DAKON=SAYI
        x=SAAT DIG 0:GOSUB AL:SAATBIR=SAYI
        X=SAAT DIG 1:GOSUB AL:SAATON=SAYI
        GOSUB DELAY
        WHILE ESN=SN
          GOSUB ZAMAN_OKU
          GOSUB DELAY
        WEND
        ESN=SN
      NEXT           
        GOSUB ZAMAN_OKU
        ESN=SN 
      for zz=0 to 5 
       GOSUB SENSOROKU
       x=ISI DIG 0:gosub AL:SAATBIR=SAYI
       X=ISI DIG 1:GOSUB AL:SAATON=SAYI
       X=10:gosub AL:DAKON=SAYI
       X=11:GOSUB AL:DAKBIR=SAYI
       GOSUB DELAY
     
       WHILE ESN=SN
         GOSUB ZAMAN_OKU
         GOSUB DELAY
       WEND
       ESN=SN
     NEXT
         
     GOTO BASLA

AL:   
'       LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN'CC
       LOOKUP X,[64,121,36,48,25,18,2,120,0,16,70,28],SAYI :RETURN'CA
       
DELAY:
      for WW=0 to 255
        PAUSEUS 5
      NEXT
      RETURN         

;*******************************************************************************
;--------------------Sicaklik Okuma Bolumu--------------------------------------
SENSOROKU:
           OWOUT   Comm_Pin, 1, [$CC, $44]' ISI degerini oku
Bekle:
           OWIN    Comm_Pin, 4, [Busy]    ' Busy degerini oku
           IF      Busy = 0 THEN Bekle  ' hala mesgulmu?,evet ise goto Bekle..!
           OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]'iki byte oku ve okumayi bitir.
           ISI = ((HAM*10)/16)/10
           RETURN
   
;*******************************************************************************   
;--------------------Zaman Okuma Bolumu-----------------------------------------
ZAMAN_OKU:   
    sayac=1-sayac: 'if sayac=1 then low porta.3   
    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
    low RTC_RST :PAUSE 100
    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   
;******************************************************************************
FLASH:
      TOGGLE PORTB.2:PAUSE 150:TOGGLE PORTB.2:PAUSE 150
      TOGGLE PORTB.3:PAUSE 150:TOGGLE PORTB.3:PAUSE 150
      TOGGLE PORTB.5:PAUSE 150:TOGGLE PORTB.5:PAUSE 150
      TOGGLE PORTB.6:PAUSE 150:TOGGLE PORTB.6:PAUSE 150
      return
;*******************************************************************************Disable
DISABLE
KESME:
      PORTB=255
      SIRA=SIRA+1:IF SIRA=4 THEN SIRA=0

      if SIRA=0 then
        PORTD=DAKBIR
        KD4=0
      ENDIF 
     
      if SIRA=1 then
        PORTD=DAKON
        KD3=0
      ENDIF
       
      if SIRA=2 then
        PORTD=SAATBIR
        KD2=0
      ENDIF

      if SIRA=3 then
        PORTD=SAATON
        KD1=0
      ENDIF
     
     INTCON.2=0
     TMR0=7
     RESUME
     ENABLE     
     end

ete

Zaman ve sıcaklık gösterme işini programa ilave ettim. Kesme kısmını yeniden düzenledim. Eksikleri ilave ettim.
Ne yazıkki simulasyon dosyası vermemişsin. Deneyemedim.  Sen denersin artık.
Yaptıklarımı senin yazdığın programın üzerine yazdım oradan alabilirsin.

Ete

oguztkn

#6
hocam devrenin plaketi hazır direk devrede deniyorum programda kesmede PORTB=0 demişiniz ben onu PORTB=1 dedim başlangıcta kapalı olsun displayler diye birde kd lerin hepsini 0 yaptım 0 da aktif olduğu için ama display lerde hiçbir hareket yok saniki devre de enerji yok gibi oluyor program bir yerde takılıp kalıyor gibime geldi ama sorunu bulamadım pic 16f877a wdt kapalı intcon ayarları da tamam sorun nerde anlayamadım ama büyük ihtimalle gösterme kısmında   



Şimdi gördüm on interrupt goto kesme satırını göremedim ondan olabilir mi acaba
O satırı ekledim şuan 00:00 da ama bi kıpraşma yok

ete

Simulasyon dosyasını vermiş olsaydın bu kusurları ben bulur halleder çöalışanı buraya koyardım.
Programda Kesme açma komutu  INTCON=%10100000 ve kesme oluşunca gidilecek etiket belirten komut ON INTERRUPT GOTO KESME  satırları eksik.
Onları yerine koydum.
PORTB ve KD değerlerini ters vermişiz. NPN transistöre göre verilmiş oldular onlarıda düzelttim.
Şimdi bak bakalım.

Ete


oguztkn

hocam bi sorun var sürekli displayler yanıp sönüyor ama bir gelişme yok bu sefer isis dosyasını da ekledim hatta attığım pbp ve hex de içinde

ete

#9
Program çalışıyor. Bir iki düzeltme gerekiyormuş. Onları ekledim.
Simulasyon şemasında DS18B20 bağlantın yanlış.
İsis simulasyonunda ortak anotları pulldown yapmaz isen ekranda sürekli 8 rakamı yanar.
Ancak gerçek devrede buna ihtiyaç yoktur. Simulasyon sorunu bu.
Sen madem gerçek devrede deniyorsun direk saatin çalıştığını görmen gerekirdi.
Umarım devrende sorun yoktur.

Devre ve program ilişiktedir. Simulasyonda ekran stabil gözükmüyor. Titriyormuş gibi duruyor ancak buda simulasyon hızının yeterli olmamasından kaynaklanıyor. Gerçek devrende sistem titremeden çalışması gerekir. Bunu yüzlerce defa denedim.

Ete

oguztkn

#10
hocam devreyi denedim tekrar 00:00 da yanıp sönüyor bende de programda ds1302 nin okuma kısmını çıkardım sadece ds18b20 yi bıraktım onda da displayler 7-derece işareti-santigrat işareti-2 şeklinde gözüktü ve oda sensörü ısıtmama rağmen değişmedi birde onları gösterir kende titreme çok fazla acaba tmr0 değerini yükseltmek yada düşürmekmi gerekir denedim ama bişi farkedemedim

Birde şimdi gördüm sensörü elimle ısıtıyorum değişmiyor ama adaptörü çıkartıp tekrar takınca ekran değişiyor

ete

Simulasyonda her şey çalışıyor. O halde senin devrede de çalışması gerekir. Çalışmıyorsa devrende kusur aramalısın.
Bu aşamadan sonra yapabileceğim bir şey yok maalesef.
Ete

MS_59

#12
hocam zaman okuma kısmında pause 100 var bu gecikme  fazlalık değilmi titreşim bundan kaynaklanıyor sanırım
mehmet

ete

evet gözümden kaçmış. Kaldır onu. daha stabil çalışır.
Ete

MS_59

evet kaldırınca similasyonda bile görüntü sabitlendi gerçektede böyledir arkadaş bi denesin
mehmet

Powered by EzPortal