595 ile 7 digit led sürmede hata

Başlatan POWER, 22 Kasım 2009, 22:18:25

POWER


TRISA=%00100000 
TRISB=%11100000   
PORTA=0
PORTB=0
'-------------------------------------------------------------------------------
@ 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 
'-------------------------------------------------------------------------------
OPTION_REG.7=0     'pull-up dirençleri aktif  
CMCON=7            'komparatörler iptal 
'-------------------------------------------------------------------------------
HAM         VAR	WORD        ' Sensör HAM okuma değeri
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
X           VAR word 
ISI         VAR byte
'-------------------------------------------------------------------------------
SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1
symbol  ST= PORTB.2

SYMBOL  ASAGI =PORTB.7 
SYMBOL  YUKARI=PORTB.6 
''------------------------------------------------------------------------------
CLEAR  'tüm değişkenler sıfırlandı

BASLA: 
       GOSUB EKRAN

If YUKARI=0 THEN
   ISI=ISI+1
   pause 200
EndIf

If ASAGI=0  Then  
   ISI=ISI-1
   pause 200
EndIf
    GOTO BASLA

      
TEKRAR:
       SHIFTOUT DTA,CLK,1,[SAYI] 
       RETURN
EKRAN:
       X=10
       GOSUB AL
       GOSUB TEKRAR
       
       X=11
       GOSUB AL
       GOSUB TEKRAR
       
       x=(ISI DIG 0)
       GOSUB AL
       GOSUB TEKRAR
       
       x=(ISI DIG 1)
       GOSUB AL
       GOSUB TEKRAR

       x=(ISI DIG 2)                
       GOSUB AL
       GOSUB TEKRAR

      
''-----------------------------BU KISIM-----------------------------------------
       IF SIGN_BITI = NEGAT_ISI THEN 
         SAYI=64 
         else
         SAYI=0
         endif
       GOSUB TEKRAR
       SAYI=0
       GOSUB TEKRAR 
''---------------------------BU KISIM-------------------------------------------
       GOTO STYAZ
       RETURN       

STYAZ:      
        HIGH st
        PAUSEUS 2
        LOW st
        RETURN         
       
AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI
       RETURN      
         
arkadaşlar işin mantığını tam anlamıyla anlamak adına biraz araştırma yaptım.örnek kodlardan,söylenenlerden bu proğramı bir araya getirdim.
proğram bu hali ile normal fakat il gönderdiğim  derece işaretinin sıfırı görünmüyor neden?edindiğim bilgiye göre ilk gönderilen bilgi en sağdan başlaması gerekiyordu.ikincisi ise -----bu kısım----- diye belirttiğim kısımı iptal ettiğimde ekranda daha karışık hal alıyor bunuda anlayamadım.kısacası bu işin mantığını anlatabilirmisiniz?şimdiden teşekkürler.
tüm dosyalar linkte bakmak isteyenler için
http://ul.to/wa0asm
TB6BKG

ete

Power,
Önce bir say bakalım kaç digit var?, toplam 6 adet digit mevcut ve sende tam tamına 6 defa Gosub Tekrar komutunu kullanman gerek. Şimdi programda say bakalım kaç defa kullanmışsın? Tabiiki 7 adet. Bu birinci hatan.

''-----------------------------BU KISIM-----------------------------------------
       IF SIGN_BITI = NEGAT_ISI THEN 
         SAYI=64 
         else
         SAYI=0
       endif
       GOSUB TEKRAR
'       SAYI=0
'       GOSUB TEKRAR

altta yer alan Sayı=0 ve ardından gelen GOSUB TEKRAR fazladan yazılmış
Her verdiğin fazla aktarma komutu bir öncekini iteleyeceği için sende ekranda görmek istediklerini göremiyorsun.

İkinci hata ise derece işarti önce verilir sonra "C" işareti verilir. Sende buda ters duruyor. Dolayısıyla ,
EKRAN:
       X=11  'sende burası 10 idi ve 11 olması gerek
       GOSUB AL
       GOSUB TEKRAR
       
       X=10   'sende burası 11 idi ve 10 olması gerek
       GOSUB AL
       GOSUB TEKRAR

birinci sıradaki X değeri 10 değil 11 olacak ikincisi 10 olacaktır.
Bu değişiklikleri yap program düzelecektir.

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

POWER

hocam cevap için teşekkürler,derece işaretlerinde bir karışıklık var galiba.Bendeki proğramda, 10=derecenin küçük sıfırını, 11= ise C işaretini veriyor.Bu çok önemli değil dediğim gibi ben işin mantığını öğrenmeye çalışıyorum.verdiğiniz bilgiler ışığında istediğim gibi yazdırabiliyorum hocam.
sayı byte tipinde tanımladım.ekranda 255C vede küçük sıfır yazdırmak istiyorum.fakat 6 adet dısplay olduğu için en soldakinin bu ekranda sönük kalmasını istiyorum.bunun için ayrı lookup tablosumu gerekiyor?yada bunu mantığını nasıl kurabilirim?
TB6BKG

ete

Yadırılacak sayı olarak sıfır gönderirsen ekran kapalı kalır. Yada hangi digite sıfır yollarsan o display kapalı kalır.
Dolayısıyla kapalı kalmasını istediğin displaye sıfır yolla olsun bitsin.

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

POWER

bir türlü 6.dısplayı söndüremedim hocam.örnek bir kod yazabilirmisin?
TB6BKG

ete

Acaba 1. displayde eksi işareti,
2. ve 3. cü displayde sıcaklık (2 digit)
4. dispalyde derece işareti
5. displayde "C" işareti
6 display kapalı şeklindemi istiyorsun.
Açıklamandan tam olarak anlaşılamıyor ama ben böyle anladım. Şayet cevabın evet ise kod aşağıdadır.
ETE

EKRAN:
       SAYI=0
       GOSUB TEKRAR
       
       X=11
       GOSUB AL
       GOSUB TEKRAR
       
       X=10
       GOSUB AL
       GOSUB TEKRAR
       
       x=(ISI DIG 0)
       GOSUB AL
       GOSUB TEKRAR
       
       x=(ISI DIG 1)
       GOSUB AL
       GOSUB TEKRAR

'       x=(ISI DIG 2)                
'       GOSUB AL
'       GOSUB TEKRAR

      SIGN_BITI=1
''-----------------------------BU KISIM-----------------------------------------
       IF SIGN_BITI = NEGAT_ISI THEN 
         SAYI=64 
         else
         SAYI=0
       endif
       GOSUB TEKRAR
'       SAYI=0
'       GOSUB TEKRAR 
''---------------------------BU KISIM-------------------------------------------
       GOTO STYAZ
       RETURN    
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

POWER

teşekkürler hocam söylediğiniz gibi yapmak istiyordum.
TB6BKG