Ðề tài: Pwm
View Single Post
Old 25-01-2007, 10:51 AM   #4
nhh
Đệ tử 9 túi
 
nhh's Avatar
 
Tham gia ngày: Feb 2006
Bài gửi: 174
:
Send a message via Yahoo to nhh
Trích:
Nguyên văn bởi tranvu_hop View Post
Em muốn hỏi là tại sao fải để là
set_pwm1_duty(500L)
500L, nếu bỏ L đi thì sao, em chưa hiểu chỗ này. Mong các anh chỉ đáp
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%

Chú ý rằng nếu bác set giá trị duty vượt quá 100%, thì ôi thôi chân điều chế xung nó không bị xóa về mức thấp nữa.

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);
Hôm sau sẽ gởi cho mấy bác chương trình tính toán pwm trực quan, đơn giản nhưng hiệu quả.
__________________
Ngày mai bắt đầu từ ngày hôm nay

Bạn có thắc mắc, bạn cần sự hỗ trợ của các thành viên. Hãy đọc luồng này:
http://www.picvietnam.com/forum//showthread.php?t=1263
nhh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn