Merhaba arkadaşlar, pic12f675 timer1 kullanarak pwm elde etmek istiyorum. Biraz yardımcı olurmusunuz nasıl bir yol izlemem gerektiği hakkında ? Trimpot ile frekans ayarı yapmak istiyorum , hedefim 30KHz görebilmek. Aşağıda deneme amaçlı kod yazdım ama işe yaramadı . Pwm_Pin GP0 pini.
if (T1IF){
if (PWM_Pin) {
TMR1 = adcResult;
PWM_Pin = 0;
} else {
TMR1 = 65535 - adcResult;
PWM_Pin = 1;
}
T1IF = 0;
}
if (T1IF) demişsiniz. T1IF ne zaman 1 oluyor ki çalışsın?
Timer1 kuruyorum , sadece kesme fonksıyonunu koydum buraya. tmr1=0
T1IF sanki pwm enable-disable yapmak için kullanılacak gibi duruyor. Eğer öyleyse değeri interrupt dışında biryerlerden değiştirilmeli. Yine yanlış anlamadıysam timer1 pwm rekansı*pwm çözünürlüğü kadar kesme üretmeli.
Program parçanızın kesme fonksiyonu olduğunu siz biliyorsunuz. Ben bilmiyordum, programın biliyormu? TIMER1 in ayarları nedir buradan görmemiz imkansız ancak bu program mantığı ile TIMER1 i en yüksek hızda kurmuş olsanız bile (Eğer dışarıdan başka bir osilator ile çalıştırmıyor iseniz) 30 KHz alamazsınız. 20 MHz ile çalışmada PWM için 1 periyod 65536 Fosc/4 puls ederki buradan 20000000/4=5000000 Hz lik bir TIMER1 clock ile çalışma demektir. PWM frelkansı 5.000.000/65536= 76,2 Hz yapar. Programını tamamını burada vermeden yol gösterilmesini istiyorsun, bakalım başka ilgilenen çıkacak mı?
İlave ; bu program parçası ile frekansı değiştiremezsiniz sadece darbe/boşluk oranı değişir.
İlgilenirken sizden sadece fikir istedim. Tamam olayı çözmüş veya biliyor olabilirsiniz. Ayrıca kodun tamamını da verebilirdim sadece fikir almak için burada kesme kısmını yazdım. Yazdığımız her konuda en iyi olsak birşeyler sormamıza gerek yok diye düşünüyorum. Yine de teşekkür ederim. Sizden zorla bilgi yada fikir isteyen de yok. Bir daha yazmazsınız. Bu forum bilgi paylaşmak tartışmak içindir , bilmişlik veya ukalalık yapma yeri değildir.
Bilmişlik , uklallık, iltifatına teşekkür ederim.