16f877 de 4 tane pwm olurmu olur

Başlatan Tarik konca, 30 Ağustos 2023, 15:53:34

Tarik konca

16f877 de 4 tane pwm olurmu olur

anlatilacak her sey onceki yazilarda olanlarla ayni

fazla konusmaya gerek yok bu sefer 16f877 de adc oldugu icin

4 tane pot bagladim onlarla pwm leri kontrol edebiliyorsunuz

2 tanesi pwm benim yazdigim timer0 ve timer1 de calisiyor diger 2 si donanimsal pwm

onlar icin hazir kutuphane kullandim bana ait degil toplamda 4 tane pwm kullanabiliyorsunuz

16f877 de  belki lazim olur bulunsun

mikrobasic ve proteus dosyalari ekde

timer uniteleriyle  pwm yapma macerasi bitti son

olusturdugumuz gecici rahatsizliktan dolayi ozur dileriz



program MyProject
dim pwm0_duty ,pwm1_duty ,pwm2_duty ,tmr0_duty,tmr0_tmp ,tmr1_duty,tmr1_tmp ,tmr2_duty ,tmr2_tmp,adc_sec,adc_sayac,pwm3_duty as byte
dim adc_sonuc,test as word
dim msg1 as string[20]


sub procedure interrupt() iv 0x0004 ics ICS_AUTO
 if  intcon.TMR0IF=1 then
  intcon.TMR0IF=0
  intcon.tmr0ie=0
   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.tmr0ie=1
end if


 if  PIR1.TMR1IF =1 then
     PIR1.TMR1IF = 0
     pie1.tmr1ie=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
   pie1.tmr1ie=1
end if

'if  PIR1.TMR2IF =1 then
'   PIR1.TMR2IF = 0
'   pie1.tmr2ie=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
'   pie1.tmr2ie=1
'end if
end sub
main:
trisa=255
trisb=0
portb.0=1
portb.2=1
portb.5=1
portb=0
trisc=0
trisd=0

INTCON = %11100000
OPTION_REG = %00001000

T1CON = %00000101
PIR1.TMR1IF = 0
PIE1.TMR1IE  = 1

'T2CON=%10000100
'PIE1.TMR2IE = 1

'adcon1.adfm=0
adcon1.3=0
adcon1.2=0
adcon1.1=0
adcon1.0=0

'adcon0.adon=1
adcon0.3=0
adcon0.4=0
adcon0.5=0
adcon0.1=1
adcon0.7=0
adcon0.6=1
'adc_sec=0

'tmr0_duty=1
'tmr1_duty=1
'tmr2_duty=1
'    UART1_Init(9600)                     ' Initialize UART module at 9600 bps
'    ADC_Init()
PWM1_Init(15000)                    ' Initialize PWM1 module at 5KHz
PWM2_Init(15000)                    ' Initialize PWM2 module at 5KHz
PWM1_Start()                       ' start PWM1
PWM2_Start()                       ' start PWM2

    
adc_set:


adc_sonuc = ADC_Read(0)
pwm0_duty=adc_sonuc/4

adc_sonuc = ADC_Read(1)
pwm1_duty=adc_sonuc/4

adc_sonuc = ADC_Read(2)
pwm2_duty=adc_sonuc/4

adc_sonuc = ADC_Read(3)
pwm3_duty=adc_sonuc/4

PWM1_Set_Duty(pwm2_duty)        ' Set current duty for PWM1
PWM2_Set_Duty(pwm3_duty)       ' Set current duty for PWM2




 ' Delay_ms(100)                        ' Wait for UART module to stabilize
  
'   ByteToStr(test, msg1)

 ' UART1_Write_Text(msg1)


'adcon0.2=1
'while adcon0.2=1
'wend

'if adc_sec=0 then
'tmr0_duty=adresh
'adcon0.3=1
'adcon0.4=0
'adcon0.5=0
'end if

'if adc_sec=1 then
'tmr1_duty=adresh
'adcon0.3=0
'adcon0.4=1
'adcon0.5=0
'end if

'if adc_sec=2 then
'tmr2_duty=adresh
'adcon0.3=0
'adcon0.4=0
'adcon0.5=0
'end if

'adc_sec=adc_sec+1

'if adc_sec=3 then
'adc_sec=0
'end if



goto adc_set
end.

Tek Care Format C:

elektro77

Güzel çalışmalar ve örnekler. Teşekkürler.
spwm örneği de yapabilir misiniz?
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Powered by EzPortal