Arduino ile çalışmasının sebebi Arduino sinyalinin 500Hz' te olmasıdır.
PIC' in tetiklenmesini çok çok düşük aralığa getirmeye çalışalım sonra kademesini biz belirleyelim.
"setup_timer_2(T2_DIV_BY_4,4,5); "
1*4*(4+1)*5 = 100usn eder.
500Hz ile çalışması demek 2ms veya 2000usn demektir.Yukarıdaki formülden gelen değer 100us yani 20 kere işlem yapabiliriz.
Siz yukarıdaki formülü daha da hassaslaştırarak(100usn' yi düşürerek) pwm sinyalini daha da kontrol edilebilen bir durumu çekebilirsiniz.
int aralik = 10;
#int_timer2
void kesme_fonk()
{
i += 1;
if(aralik <= i)
{
output_high(pin_b0);
}
if(aralik < i && i < 20)
{
output_low(pin_b0);
}
if(i == 20)
{
i = 0;
}
}
PWM çıkışını kullanmanıza gerek yok herhangi bir pini yukarıdaki kesme fonksiyonu ile pwm çıkışı gibi kullanabilirsiniz.
açıklama için çok teşekkürler
ben donanımsal pwmi, daha önce yazılımsal pwm ile bir işlem yapmadigim için tercih etmiştim
daha kolay geliyordu bana. Mesela 500hz için sizin bu yazdığınız koda 20 defa giriş yapılması gerekiyor değil mi? Orda büyüklük eşitlikte ufak bir hata var sanki. Ya da ben anlayamadım. Mesela ilk If sorgusunda
If(aralik >=i) dersek, ve i de 1'den başladığı için, ilk 10 çevrimde i, aralık degerinden küçük olacak. pin high da kalacak.
If(aralik <i & & i<20) için yani i değeri 10 ve 20 arasındayken de low kalıyor. Bu durumda 500hz ve %50 pwm bir sinyal vermiş oluyoruz değil mi? İlk 10 çevrim yani 10x100us=1000us high ve sonraki 10 çevrim yine 100usx10 =1000us. Bu durumda 1000us low ve 1000us high kalmış oluyor. Toplam periyot 2000us =2ms oldu. Yanlış mıyım?
Burdaki %50lik pwm degerini benim bir değişkene gore değiştirmem lazım. Bu durumda acaba aralik değerini bu bahsettiğim değişkene gore düzenleyecek bir kod yazsam olur mu acaba? Bunun için ne tavsiye edersiniz?
Donanımsal olarak da mesela direk ppc1 için
setup_timer_2 (T2_DIV_8,254,1)
yapsam 1x255x4x8/4000000 den (yanlis değilsem) 490 Hz filan yapıyor. Bu çalışması için yeterli olur mu acaba?