PULSIN çıkmazları.

Başlatan OG, 20 Ocak 2010, 15:43:10

OG

PULSIN ve Pulsin_Maximum için çözülmeyen saçmalıklar.


Pulsin_Maximum değeri ölçülen pals (H veya L) süresinin çalışma frekansına göre birim karşılığıdır.

Örnek,
Çalışma Frekansı 8MHz ise 1 birim = 5usn dir.
Pulsin_Maximum = 10.000 derseniz;
10.000 x 5 = 50.000 usn = 50ms olur.
Ölçülen pals süresi 50ms den fazla ise ölçülen dikkate alınmaz demektir.
Peki dikkate alınmayınca ne yapılır? Bir sonraki satıra mı geçer, tekrar mı ölçer.

Pulsin_Maximum = 10000          ' 8MHz çalışma için birim 5usn
                                ' 5usn x 10.000 = 50.000 usn = 5ms

.
.

Basla:
    myword = PulsIn PORTB.x , 1 ' bu koddan sonra
    If myword < 100 Then Basla ' buna benzer bir satır kullanırsak, (deger 100 den küçük değil)

'' pals 50ms den uzun ise buraya ulaşamaz.



Ancak,
Pulsin_Maximum = 10000          ' 8MHz çalışma için birim 5usn
                                ' 5usn x 10.000 = 50.000 usn = 5ms

.
.

Basla:
    myword = PulsIn PORTB.x , 1 ' bu koddan sonra
    'If myword < 100 Then Basla ' buna benzer bir satır kullanmazsak

'' pals 50ms den uzun ise bile buraya ulaşıyor.


Bu farkın sebebini çözemedim.

Örnek kod:
Device 12F683
Config FCMEN_OFF, IESO_OFF, BOD_ON, CPD_OFF, CP_ON, MCLRE_OFF, PWRTE_ON, WDT_OFF, INTRC_OSC_NOCLKOUT  

   Declare Xtal 8
   All_Digital= TRUE       


''' PULSIN komutu 8MHz çalışmada her birim için 5us değer alır
''' Uygulanan clock frekansı 10 Hz, Period (T) = 100ms , 1/2 period = 50ms = 50000usn
''' 50ms yani 50000 usn sınırı için 10000 olması gereken değer, küçük hata ile aşağıdaki gibi.

   Pulsin_Maximum = 9998    ' PULSIN komutunu aşamadığı sınır değer, 5us lik hata ile.
''' 9998 x 5us = 49990 us = 49,990ms
'   Pulsin_Maximum = 9999    ' PULSIN komutunu aştığı sınır değer, 5us lik hata ile.
''' 9999 x 5us = 49995 us = 49,995ms
                                            
    
    OSCCON = %01110111        ' 8mhZ
    OPTION_REG = %10001111 
    INTCON=%00000000    
    ANSEL=0
    ADCON0=0
    CMCON0 = 7
    
    TRISIO=%00111011
    GPIO=0

    Dim mybyte As Byte
    Dim myword As Word
    
    Symbol Din = GPIO.0     

DelayMS 100


Basla:
    myword = PulsIn Din , 1
    If myword < 100 Then Basla         ''' PULS 10ms den küçükse Başa dön, 
                                       ''' bu satır olmazsa Pulsin_Maximum işe yaramıyor

'    ''' 2000 x 5 = 10000usn = 10ms, yani 10Hz için çok küçük değer, bu sebeple başa dönmez.

'''****   Pulsin_Maximum = 9998 İçin ****''''
'''   If myword < 100 Then Basla   gibi bir satır varsa Komut buraya ulaşamaz
'''   If myword < 100 Then Basla   gibi bir satır yoksa Komut buraya ulaşır


'''****   Pulsin_Maximum = 9999 İçin ****''''
'''   Komut buraya ulaşır, çünkü ölçülen pals genişliği bu sınır değerden küçüktür   


''' Komutun ulaştığını göster 
    GPIO.2 = 1
    DelayMS 200
    GPIO.2 = 0
    DelayMS 200

GoTo Basla




kod ve simule dosyaları.
http://hotfile.com/dl/25026204/564aff8/pulsin.rar.html
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

alayli

Alıntı yapılan: "OG"

Çalışma Frekansı 8MHz ise 1 birim = 5usn dir.
Pulsin_Maximum = 10.000 derseniz;
10.000 x 5 = 50.000 usn = 50ms olur.
Ölçülen pals süresi 50ms den fazla ise ölçülen dikkate alınmaz demektir.
Peki dikkate alınmayınca ne yapılır? Bir sonraki satıra mı geçer, tekrar mı ölçer.

Pulsin maksimum deklarasyonunun amacını yanlış yorumluyorsunuz. Bu deklarasyon hiç bir zaman tekrar ölçüm yaptırmaz. Bir sonraki satıra geçer, tekrar ölçmez. Değişken değeri de 0 ile döner.

Deklarasyon yapılmadığında ve Din pininde bir puls oluşmadığı, yani 65535 birim zaman boyunca lojik 0 veya lojik 1 de kaldığı durumda, program pulsin komut satırında, 65535 birim zaman bekler sonra "sonraki komut satırı" na geçer. Çünkü Pulsin komutunun içsel sayacı 16 bittir. Sizin örneğinizde program 65535 x 5 = 327.675 ms gibi bir süre ilk satırda oyalanacak demektir. Zaman kritik bir iş yapıyor olsaydınız ve gelebilecek palsin en fazla 5ms uzunluğunda olabileceğini bilseydiniz, her defasında burada 327 küsür ms oyalanmak yersiz olurdu. Pulsin max = 1001  deklarasyonu ile bu satırda en fazla 5005 us oyalanıp sonra alt satıra geçmeyi garantilemiş olurdunuz.
Anca kazganmiş itmiş ilimiz törümüz erti. Türk Oguz begleri budun esiding. Üze tengri basmasar, asra yir telinmeser, Türk budun, ilingin törüngin kim artati? (udaci erti)

OG

Problem de o zaten, ya benim bir hatam ya da isis yanlış yorumlama sebep oluyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.