Proton 'da Timer ile Süre Ölçme

Başlatan Firateem, 27 Mayıs 2013, 18:22:42

Firateem

Merhaba degerli arkadaşlar.

1ms ile 100ms gibi bir degişken süreyi Timer ile ölçmek istiyorum. Bu süre herhangi bir portun herhangi bir pininden gelebilir.Mesela Portc.0 a baglı bir girişten gelen kare dalganın lojik 1 süresini ölçmek istiyorum.

Device 16F877
Config WDT_OFF,PWRTE_ON,BODEN_OFF ,LVP_OFF ,CP_OFF,XT_OSC
Xtal = 4

PortB_Pullups = Off

'**********TİMER1 AYARLAMA************
INTCON = %11000000          ' Tüm kesmelere izin ver
T1CON = %00010101           ' Timer1 Açık,Dahili Osilatör Seçili, ÖnÖlçekleyici 1:2
PIE1.0 = 1                  ' TMR1 Aşımı Kesme Oluşturma Aktif Etme Biti
PIR1.0 = 0                  ' TMR1 Aşım Kesme Bayrağı

'************* KESME AYARLAMA*****************
On Interrupt GoTo KESME      ' Kesme oluştuğundan KESME bloğuna dallan
TMR1H = $00                  ' 8Mhz de 50ms kesmeyi 1:2 önçekleyici ile oluşturmak için
TMR1L = $00                  ' TMR1 yazmaçlarına yüklenmesi gereken değer                

'************* PORT TANIMLAMALARI *****************
TRISD = %00000000
TRISC = %00000001
TRISB = %11111111
TRISA = %11111111
PORTD = 0
PORTC = 0

'************* DEGİŞKEN TANIMLAMALARI *****************
Dim SAYAC   As   Word

'********* LCD TANIMLAMA *********************
Declare LCD_DTPin PORTD.4     ' Data pinleri D4,D5,D6,D7
Declare LCD_RSPin PORTD.2     ' RS pini D2
Declare LCD_ENPin PORTD.3     ' E pini D3
Declare LCD_Interface 4       ' 4 bitlik haberleşme arayuzu kullanılmıştır
Declare LCD_Lines 4

'********* DEGİŞKEN İLKDEGER TANIMLAMALARI *********************
SAYAC= $00 

Print $fe,1
Ana:
    SAYAC=0
            Repeat
            nop
            Until PORTC.0==1 
               
        T1CON.0=1  ' TMR1 aktif
            Repeat
            nop
            Until PORTC.0==0
        T1CON.0=0  ' TMR1 pasif
        SAYAC=SAYAC*(TMR1H * 255)
        SAYAC=SAYAC + TMR1L
    Print $fe,$c0,Dec4 SAYAC 
    DelayMS 100   
    GoTo Ana
Disable

'********* KESME ALT PROGRAMI *********************
KESME:
      SAYAC=SAYAC+1  	       
      
TMR1H = $00     
TMR1L = $00     
PIR1.0 = 0
         Resume
         Enable

End


Bu şekilde bir şeyler yapmaya çalıştım ama degişik degişik degerler gösteriyor LCD. Yardımlarınızı en  kısa sürede bekliyorum arkadaşlar. Teşekkürler

Firateem

Arkadaşlar yokmu bir bilen lütfen yardım edin

OG

PulseIn  komutunu incelermisin

Dim deger as word  '' word boyutunda

deger = PulseIn PORTB.0, 1

PORTB.0  a gelecek High pulsının süresini alır,
Bu komuttan önce port Low da olmalı

4MHz de çalışıyorsan deger ile elde ettiğin sayıyı 10us ile çarpacaksın

Yani
deger = 58 ise sonuç 580usn  gibi

20mHz ile çalışıyorsan deger ile elde ettiğin sayıyı 2us ile çarpacaksın

'''''

LOW süresini ölçeceksen

deger = PulseIn PORTB.0, 0

olmalı,
ölçüm öncesi port konumu H olmalı.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Firateem

Çok teşekkür ederim kardeşim, bu dedigini bir deneyip sonucu sizlerle paylaşırım