Led display tarama ve Hserout kullanımı

Başlatan dyonizos, 17 Temmuz 2012, 08:06:29

dyonizos

selam arkadaşlar
aşağıdaki kodda led display de tarama yolu ile saydırma yapabiliyorum ancak saydırdıgım sayıyı USART ile diğer pic e göndermek istediğimde tarama kısmınının içinde gecikme yaptığı için olsa gerek displaydeki sayılar sapıtıyor. led display i tarama yaparken araya hiçbirşey koyamıyormuyuz? yada nasıl olmalı?


Device = 16F876A
        Config HS_OSC,WDT_OFF,PWRTE_OFF,BODEN_OFF,LVP_OFF,DEBUG_OFF,CP_ALL
        XTAL = 20
        ALL_DIGITAL = TRUE	' Set PORTA and PORTE to all digital
        Declare HSERIAL_BAUD=9600 
        Declare HSERIAL_BRGH=1
        Declare HSERIAL_CLEAR=On
        HSERIAL_RCSTA = 144 ; Enable continuous receive
        HSERIAL_TXSTA = 36  ; Enable transmit, BRGH = 1
        HSERIAL_SPBRG = 129 ; Baud Rate Generator Value

    On_Hardware_Interrupt GoTo PulseCount 'Hardware Gnterrupt OluGunca INT ye git            
        Symbol INTF = INTCON.1      'RB0 KESME BARAĞI
        Symbol INTE = INTCON.4      'RB0 KESME YETKG
        Symbol GIE = INTCON.7       'GLOBAL INT. YETKI
        GIE=0                       'tüm kesmeler kapalı
        INTE=1                      'RB0 Kesmesi aktif
        GIE=1                       'Aktif O an Tüm kesmelere Yetki ver       

        
        Dim x As Byte
        Dim say As Word
        Dim sira As Byte
        Dim birler As Byte
        Dim onlar As Byte
        Dim yuzler As Byte
        Dim binler As Byte
        Dim SAYI As Word
         
         
TRISA=%00000000
TRISB=%00000001
TRISC=%00000000

PORTA=0
PORTB=0
PORTC=0

say=0
basla:


say=say+1

x=say Dig 0 :GoSub  AL:birler=SAYI
x=say Dig 1 :GoSub AL:onlar=SAYI
x=say Dig 2 :GoSub AL:yuzler=SAYI
x=say Dig 3 :GoSub AL:binler=SAYI

sira=SIRA+1:If sira>3 Then sira=0  

If sira=0 Then 
PORTA.3=0 
PORTC=birler  
PORTA.0=1	
EndIf

 If sira=1 Then
PORTA.0=0
PORTC=onlar
PORTA.1=1
EndIf

 If sira=2 Then
PORTA.1=0
PORTC=yuzler
PORTC.7=1
PORTA.2=1
EndIf

 If sira=3 Then
PORTA.2=0
PORTC=binler
PORTA.3=1
EndIf 


'HSEROUT [Dec say]


GoTo basla

AL:    LookUp  x,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :Return
       
PulseCount:                  
       Context SAVE  
Inc say
INTF=0  
       Context Restore      
Stop

Logan

#1
Display taramasını kesmeli sayıcının içine yerleştir. Sayıcıyı tarama frekansına kur (100-200 ). Kendi kendine göstersin dursun. Akmaz kokmaz kimseye bulaşmaz mis gibi çalışır.

Düzeltme: Yazdığın programa sonradan baktım. Basic'te bulunan DIG komutundan nefret ederim. Mümkünse kendin bir program yaz veya netten daha kısa sürede çalışan muadilini bul.
İmza.

OG

Dikkatli inceleyemedim uykusuzluktan ama HSEROUT PORTC.6 ve 7 yi ilgilendirir. Aynı port ile displayleri sürmüyormusun. Karışır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

dyonizos

Alıntı yapılan: Logan - 17 Temmuz 2012, 08:21:48
Display taramasını kesmeli sayıcının içine yerleştir. Sayıcıyı tarama frekansına kur (100-200 ). Kendi kendine göstersin dursun. Akmaz kokmaz kimseye bulaşmaz mis gibi çalışır.
bunu deniycem umarım yapabilirim.

Alıntı yapılan: OG - 17 Temmuz 2012, 08:26:00
Dikkatli inceleyemedim uykusuzluktan ama HSEROUT PORTC.6 ve 7 yi ilgilendirir. Aynı port ile displayleri sürmüyormusun. Karışır.
evet bende şimdi farkettim B6-B7 ile karıştırmışım USART uçlarını. Ancak şu an için başka portu kullanamıyorum.


dyonizos

serout kullanımından şimdilik vazgeçtim ne yaptıysam program yavaşlıyor seroutta.
Aşağıdaki kodlarda saniyede bir sayması gerekmezmi sayıcının ?
saniyeden daha yavaş sayıyor.

TMR0 kesmesi ile kesme içinde sadece tarama yaptırıyorum ve ana program içinde DelayMS 1000 var anca yavaş ilerliyor.

Device = 16F876A
        Config HS_OSC,WDT_OFF,PWRTE_OFF,BODEN_OFF,LVP_OFF,DEBUG_OFF,CP_ALL
        XTAL = 20
        ALL_DIGITAL = TRUE	' Set PORTA and PORTE to all digital


    On_Hardware_Interrupt GoTo PulseCount 'Hardware Gnterrupt OluGunca INT ye git   
    OPTION_REG=%00000011         
        Symbol INTF = INTCON.1      'RB0 KESME BARAĞI
        Symbol INTE = INTCON.4      'RB0 KESME YETKG
        Symbol GIE = INTCON.7       'GLOBAL INT. YETKI
        INTCON.5=1
        GIE=0                       'tüm kesmeler kapalı
        INTE=1                      'RB0 Kesmesi aktif
        GIE=1                       'Aktif O an Tüm kesmelere Yetki ver       
        TMR0=200
        
        Dim x As Byte
        Dim say As Word
        Dim say2 As Word
        Dim sira As Byte
        Dim birler As Byte
        Dim onlar As Byte
        Dim yuzler As Byte
        Dim binler As Byte
        Dim SAYI As Word
         
         
TRISA=%00000000
TRISB=%00000001
TRISC=%00000000

PORTA=0
PORTB=0
PORTC=0

say=0
basla:

DelayMS 1000
say=say+1

x=say Dig 0 :GoSub  AL:birler=SAYI
x=say Dig 1 :GoSub AL:onlar=SAYI
x=say Dig 2 :GoSub AL:yuzler=SAYI
x=say Dig 3 :GoSub AL:binler=SAYI


GoTo basla

AL:    LookUp  x,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :Return
       
PulseCount:                  
       Context SAVE  
Inc say2
INTF=0 

sira =sira + 1
If sira>3 Then sira=0  
Select Case sira
Case 0
PORTA.3=0 
PORTC=birler  
PORTA.0=1	

Case 1
PORTA.0=0
PORTC=onlar
PORTA.1=1

Case 2
PORTA.1=0
PORTC=yuzler
PORTC.7=1
PORTA.2=1

Case 3
PORTA.2=0
PORTC=binler
PORTA.3=1

EndSelect
 TMR0=200
INTCON.2=0 

       Context Restore      
Stop