Chào cả nhà...
Em khởi tạo PWM của PIC trong CCS khi cho chạy 1 cái thì oki nhưng chạy cả 2 thì tịt ( ko chạy )
Khai báo:
Khởi tạo PWM:
Công thức tính f: ( tần số băm xung PWM )
f = fosc / [ 4*mode*(period+postscale) ] ( = 1.22kHz với period = 255 )
Trong đó:
-fosc=thach anh = 20.000.000
-mode : T2_DIV_BY_1= 1, T2_DIV_BY_4= 4 , T2_DIV_BY_16 = 16
-period : 0-255
-postscale : 1
Kích hoạt chương trình:
Công thức tính %duty:
Với value la kiểu 8bit:
%duty = (value/(PR2 +1))*100%
==> value =(duty%*(PR2+1))/100% (value = 128 = 50% duty )
Với value kiểu 16bit:
%duty = (value & 1023)/(4*(PR2 +1))*100%
nhưng khi cho chạy cả 2 pwm thì lại ko thấy chạy:
Cớ là làm sao lại ko chạy?
Em khởi tạo PWM của PIC trong CCS khi cho chạy 1 cái thì oki nhưng chạy cả 2 thì tịt ( ko chạy )
Khai báo:
#include <16F877a.h>
#device 16F877*16ADC=8
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#device 16F877*16ADC=8
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
setup_ccp2(CCP_PWM);// Bat che do PWM cho RC2
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp2(CCP_PWM);// Bat che do PWM cho RC2
setup_timer_2(T2_DIV_BY_16,255,1);
f = fosc / [ 4*mode*(period+postscale) ] ( = 1.22kHz với period = 255 )
Trong đó:
-fosc=thach anh = 20.000.000
-mode : T2_DIV_BY_1= 1, T2_DIV_BY_4= 4 , T2_DIV_BY_16 = 16
-period : 0-255
-postscale : 1
Kích hoạt chương trình:
setup_ccp1(ccp_PWM);
set_pwm1_duty(128); //50%
setup_timer_2(T2_DIV_BY_16,255,1);
set_pwm1_duty(128); //50%
setup_timer_2(T2_DIV_BY_16,255,1);
Với value la kiểu 8bit:
%duty = (value/(PR2 +1))*100%
==> value =(duty%*(PR2+1))/100% (value = 128 = 50% duty )
Với value kiểu 16bit:
%duty = (value & 1023)/(4*(PR2 +1))*100%
nhưng khi cho chạy cả 2 pwm thì lại ko thấy chạy:
setup_ccp1(ccp_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(128);
set_pwm2_duty(128);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp2(CCP_PWM);
set_pwm1_duty(128);
set_pwm2_duty(128);
setup_timer_2(T2_DIV_BY_16,255,1);
Comment