sayma frekansı

Başlatan forsa1975, 27 Aralık 2006, 19:34:22

forsa1975

Arkadaşlar PBP portB.0 kesmesi ile bir sayıcı yaptım. Testlerde sayıcının 1.18 khz ye kadar olan pulslarda hatasız okuma yaptığı fakat daha yüksek frekansta gönderilen pulsları kaçırdığı görüldü.(1000 pulse gönderildiğinde 10-20 pulse eksik okuyor)  10 Mhz kristal ile denemeler yapıldı. Giriş frekansını daha yüksek yapabilmem için tavsiyeleriniz ne olur. Asm bilgim yok o yuzden PBP kullanıyorum. Elimde 20 Mhz kristal olmadığı çn 20 Mhz ile test edemedim.

16f628 de A4.TOCKI ile timer0 kullanamadım. Bir çok deneme yaptığım halde çalışmadı. OPTION_REG ve INTCON registerlerini doğru ayarladığımdan eminim.
OPTION_REG=%00111000'bölme oranı 1/1 VDT seçili, clock porta.4
INTCON=%10100000' tmr0 taşması aktif kesmeler açık pullup pasif

muser53

giriş frekansını böl.
frekans bölücü böl.
daha sonra program içerisinde böldüğün frekansı aynı kat sayı ile çarp oldu bitti.

mytap

Kesme ile kaçırıyorsan, Count komutu ile bir deneme yap

Count portb.0, veri, 1000  ; 1 saniye içerisinde portb.0 pinindeki lojik değişiklikleri algılar,sayar ve veri adlı değişkenin içine atar. Ben Proton kullandığım için picbasicde sanırım komut sırası bu şekildeydi.

Ölçüm için 1000ms yi beklemek yerine 10ms bekletip sonra bu veri değişkenini 100 ile çarparak ölçüm zamanını kısaltabiliriz. 20mhz cristal ile 100khz lik bir sinyali şaşmadan saydırmıştım.
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

forsa1975

Alıntı yapılan: "muser53"giriş frekansını böl.
frekans bölücü böl.
daha sonra program içerisinde böldüğün frekansı aynı kat sayı ile çarp oldu bitti.

frekansı böldüğümde örneğin 10/10=1  fakat buradaki 1253 gibi bir sayı olmayacak ekranda. 1250 ,  1260 diye gidecek. sonuçta hassasiyet istediğim gibi olmuyor.

Count pin, süre, değişken

bu komut programın akışını süre kadar durduruyor, bu programda 7 segment tarama yapıldığı için bu tip bekletmeler parlamalara sebep oluyor.  Sanırım frekansmetre gibi düşündünüz .

   İlginiz için çok  teşekkür ediyorum.

mytap

Sistemin tam olarak ne yaptığını anlayamadım. Birazdaha aydınlatırsanız yardımcı olunacaktır sanırım. Ben Count komudunu önerirken frekans saydırdığınızı var saymıştım ki öyle görünüyor. Ölçümlerinizde bir zaman sabitini tutup bu zamanda geçen pulsları saydırmıyormusunuz?  Burda frekans nedir? Nasıl bir kaynaktır?  Şimdi pulsları sadece saydırıp tarama metoduyla displaylardamı yazdırıyorsunuz? Sistem sadece bunumu yapıyor?
-------------------------------------------------------- hayırlı günler, iyi çalışmalar..  --------------------------------------------------------

forsa1975

Bir sayıcı düşünün iki girişli. Aynı anda iki girişi okuyup gerektiğinde fark alabilecek gerektiğnde ise toplam yapacak veya encoder okuyabilecek bir sayıcı düşünün. Biraz önce portb4-7 kesmesini denedim. B0 kesmesine göre çok daha yavaş kalıyor. TMR0 A.4 portu ile kullanabilirsem onun hızı B0 kesmesinin hızından yavaş olmasa gerek.

@ DEVICE pic16F876
@ DEVICE pic16F876, WDT_on 
@ DEVICE pic16F876, PWRT_ON 

TRISA=%11111111
TRISB=%10000111
TRISC=%00000000 

ON INTERRUPT GoTo SAYDIR
OPTION_REG=%00110111 
INTCON=%10100000 
 ......


disable
 SAYDIR:'  *****************************

 sayi=sayi+1

 INTCON.2=0

 resume'*******************************
enable


TMR0 kesmesini kullanamıyorum.

forsa1975

ON INTERRUPT GoTo SAYDIR
'OPTION_REG=%11101000 
OPTION_REG.0=0  'PS0  frekans bölücü,0
OPTION_REG.1=0  'PS1  frekans bölücü,1
OPTION_REG.2=0  'PS2 frekans bölücü,2
OPTION_REG.3=1  ' PSA    1 VDT  0 TMR0
OPTION_REG.4=1  'TOSE TOCKI tetiklemesi  1 Düşen kenar 0 Yükselen kenar 
OPTION_REG.5=1  'T0CS Clock seçim biti  1 TOCKI pini   0 Dahili osilatör
OPTION_REG.6=1  ' INTEDG    B0 kesme yükselen kenar 1  düşen kenar 0 
OPTION_REG.7=1  ' RBPU    1 Bportu pullup aktif  0 Pullup pasif 
'INTCON=%11110000
INTCON.0=0 ' B portu değişim kesme biti 
INTCON.1=0 ' B.0 kesme biti
INTCON.2=0 ' TMR 0 kesme biti
INTCON.3=0 ' PORTB Değişim kesme enable biti 
INTCON.4=1 ' PORTB.0 kesme enable biti 
INTCON.5=1 'TMR0 kesme enable biti 
INTCON.6=1 ' Çevresel kesmeleri enable biti
INTCON.7=1 ' Bütün kesmeleri enable biti

.............


disable
 SAYDIR:'  *****************************

if INTCON.2 = 1 then 
INTCON.2 = 0
sayi=sayi-1
endif 

if INTCON.1 = 1 then 
INTCON.1 = 0 
sayi=sayi+1
endif

resume'*******************************
enable


Sonunda oldu. İki kesmeyide birlikte kullanıyorum. İkiside 1,27 khz frekansta aynı anda sayıyor.

Fakat elimde 20 Mhz kristal olmadığı için 20 mhz de okuma frekansı ne olur bilemiyorum.