pic ile frekans ölçümü

Başlatan spartacus, 02 Ocak 2006, 20:39:41

spartacus

arkadaşlar pic ve lcd kullanarak frekans ölçümünün nasıl yapıldığı hakkında bilgisi olan varsa paylaşmalarını rica ediyorum. yapmak istediğim şey bir otomobil motorunun devir sayısını ölçmek ve lcd de yazdırmak. yardımlarınız için şimdiden teşekkürler.  :idea:

ete

İşin temeli geri planda çalışan Timer lardan birini kullanarak belirli bir süre gelen palsleri saymaktan geçer.

Daha geniş açıklamak gerekir ise,
bu iş için en uygun piclerden biri olan 16F628'i kullan. TMR1 16 bit çalışmaktadır.
Mümkünse assembly de 10 veya 100 ms lik bir bekleme bölümü yaz. Aslında gecikme süresine şu şekilde karar ver;
1000 ms=1 sn dir.
1 ms de frekans/1000 değerini ölçersin. Örnek 100.000 Hz lik frekansda 1ms de 100 değerini sayarsın.

10 ms de frekans/100 değerini ölçersin. Örnek 100.000 Hz lik frekansda 10 ms de 1.000 değerini sayarsın.

100 ms de frekans/10 değerini ölçersin. Örnek 100.000 Hz lik frekansda 100 ms de 10.000 değerini sayarsın.

sayacağın frekans aralığına göre kendine bir değer seçersin.

Bu hassas bir zaman ayarı yapmak için gerekli.
TMR1i dışarıdan pals alacak şekilde ayarla.
TMR1'i sıfırla ve ardından aktif yap.
hemen gecikmeni devreye al.
gecikme süresi sonunda TMR1 değerini bir değişkene ver.
TMR1 durdur ve aktivasyonu kaldır. SOnuçta elinde ölçülmüş bir frekans değeri olacaktır. Geriye bu değeri örnekleme zamanına göre işleyip ekrana değer vermekten başka bir şey kalmıyor.
Örnek istersen ders notlarım arasında olması gerekli. Aşağıdaki linkte yer alan DERS-10 notları arasında Frekans-Roleli isimli programa bakabilirsin.

http://rapidshare.de/files/5932453/BASIC-DERS-6-10.rar.html

Kolay Gelsin
ETE


ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

spartacus

yardımın için teşekkürler ete.
bekleme bölümünün asm ile yazılmasının sebebi nedir anlayamadım.
bir de genel olarak herkese şunu sormak isitiyorum :

ben bu pic programlama olayı ile yeni haşır neşir olduğum için ete,xnchx... ve ismini sayamadığım diğer arkadaşların ne kadar süredir bu programlama işi ile uğraştığını (tecrübe) merak ediyorum.

OG

Alıntı Yapbekleme bölümünün asm ile yazılmasının sebebi nedir anlayamadım.
Sürenin hassas olması için zannediyorum. asm dışındaki dillerde yazacağın kodlar asm'ye cevrilirken araya istenmeyen bir kod eklese zaman gecikmesi olur ve frekans değerini olduğundan daha fazla elde edersiniz. ete hocam daha doğrusunu açıklayacaktır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Bu soruyu örnek vererek açıklayayım istersen.

Basic de bekle komutu PAUSE dur. PAUSE 100 dediğin zaman program orada 100 ms bekler teorik olarak. Ancak gerçekte bu o kadar hassas değildir. Zira bu kısmı derlediğin zaman (ASM ye çevirdiğin zaman) bir sürü komutun devreye girdiğini görürsün. 100 ms beklemesi gereken yerde 101 ms bekleyebilir program ve bu o kadar önemsenmez.
Beklemenin neden fazla olabileceğinin açıklaması ise her bir asm komutunun genelde 1 komut saykıl'ı kadar süre aldığı bilinmektedir. Bu o komutun icra edilme süresidir.  Bazıları 2 saykıl (galiba Türkçesi çevirim olacak) tutmaktadır. Dolayısıyla 100 ms lik bir gecikme programı yazdığınız zaman komutlardan kaynaklanan gecikmeyi de hesaba katmanız gerekir. Aksi taktirde gecikme süreniz çok hassas olmaz ve muhtemelen hesapladığınızdan fazla olur. Hal böyle olunca gerekli hassasiyetin yakalanması için komutları kendinizin belirleyeceği ASM kullanmanız şart ve zorunlu olmaktadır. Aksi taktirde Basic derleyicisine komutlar dahil 100 ms lik bir gecikme ayarla diyemiyorsunuz. Daha doğrusu bunu kontrol etme imkanınız yok.
Komut gecikmesinin ne anlama geldiğini bilmiyor isen şöyle düşünmeni öneririm. 4 MHz lik bir işlemci frekansında 4.000.000 HZ/4 = 1.000.000 HZlik kısmı pic komutları tarafından kullanılır.
1 sn. =1.000.000 mikro saniye olduğundan 1 komut çevirimi için geçecek süre 4 MHz de 1 us (mikro saniye ) olarak bulunur. Aynı hesabı 10 MHz için yapacak olur isek Pic'e düşen frekans 2.500.000 HZ ve 1.000.000/2.500.000 = 0,4 us olarak bulunur.

Aslında konunun sağlamasını program yazdıktan sonrada görebilirsin. Gecikmeyi bir ASM birde basic komutu ile ver ve frekansı ölç. Hatta aynı frekansı bir kaç kez ölç farkı göreceksin. Tabiiki küçük frekanslarda belki fark ya olmayacak yada 1-2Hz olacaktırki bu ihmal edilebilir. Ama MHZ seviyesinde frekanslara geçince farkın bayağı büyük olduğunu göreceksin.
İşte bu yüzden bekleme bölümü ASM de yazılmalıdır. Ancak ASM de yazılan gecikmeler gerçek süreyi kapsar ve belirler. Diğerleri gerçeğe yakın sürelerdir.

Programlama işi ile nekadardır uğraştığımı sormuşsun. Kesin bir süre vermek zor. Ancak benim daha önceden PC hatta daha öncesinden Commodore ev bilgisayarları için program yazma geçmişim var. Pic ile tanışalı 3-4 yıl oldu. Tabiiki hemen oturup nasıl program yaparım diye düşününce öncelikle alt yapım olan Basic üzerine yoğunlaştım. Aynı zamanda birazda ASM bilgim olduğu için ASM üzerinede çalıştım. Sonuçta Picile tanıştıktan bir kaç ay sonra ilk programlarımı yazmaya başladım diyebilirim.
Şimdi seni ele alır isek, tavsiyem önce tek dil üzerine yoğunlaşman. Onu öğrendikten sonra diğer dilleride ve özellikle ASM ve C dilini öğrenmeni tavsiye ederim. Hatta direk C dilinden de başlayabilirsin. Öğrenmenin temeli mümkün olduğunca örnek izlemek ve gerekli gereksiz sürekli program yazmaktır. Yaz ve neticeyi mümkünse simulasyon programları ile görmeye çalış. SOnuçta en fazla 2-3 ay içinde bir şeyler yapmaya başlarsın.

Kolay Gelsin
ETE


ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

OG

Alıntı YapZira bu kısmı derlediğin zaman (ASM ye çevirdiğin zaman) bir sürü komutun devreye girdiğini görürsün.
ete hocam üst seviye dillerden bu konuda güvenilebilecek olanı yokmudur? Komut süreleri net hesaplanabilen bir dil yokmudur?
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ete

Bu konuda bilgim yok maalesef.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

fsan

Alıntı yapılan: "spartacus"arkadaşlar pic ve lcd kullanarak frekans ölçümünün nasıl yapıldığı hakkında bilgisi olan varsa paylaşmalarını rica ediyorum. yapmak istediğim şey bir otomobil motorunun devir sayısını ölçmek ve lcd de yazdırmak. yardımlarınız için şimdiden teşekkürler.  :idea:

merhaba,
picproje uyesi "rree" arkadasimizin eskiden pbp ile yaptigi bir örnek var istersen bir göz at.


Index of /picproje/members/rree