12F675 ile pwm

Başlatan erkan614, 24 Mayıs 2021, 16:47:48

erkan614

iyi günler
pwm komutu ile 200 hz lik bir %50 duty sinyalini nasıl elde ederim

sifirzero

Timer2 hesaplamasina bakabilirsin.
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

ete

Düz PWM komutu ile bu frekansı tutturman pek mümkün değil. 4Mhz OSC frekansında çok düşük bir peryot süresi çıkıyor ve ne yazıkki bu komut sana frekans ayarlama imkanı sağlamıyor.
İşlemcide HPWM özelliği de olmadığı içintek çare kesme kullanarak bu işi yapabilmen gözüküyor.
aşağıdaki kod parçası sana bu imkanı verir. NOP olan yere var ise başka komutlar ekleyebilirsin.
Bu hali ile yanlızca PWM sinyalini %50 DUTY ile GPIO.0 dan çıkartmaktadır.
200 Hz demek sinyal peryodunun 1000/200=5 ms olduğunu bize gösterir. 5 ms lik peryodun yarısını HIGH yarısını LOW olarak kullanırsan buda %50 duty değerine denk gelir. O halde yapılacak iş her 2,5ms (2500us) de bir konum değiştirmek olacaktır. Bu nedenle 2500 us de bir kesme yaratan bir program ayarladım ve sonuç istediğin gibi bizzat denedim de. Config kısmını kendi derleyici versiyonuna göre değiştirebilirsin.

Ete
#config
 __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF
#endconfig

DEFINE OSC 4
DEFINE OSCCAL_1K 1
CMCON=7
ANSEL=0
TRISIO=%00001000
GPIO=0
SYMBOL CIKIS=GPIO.0
INTCON=%10100000
TMR0=100
OPTION_REG=%00000011 '(000=1/2, 001=1/4 , 010=1/8  011=1/16
on INTERRUPT GOTO KESME
PAUSE 300

BASLA:

@ nop
@ nop
      GOTO BASLA       
DISABLE
KESME:
      CIKIS=1-CIKIS
      INTCON.2=0
      TMR0=100
      RESUME
      ENABLE
      END
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com