Simulasyonda tamam ancak reelde hata.. ( 16F877 ve ISD2560 )

Başlatan sir_hawk, 28 Şubat 2008, 17:39:40

sir_hawk




Yukarıdaki devre aşagıdaki kodlara göre isiste simule ettiğimde çalışıyor.Bu devre programın ve devrenin manuel girişlere karşılık verdiği cvpları görmek için. Esas devrede girişler harici bir sistemden alınmakta ( beradboardda denerken girişleri yine manuel verdim ve harici sistemi dahil etmedim. )



@ DEVICE pic16F877                      'işlemci 16F877                                
@ DEVICE pic16F877, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F877, PWRT_ON             'Power on timer açık
@ DEVICE pic16F877, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F877, XT_OSC
DEFINE OSC 4

INTCON=0


PORTB=0
PORTC=0
PORTD=0
TRISB=0
TRISC=%11111000
TRISD=1


SYMBOL SH   = PORTC.4
SYMBOL DS   = PORTC.5
SYMBOL CLK1 = PORTC.6
SYMBOL CLK2 = PORTC.7
SYMBOL BIR  = PORTC.0
SYMBOL EKSI = PORTC.1
SYMBOL JF   = PORTC.2
SYMBOL PD   = PORTD.4
SYMBOL CE   = PORTD.5

KAT    VAR WORD
ADRES1 VAR BYTE
ADRES2 VAR BYTE
i      var byte

CLEAR


BASLA : 
        PD=0
        CE=1
        IF JF =1 THEN
        PD=1
        GOSUB KATOKU
        GOSUB ADRESLE
        low ce : pause 5 : HIGH CE
        for i=1 to 10
        pause 100
        next i
        LOW PD
        ENDIF
        GOTO BASLA
        
        END
        
KATOKU :
        
        IF BIR=0 AND EKSI=0 AND PORTB=%00111111 THEN
        KAT=0
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%00000110 THEN
        KAT=1
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01011011 THEN
        KAT=2
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01001111 THEN
        KAT=3
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01100110 THEN
        KAT=4
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01101101 THEN
        KAT=5
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01111101 THEN
        KAT=6
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%00000111 THEN
        KAT=7
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01111111 THEN
        KAT=8
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=0 AND PORTB=%01101111 THEN
        KAT=9
        RETURN
        ENDIF
        IF BIR=1 AND EKSI=0 AND PORTB=%00000000 THEN
        KAT=10
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=1 AND PORTB=%00000110 THEN
        KAT=21
        RETURN
        ENDIF
        IF BIR=0 AND EKSI=1 AND PORTB=%01011011 THEN
        KAT=22
        RETURN
        ENDIF
RETURN

ADRESLE :

        IF KAT=0 THEN
        ADRES1=0
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=1 THEN
        ADRES1=$28
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=2 THEN
        ADRES1=$50
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=3 THEN
        ADRES1=$78
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=4 THEN
        ADRES1=$A0
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=5 THEN
        ADRES1=$C8
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=6 THEN
        ADRES1=$F0
        ADRES2=0
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=7 THEN
        ADRES1=$18
        ADRES2=%00000001
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=8 THEN
        ADRES1=$40
        ADRES2=%00000001
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=9 THEN
        ADRES1=$68
        ADRES2=%00000001
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=10 THEN
        ADRES1=$90
        ADRES2=%00000001
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        IF KAT=21 THEN
        ADRES1=$B8
        ADRES2=%00000001
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
        
        
        IF KAT=22 THEN
        ADRES1=$E0
        ADRES2=$01
        SHIFTOUT DS,SH,1,[ADRES1]
        HIGH CLK1:PAUSEUS 2:LOW CLK1
        SHIFTOUT DS,SH,1,[ADRES2]
        HIGH CLK2:PAUSEUS 2:LOW CLK2
        RETURN
        ENDIF
RETURN





Ancak devrenin gerçek şekli aşagıdaki gibi ama devreyi kurup pici programladığımda netice alamıyorum.















Acaba sorun programımda mı  :x   ,  yoksa kurduğum devremde mi ?

Yadımlarınız için şimdiden tşk ederim.

erkan614

tavsiyem şudur ki
eğer girişlerin opto, anahtar, buton vs. gibi elemanlarsa PORTB'nin pull up dirençlerini aktif et ve butonu pin ile gnd arasına bağla, butona basıldığında mantık 0, basılı değilken pull up dolayısı ile mantık 1 olur. ;)

şu anki devrede giriş drençlerin gerilim bölücü olarak çalışıyor olabilir. [absolotely ofcourse (ingilazcam pek iyi değil)] :roll:

canbulut

isd 2560 benim proteus programında çıkmıyor.yardımcı olabilecekmsiniz...

sir_hawk

Alıntı yapılan: "erkan614"tavsiyem şudur ki
eğer girişlerin opto, anahtar, buton vs. gibi elemanlarsa PORTB'nin pull up dirençlerini aktif et ve butonu pin ile gnd arasına bağla, butona basıldığında mantık 0, basılı değilken pull up dolayısı ile mantık 1 olur. ;)

şu anki devrede giriş drençlerin gerilim bölücü olarak çalışıyor olabilir. [absolotely ofcourse (ingilazcam pek iyi değil)] :roll:

PortB nin pull-uplarını açamam çünkü harici sinyal 24 V dc şeklinde ve harici sistemin kontrolünde on-off olabilmekte,kendimin verebileceği bi on-off durumu söz konusu değil.24 V dc den de anlaşıldığı gibi dirençler gerilim bölücü görevinde  :lol:

Ama nedendir anlayamadım,devreyi kurup harici sinyalleri kendim verdiğimde çıkış alamıyorum  :(

erkan614

hımmm
çok kötü
opto kullanmanı tavsiye ederim tlp521 girişe 2.2k seri direnç ile 24v dc gerilimin akımını optonun sınırları içinde tutar.

ama benim akılıma diğer etkenler gelmedi kartı bulunduğu yerden çıkar bütün input dirençlerini özellikle 2.2k ların portb ile bağlantısını kes
portb pullup dirençleri aktif et (programda değişiklik yapmayı unutma) her bir pini bir tel vasıtasıyla şaseye kısa devre yap. eğer verdiğin girişler ile istediğin çıkışlar varsa nalaşılıyorki sorun input sinyalinden problem yine dewam ediosa programdan tuş gürültülerini önlemeye yönelik tedbirler al ve 2.2 k dirançlerin yerin 100nf cap koy. sorun yine devam ediyosa... birazdan devam edicem 8)

Alıntı yapılan: "sir_hawk"24 V dc den de anlaşıldığı gibi dirençler gerilim bölücü görevinde   :lol:
bu cümlenizden hiç hoşlanmadım. çünkü j1 ve j2 konnektörlerinde 24v olduğunu belirtmemişsiniz daha doğrusu hiç bir yerde 24v dc var die bir ibare göremedim eğer varsa ve ben göremediysem görme duyularımda sorun var demektir.
neyse müneccim olmadığımdan girişlerinin 24v dc olduğunu anlayamadım kusura bakma :oops:

neyse eğer sorun girişlerde değilse çıkışlardadır  :lol:
:lol: eğer ordada sorun yoksa programdadır veya pcbndedir.
en olmadı sorun sendedir bir arkadaşını cağır bide o versin 24v dcyi  :lol: belki o verince istediğin gibi çalışır :lol: (statik enerjinden etkileniyodur belki mc, yoksa kişisel ne garezi olucak)

aslında aklımdan çok daha iğneleyici yazılar geçti ama fazla reaksion göstermek olurdu ne demişler "dengesiz güç güç değildir" :lol:  :lol:

sir_hawk

Opto belki kullanılabilir ancak deneyeceğim,aklımda başka birtakım şeyler var.

İlla ki 24 V veyahut gerilim seviyesini belirtmeyi o kadarda önmli görmedim çünkü input olarak kullanılan kısımdaki direnç çiftleri ne maksat taşıdığını açıkça belli ediyor.Nese dediğiniz gibi kontrolsüz güç,güç değildir..

verdiğiniz bilgiler için tşk ederim.


Kısa süren bir seyahatten bugün döndüm yarın deneme fırsatım olur sanırım,sonucu buradan yazarım.

canbulut

sir_hawk kardeşim rica ediyorum bana isd 2560 ile mic model ve lib dosyaların verebilirmisin...

sir_hawk

devreyi hala deneyebilmiş değilim yoğunluktan dolayı,onun için herhangi bir beyanet vermek istemiyorum.


@canbulut ;
isd2560 ı kendim çizdim,simülasyonu yok sadece devre görüntüsü olması için,isiste normal " make device " yaparak kullanabilirsin ama istediğin gibi işini gööreceğini pek sanmıyorum.Biraz nette arayıp gerekli dosyaları bulamayınca böyle bir yöntem kullanmıştım  :)