YAZILIMSAL PWM

Başlatan eeburakdemir, 01 Mart 2016, 14:44:51

eeburakdemir

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;
    
}

Asla pes etme...

ferit06



if (T1IF)  demişsiniz.  T1IF ne zaman 1 oluyor ki çalışsın?

eeburakdemir

#2
Timer1 kuruyorum , sadece kesme fonksıyonunu koydum buraya. tmr1=0
Asla pes etme...

cerdemir

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.
-- cemal

ferit06

#4
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.

eeburakdemir

İ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. 
Asla pes etme...

ferit06

Bilmişlik , uklallık,   iltifatına teşekkür ederim.