16F628 ra7 pini neden çıkış olmuyor

Başlatan POWER, 20 Mayıs 2009, 00:19:58

POWER

Arkadaşlar basit bir proje için tarama yöntemiyle ısı bilgisini 7 segmend dısplay da görüntülemeye çalıştım.rb0 ucunu kesmede kullanacağım.Proğramı buna uygun olarak düzenledim.Fakat ra7 den bir türlü çıkış alamıyorum.Dolayısıyla segmentlerden bir tanesi yanmıyor.Sonuç olarak ra7 pini çıkış olmuyormu?Oluyorsa ben neyi atladım.Tüm denemelerimi isis de yaptım.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 29.04.2009                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 16F628A
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF,BODEN_OFF  
XTAL 4

TRISB=%00000001   
TRISA=%00100000  
PORTA=0
PORTB=0
'-----------------------------------------------------------------
ALL_DIGITAL = TRUE
CMCON=7      
VRCON=0
'----------------------------------------------------------------------------
Symbol Comm_Pin =  PORTB.4
Symbol Buton    =  PORTB.0

Dim    Busy      As Bit
Dim    HAM       As Word
Dim    ISI       As Word
Dim    Floatt    As Word
Dim    X         As Word
Dim    Y         As Word
Dim    SAYI      As Byte
Dim    TEMP      As Word
'-----------------------------------------------------------------------------
Basla:
GoSub SENSOROKU
GoSub EKRAN

GoTo Basla


SENSOROKU: 
           OWrite   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
           GoSub EKRAN
           ORead    Comm_Pin, 4, [Busy]    ' Busy değerini oku
'           If      Busy = 0 Then Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
           OWrite   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
           ORead    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 100    ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
GEC:
    Floatt = (ISI //100)/10
    ISI=(ISI/100)
Return



EKRAN:
       Y=ISI Dig 2
       GoSub AL1
       PORTA=SAYI
       PORTB.1=1
       PORTB.2=0
       PORTB.3=0
       DelayMS 2  
       PORTB.1=0
              
       X=ISI Dig 1
       GoSub AL
       PORTA=SAYI
       PORTB.1=0
       PORTB.2=1
       PORTB.3=0
       DelayMS 2
       PORTB.2=0
       
      
       X=ISI Dig 0
       GoSub AL
       PORTA=SAYI
       PORTB.1=0
       PORTB.2=0
       PORTB.3=1
       DelayMS 2
       PORTB.3=0
Return


AL:    LookUp X,[63,6,91,79,102,109,125,7,127,111],SAYI 
       Return

AL1:   LookUp Y,[0,6,91,79,102,109,125,7,127,111],SAYI 
       Return

 End

isis dosyası aşağıdaki linkte
http://s1.dosya.tc/TARA.rar.html
TB6BKG

Maxim

portA7 çıkış oluyor elbette ,
portA5 olmuyor sadece ,

Ziya

ISIS'ta bir sorun olabilir. ra7 bacağının 7 segmentle baplantısını keserek 628 üzerindeki renklerden kontrol edin veya bir lede bağlayıp deneyin.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

POWER

o zaman kodlardamı bir problem var acaba?ledlerle bağlantısını koparsamda 1 seviyesine gelmiyor.İsis dosyası var rica etsem deneyebilirmisiniz?
TB6BKG

Maxim

kod problemli , heralde lookup tablosu

askb

Ra7 den cıkıs alabılırsın.Sımulasyonda cıkısı goremeyebılırsın ama gercek de cıkıs oluyor.Led calıstırarak board da bı dene ıstersen.cıkıs alacaksın.Kolay gelsin.

ete

Sorunun cevabı son derece basit aslında.
Öncelikle Bit 7 olan PortA.7 nin High çıkış verebilmesi için Lookup tablsoundaki rakamların en azından bazılarının 128 veya daha büyük değerde olması gerekir. Çünki Bit7 High olması için PORTA nın değeri en azından 128 olmalıdır. Lookup tablosunda böyle bir değer yok.
Peki rakamları normal göstermek gerekirken bu hata nerden kaynaklanıyor tabiiki PORTA.5'i pin olarak atlamış olmandan kaynaklanan bir sorun bu.
PortA.5 yalnızca giriş olabildiği için bu atlamayı mecburen yapmışsın ama bu arada da rakamların dengesini bozmuşsun.
Kullandığın sistemde doğru çalışma için port A ya verilen bilgi şu işleme tabi tutulmalı;
Bilginin ilk 5 biti aynen alınmalı ancak kalan 3 bit birer bit sola kaydırılarak porta verilmelidir. Aslında 7. bit ortadan kaybolacak ancak zaten daima sıfır olduğundan sorun olmayacaktır.
İşlemin karşılığı şöyle olabilir;
BilgiA=Bilgi & %00011111   'ilk 5 biti aldık
BilgiB=Bilgi & %11100000   ' son 3 biti aldık
BilgiB=BilgiB <<1  'bir bit kaydırdık
Bilgi=BilgiA+BilgiB 'yeniden bitleri bir araya getirdik
PortA=Bilgi şeklinde verdiğin zaman yanmayan segmentin yandığını göreceksin.

>Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Ziya

Ete Hocam,

resimden görüldüğü üzere a7 bacağı gri renkli. Programın başında yönü çıkış tanımlanmış. Normalde lookup table da a7 için 1 veya 0 gibi bir bit atanmış olsa ISIS te mavi veya kırmızı görünmesi gerekirdi, halbuki yönü giriş anlamında gri gösterilmekte.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

mustafa_cmbz

ben tanımlama yapmadan direkt olarak r6'yı çıkış olarak ayarlayabiliyorum hatta led bile yakıp söndürebiliyor...fakat r7 aynı çekilde değil...5mm led bağladım tık yok sonra 3mm bağladım şeffaf ledlerden baktım çok az bir ışıldama var ama onuda dikkatli bakarsanız görebiliyorsunuz...led bozuk desem bir sürü farklı led denedim...sanırım özel bir işlevi veyahutta bir config ayarı var...

ete

Açıkladığım şekilde programın mantığı bozuk ama A7 nin gri gözükmesinin sebebi derleyici hatası olabilir.  Daha öncede bir başka arkadaşın başına gelmiş idi . Normalde çıkış ayarlanmış bir pinin gri olmaması gerekir.
Ben proton kullanmadığım için elimde derleyici yok olsa bir iki denemde ne olduğunu anlayabilirdim. Ama eminim aynı programı PBP da yazsam A7 gri gözükmeyecektir. Çünki mantık hatası görünmüyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ferdem

Resimde A7 pini gri görünmüyor, mavi görünüyor. POWER arkadaşımız çıkış alamıyorum derken lojik bir seviyesini göremiyorum demek istiyor.

Bunun sebebi de muhtemelen programdan kaynaklanıyor, yoksa A7 bacağının lojik bir olmama gibi bir durumu yok.

A7 pininin hangi durumda lojik bir olması gerekiyorsa o durumu mercek altına almak gerek, "look up" tablosunda veya kullanılan algoritmada bir eksik olsa gerek.

Bende de proton derleyici yok ama eğer sorun çözülmezse kurup deneyeceğim artık.

Maxim

tekrar etmek gerekirse problem porta5 ile ilgili lookup tablosunda ,
tabloyu hazırlarken porta5 portunun "olmadığını" unutmamak lazım ,

Bu arada ,programda ayrıca mantık hatasıda vardı ..

Ete ustanın aynen dediğini yaptım oldu ,
işte .

Device 16F628A 
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF,BODEN_OFF  
XTAL 4 

TRISB=%00000001    
TRISA=%00100000  
PORTA=0 
PORTB=0 


'----------------------------------------------------------------- 
ALL_DIGITAL = TRUE 
CMCON=7      
VRCON=0 
'---------------------------------------------------------------------------- 
Symbol Comm_Pin =  PORTB.4 
Symbol Buton    =  PORTB.0 

Dim    Busy      As Bit 
Dim    HAM       As Word 
Dim    ISI       As Word 
Dim    Floatt    As Word 
Dim    X          As Word
Dim    X0         As Word
Dim    X1         As Word
Dim    X2         As Word 
Dim    SAYI      As Byte 
Dim    TEMP      As Word 
'----------------------------------------------------------------------------- 

Dim BILGIA As Byte
Dim BILGIB As Byte
       
Basla: 
GoSub SENSOROKU 
GoSub EKRAN 

GoTo Basla 


SENSOROKU: 
           OWrite   Comm_Pin, 1, [$CC, $44]' ISI değerini oku 
Bekle: 
           ORead    Comm_Pin, 4, [Busy]    ' Busy değerini oku 
'           If      Busy = 0 Then Bekle    ' hala meşgulmü? , evet ise goto Bekle..! 
           OWrite   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku 
           ORead    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 100    ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. 
GEC: 
    Floatt = (ISI //100)/10 
    ISI=(ISI/100) 
Return 



EKRAN: 
       X=ISI Dig 2 
       GoSub AL
       GoSub PORTA5_ 
       X2=SAYI
       PORTA=X2 
       PORTB.1=1 
       PORTB.2=0 
       PORTB.3=0 
       DelayMS 1  
       PORTB.1=0 
              
       X=ISI Dig 1 
       GoSub AL 
       GoSub PORTA5_
       X1=SAYI
       PORTA=X1
       PORTB.1=0 
       PORTB.2=1 
       PORTB.3=0 
       DelayMS 1 
       PORTB.2=0 
        
      
       X=ISI Dig 0 
       GoSub AL
       GoSub PORTA5_
       X0 = SAYI
       PORTA=X0
       PORTB.1=0 
       PORTB.2=0 
       PORTB.3=1 
       DelayMS 1 
       PORTB.3=0 
Return 


AL:    LookUp X,[63,6,91,79,102,109,125,7,127,111],SAYI 
       Return 

PORTA5_:
BILGIA=SAYI & %00011111 'ilk 5 biti aldık 
BILGIB=SAYI & %11100000 ' son 3 biti aldık 
BILGIB=BILGIB <<1 'bir bit kaydırdık 
SAYI=BilgiA+BilgiB 'yeniden bitleri bir araya getirdik
Return

End



sonra birde ben porta5 i dikkate alarak yeni bir lookup tablosu hazırladım, o da oldu .
işte

Device 16F628A 
Config INTRC_OSC_NOCLKOUT,WDT_OFF,PWRTE_ON,LVP_off,MCLRE_OFF,BODEN_OFF  
XTAL 4 

TRISB=%00000001    
TRISA=%00100000  
PORTA=0 
PORTB=0 

'----------------------------------------------------------------- 
ALL_DIGITAL = TRUE 
CMCON=7      
VRCON=0 
'---------------------------------------------------------------------------- 
Symbol Comm_Pin =  PORTB.4 
Symbol Buton    =  PORTB.0 

Dim    Busy      As Bit 
Dim    HAM       As Word 
Dim    ISI       As Word 
Dim    Floatt    As Word 
Dim    X          As Word
Dim    X0         As Word
Dim    X1         As Word
Dim    X2         As Word 
Dim    SAYI      As Byte 
Dim    TEMP      As Word 
'----------------------------------------------------------------------------- 
       
Basla: 
GoSub SENSOROKU 
GoSub EKRAN 

GoTo Basla 


SENSOROKU: 
           OWrite   Comm_Pin, 1, [$CC, $44]' ISI değerini oku 
Bekle: 
           ORead    Comm_Pin, 4, [Busy]    ' Busy değerini oku 
'           If      Busy = 0 Then Bekle    ' hala meşgulmü? , evet ise goto Bekle..! 
           OWrite   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku 
           ORead    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 100    ' Div32 hassas derece hesabı için 32 bit bölme yapıyoruz. 
GEC: 
    Floatt = (ISI //100)/10 
    ISI=(ISI/100) 
Return 



EKRAN: 
       X=ISI Dig 2 
       GoSub AL
       X2=SAYI
       PORTA=X2 
       PORTB.1=1 
       PORTB.2=0 
       PORTB.3=0 
       DelayMS 1  
       PORTB.1=0 
              
       X=ISI Dig 1 
       GoSub AL 
       X1=SAYI
       PORTA=X1
       PORTB.1=0 
       PORTB.2=1 
       PORTB.3=0 
       DelayMS 1 
       PORTB.2=0 
        
      
       X=ISI Dig 0 
       GoSub AL
       X0 = SAYI
       PORTA=X0
       PORTB.1=0 
       PORTB.2=0 
       PORTB.3=1 
       DelayMS 1 
       PORTB.3=0 
Return 


AL:    LookUp X,[95,6,155,143,198,205,221,7,255,207],SAYI 
       Return 
End

POWER

Teşekkürler yanlışlarımı görmem adına iyi bir çalışma oldu.
TB6BKG