ccp modulu - Capure - ufak bir soru

Başlatan gambit1244, 16 Ocak 2012, 21:36:48

gambit1244

merhaba arkadaşlar capture işlemi yapacağım
bir sinyalim var.pwm  bu sinyali capture ettiğimi düşünün
sinyalin yükselen kenarında tetikleme vericem
tam ben capture yapmaya başladığımda eğer sinyal sıfır ise
logic 1 olduğu anda onu yakalyacak

peki ben capture ı başlattığım anda sinyal zaten 1 ise ne olur
onu yakaladı zannedermi
yoksa tekrar sıfır olmasını bekleyip yine bir olduğundamı capture başlar?
teşekkürler
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

iyildirim

İşlemciye göre ne kadar değişir bilmiyorum. Capture işleminde modülü konfigüre ederken sadece yükselen, alçalan veya her iki kenarda yakala denebiliyor.

Örneğin sadece yükselen veya alçalan denince peryodu ölçmüş oluyorsunuz.
Her iki kenarda capture et denirse de duty. 
Duty ölçerken de kesmeleri aktif ediyoruz. Hem yükselen hemde alçalan kenarda kesme oluşuyor. (Bazı işlemcilerde hangi kenarda kesme üretileceği de söylenebiliyor. Ayrıca bir de FIFO bufferı olabiliyor. )

Her iki kenar için kesme üretildiği durumda, kesme içerisinde iken pinin durumuna bakarak kenarın düşen mi çıkan mı olduğunu anlayabiliyoruz. Buna göre de iki kenar arasındaki TIMER değerini hesaplıyoruz.

Soruya göre düşünürsek, eğer yükseleni okumamış isek alçalan kenarı dikkate almama şansımız var. 

Capture modülünü çalıştırdıktan sonra,  ve biraz bekleme yaptıktan sonra  capture edilen değerleri işleme alırsak, bu tip bir sorunu kendiliğinden elimine etmiş oluruz.

gambit1244

teşekkür ederim hocam anladım konuyu
takılırsam tekrar sorarım
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

gambit1244

#3
hocam boyle bi programcık yazdım timer bilgim iyi olmadığı içn şimdi oturup sırayı ona getireceğim
program düzgün çalışıyor butona bastığımda "yükseldi" bıraktığımda "düştü" yazıyor bu ikisinin arasınıda saniye olarak ölçtümmü pwm tamamdır
not: ilk açılışta yükselen kenar aktif olarak çalışıyor
boylece pwm sinyalin sadece tepe kısmını olcüyorum cünkü tepe kısmı daha kısa sürüyor
1 olmasını bekliyorum ölçmeye başlıyorum 0 olunca olçmeyi bırakıp işi bitiriyorum
#INT_CCP1   // INT_CCP1 kesmesi fonksiyonu

int x=0;
setup_ccp1(CCP_CAPTURE_re);// ccp1 yükselen kenarı aktif ettim


void yakala1_kesmesi ()
{
if(x==0)
{
printf("yukseldi"); //burada sinyal yükseldi ve ben saymaya başladım
setup_ccp1(CCP_CAPTURE_fe); // ccp1 düşen kenarı aktif ettim
x=1;
}
else
{
printf("dustu"); // burada sinyal düştü saymayı kesicem ve tekrar x ' i  ve setupccp1 ayarını eski haline getirip kesmeden çıkacağım
setup_ccp1(CCP_CAPTURE_re);// ccp1 yükselen kenarı aktif ettim
x=0;
}
   

}
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.

iyildirim

Hocam yükselen kenar kesmesinde TIMER sayacını sıfırlayıp düşen kenar kesmesinde TIMER değerini okursanız yeterli.

İşlemciniz nedir hocam.  CCP modülü yetenekli bir işlemci kullanırsanız bir darbe iin bir kesme ile işi bitirebilirsiniz. Gerçi CCS de nasıl olur bilmiyorum ama direkt registerler üzerinde çalışılabilir.