PicBasic ile belirsiz bir zamanda frekans ölçümü

Başlatan ftsahin, 30 Temmuz 2004, 14:52:20

ftsahin

Arkadaşlar Picbasic Pro'da frekans ölçümü yapmam gerekiyor. Ama ölçüm süresi değişebiliyor. 0,2 saniye ile 3 saniye arasında Pic'in bir bacağına gelen darbeleri saydırmam gerekiyor. Picbasic'de frekans ölçümü bildiğim kadarıyla "Count porta.0,1000,frekans" gibi bir komutla yapılabiliyor. Ben A Portunun 0 nolu ucu High olduğu zaman 1 nolu uca gelen darbeleri saymaya başlamasını ve 0 nolu uç Low olana kadar devam etmesini istiyorum. Bunun imkanı var mı? Makine dilinde yapılabilir belki ama asm bilmiyorum.
Bu konuda ustaların yardımını bekliyorum.

baba

Ne kullanacaksın bilmiyorum ama RA4/TOCKI bacağını kullanarak TMR0 yazacını dış kaynaktan besleyerek artırabilir,önbölücüsünü (prescaler) de kullanabilirsin.Bu konuda uygulama örneklerini sıklıkölçer (frekansmetre) devrelerinde görebilirsin.Arama yaparsan Microchip'in uygulama belgelerinden (application notes) de yararlanabilirsin.
ÖĞRENDİKÇE    CAHİLLİĞİM       ARTIYOR.

Veli B.

Frekans değerlerin nedir.Bir de 200ms  ile 3 s arasında saymam gerekiyor demişsin.Anlamadım. Neden?5 Hz in altında saymamı yapman gerekiyor.Pbp ile  countu kullanarak 20 mhz için 125 khz e kadar saydırabilirmişsin ama uygulamam olmadı.Biraz daha açıklayabilirsen iyi olur.

ftsahin

Aslında benim yapmak istediğim iki ayrı frekans kaynağının birbirine oranını bulmak. Biri minimum 5 saniyede 1 pulse, diğeri ise ortalama saniyede 300 pulse gönderiyor. Bunların birbirine oranını bulmak istiyorum. Bunun için düşük frekanslı darbenin 1 olduğu durumda diğerinin darbe sayısını ölçerek sonucu küçüğün frekans değerine bölerek orantıyı bulmayı düşünüyorum. Yalnız sadece orantı değil her iki frekans değeri de lazım.  Bu yüzden bana büyük değerli frekansın saniyedeki darbe sayısı değil, küçük değerli frekansın 1 olduğu zaman dilimi içindeki darbe sayısı lazım.

Erkan Gench

sinyaller kare dalga ise ve ttl uyumlu ise her iki sinyali bir ve kapısının girişine verirsiniz böylece çıkıştan istediğiniz sinyal elde edilir. kare dalga değil ise girişlere birer schmitt trigger takarsınız. Değerler ttl uyumlu değilse önce mesela bir opampla uygunlaştırılmalı.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

ftsahin

Ve kapısı yöntemi aslında en basit ve kullanışlı yöntem ama bu durumda birden fazla high konumunda ölçme yapılabilir. Yani ölçüm bitiminde sinyal kesilmiyor 0 ve 1 sinyalleri devam ediyor. 1'den 0'a geçişte ölçümü kesebilirsek işlem tamam olur.

    1            0              1             0
|¯¯¯¯¯¯¯|________|¯¯¯¯¯¯¯|________|  = ~2 Hz/sn

|||||||||||||||||||||||||||||||||||||||||||||||| = ~300 Hz/sn

|---------|  Ölçme süresi bu değerler için bu aralık kadar.  Bu aralık düşük sinyalin darbe uzunluğuna göre devamlı değişecek. Ve yüksek frekanslı diğer sinyalin frekans ölçme süresi de devamlı değişecek. Sinyal sürekli olduğu için ve kapısı kullanırsak sonuç şöyle olacaktır :

|||||||||||               ||||||||||||               |||||||||||||

    1                            2                             3
               
1'den sonraki sinyali tahmini bir süre için kesebilirsek sorun çözülür ama bu durumda sinyali kesme problemi başlıyor. Her halukarda frekans ölçme ve ölçümü sonlandırma işini manuel olarak yapmam gerekiyor. Bu durumda Assembly kullanmak kaçınılmaz olacak heralde.

Erkan Gench

aslında ve kapısı hiçte akıllıca bir yöntem değildi. yani ve işlemi yapacaksan git işlemcinin içinde yap değilmi koca bilgisayar sistemi orada duruyor sen kalkmışsın dışarıdan kapı koyuyorsun :)

neyse ben sizin ne yapmaya çalıştığınızı daha yeni anladım.

yapacağınız şu timerlardan birini belirli bir süreye ayarlarsınız (mesela bir saniye) daha sonra sinyalleri bağladığınız bacakları sürekli olarak kontrol edersiniz. bu bacaklardan herhangi biri bir olduğunda bir bayrağı set edersiniz. kontrola devam ettiğinizde aynı hat sıfır olmuş ise ve bayrak set ise o hatta ait bir değişkeni 1 arttırırsınız ve bayrağı reset edersiniz. bu işlemi iki hat için aynı anda yaparsınız ve timer interruptu geldiğinde oluşan değerleri birbirine bölerek sonucu bulursunuz.

benden bu kadar şimdi basic'le bu programı nasıl yazacağınız konusunda arkadaşlar yardımcı olsun çünkü ben C kullanıyorum basic'ten pek anlamam.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

ftsahin

Programlama dilinden bağımsız olarak bu yöntem her dilde kullanılabilir. Proteusta basit bir deneme yaptım. Picbasicpro'nun hızı bu işlem için yetersiz galiba. Yine de Pic üzerinde daha iyi çalışabilir.
Teşekkürler.