16f628 de 3 tane pwm olurmu olur

Başlatan Tarik konca, 30 Ağustos 2023, 15:41:59

Tarik konca

16f628 de 3 tane pwm olurmu olur

Daha once 12f675 de iki tane pwm yapmistim  kendi projem icin o bitti tamam sitede var

elim degmisken bir arkadasa lazim olur dusuncesiyle 16f628 icinde yaptim 16f628 de 3 timer var

bende uc timeri da kullanip 3 tane yaptim farkindayim 16f628 de 1 tane donanimsal pwm var onu bu

yazida kullanmadim ucu de esit olsun dusuncesiyle

timer0  timer1 ve timer2 de olanlar kendi halinde calisiyor size pek bir zarari yok

interrupt rutini icinde.

pwm i kontrol icin adc pini olmadigi icin for next dongusunde pwm degerini arttirip azalttim

akliniz karismasin siz butonla kontrol edebilirsiniz isterseniz

ana programda baska isler yapabilirsiniz sadece delay kullandiginiz yerlerde biraz sasirtir o kadar

frekans 15000 hz

yine mikrobasic de yazdim basim agrimasin dusuncesiyle  (onceki tecrubelerimden dolayi)

proteus ve mikrobasic dosyalari ekde

program MyProject
dim pwm0_duty ,pwm1_duty ,pwm2_duty ,tmr0_duty,tmr0_tmp ,tmr1_duty,tmr1_tmp ,tmr2_duty ,tmr2_tmp, sayac as byte

sub procedure interrupt() iv 0x0004 ics ICS_AUTO
 if  intcon.TMR0IF=1 then
   if portb.0=1 then
     tmr0_tmp=tmr0_duty
   end if
   if portb.0=0 then
     tmr0_tmp=255-tmr0_duty
     tmr0_duty=pwm0_duty
   end if
   portb.0=not portb.0
   tmr0=tmr0_tmp
   intcon.TMR0IF=0
   INTCON.5=1
end if
 if  PIR1.TMR1IF =1 then
     t1con.tmr1on=0
   if portb.1=1 then
     tmr1_tmp=tmr1_duty
   end if
   if portb.1=0 then
     tmr1_tmp=255-tmr1_duty
     tmr1_duty=pwm1_duty
   end if
   portb.1=not portb.1
   tmr1h=255
   tmr1l=tmr1_tmp
   PIR1.TMR1IF = 0
   pie1.0=1
   t1con.tmr1on=1
end if
  if  PIR1.TMR2IF =1 then
 t2con.tmr2on=0
   if portb.2=1 then
     tmr2_tmp=tmr2_duty
   end if
   if portb.2=0 then
    tmr2_tmp=255-tmr2_duty
     tmr2_duty=pwm2_duty
   end if
   portb.2=not portb.2
   tmr2=tmr2_tmp
   PIR1.TMR2IF = 0
    t2con.tmr2on=1
end if
end sub

main:
trisa=255
trisb=0
portb=255
INTCON = %11100000
OPTION_REG = %00001000
T1CON = %00000101
PIR1.TMR1IF = 0
PIE1.TMR1IE  = 1
T2CON=%10000100
PIE1.TMR2IE = 1



pwm_set:

pwm0_duty=0
pwm1_duty=0
pwm2_duty=0
    

'         pr2=255
'         CCPR1L=255
'         t2con.2=1
'         t2con.0=0
'         t2con.1=0
'         CCP1CON = $0C
while(true)
    
for  sayac=0 to 255 step 1
pwm0_duty=sayac
pwm1_duty=sayac
pwm2_duty=sayac
delay_ms(1)
next  sayac

for  sayac=255 to 0 step -1
pwm0_duty=sayac
pwm1_duty=sayac
pwm2_duty=sayac
delay_ms(1)
next sayac

wend

end.

Tek Care Format C:

Powered by EzPortal