Bạn nên đọc kỹ help CCS:
Lệnh set_pwm1_duty(value); dùng xác định duty cho xung PWM trên chân CCP1.
Tùy theo kiểu của value mà cách tính khác nhau.
- Nếu value là giá trị kiểu int 8bit thì CCS C sẽ dịch trái 2 bit để đủ 10bit
Công thức tính: %duty = value/(PR2 +1)*100%
- Nếu value là giá trị long int 16bit thì CCS C sẽ bỏ đi 4 bit cao
Công thức tính: %duty = (value & 1023)/(4*(PR2 +1))*100%
Hai đoạn code sau đều cho giá trị duty 50% trên chân CCP1:
Code:
int value = 128;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
set_pwm1_duty(value);
Code:
int16 value = 512;
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
set_pwm1_duty(value);