18f46k22 8bit pwm ile 50~60Hz sinyal üretmek

Başlatan tekosis, 20 Mart 2016, 13:59:59

Maxim

intosc 500khz ayarlarsanız, pwm ile 50 hz alırsınız çok rahat.
hatta 30hz ile 60khz arası gibi birşey

tekosis

#16
@Maxim hocam teşekkür ederim bir heves inceledim datasheeti ama ne yazık ki olmuyor. capture compare kısmı osilatör tetiklemesinde dahili osilatör ile de yapılabiliyor. ancak PWM modülünü tetikleyen TIM2/4/6 ler sadece external osilatörden tetikleme alıyor. eğer böyle ise bu durumda dahili osilatörle çalışan bir sistemde bu timerler kullanılamayacak mı? biraz daha bakayım.

---------------------
timer2 sadece sistem clock source den besleniyor. benim sistem kristalim 10mhz olduğundan sadece onu kullanabiliyor.
aşağıdaki dökümanın 4. sayfasında da "Timer Clock Source The Timer2 module has one source of input clock, the device clock (FOSC/4)." olarak belirtilmiş.

http://ww1.microchip.com/downloads/en/DeviceDoc/31013a.pdf
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

mehmet

Kesme içinde TimerX ile bir değişkeni artırınız; bu
değişkeni ana döngü içerisinde istediğiniz değer
ile karşılaştırınız. Buna göre de ilgili pinin değerini
değiştiriniz.
Analog girişi kullanılarak da değişkenlik sağlanabilir...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

tekosis

haklısınız, ben bu yolu kullanmamak için iki gündür zorluyorum ama başka çare kalmadı şimdilik bu şekilde olacak.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

iyildirim

Alıntı yapılan: mehmet - 21 Mart 2016, 11:38:48
Kesme içinde TimerX ile bir değişkeni artırınız; bu
değişkeni ana döngü içerisinde istediğiniz değer
ile karşılaştırınız. Buna göre de ilgili pinin değerini
değiştiriniz.
Analog girişi kullanılarak da değişkenlik sağlanabilir...
Bu durumda gereken pwm frekansından çok daha fazla, istenen pwm çözünürlüğü kadar kesmeye girilmesi gerekir.

Timer 1/3/5 32K int osc ile çalışabiliyor. Timer0 prescaler i 256 olabiliyor ve counteri 16 bit.
Bu timerlardan birini kullanıp sadece pini low high yapacak şekilde frekansın 2 katı katı kesmeye girmek yeterli.
610/50=12,5% dan fazla duty gerekmeyecekse, pwm one shot modunda frekans kadar kesme yeterli olur. timer0/1/3/5 kesmesinde TMR2/4/ reset ve pwm enable et  kodu yeter.