Trích:
Nguyên văn bởi minhcuong1122
Cảm ơn anh,
E vừa đọc phần setup_PWM1_duty() (trang 236).
Writes the 10-bit value to the PWM to set the duty. An 8-bit value may be use if the most significant bits are not required. The 10 bit value is then used to determine the duty cycle of the PWM signal as follows:
%duty cycle = value / [ 4 * (PR2 +1 ) ]
Theo như trong đó, e cần đặt duty = 50% = 0.5 thì giá trị value phải nạp là:
value = 4* duty* (PR2 + 1) = 4* 0.5* (15+1) = 32
Hình như có chỗ nào đó e chưa hiểu đúng thì phải (10bits- 8bits ???), hic. Nhờ a chỉ e thêm "tí manh mối" nữa đi. Cảm ơn a nhiều lắm.
|
Vì bạn dùng một giá trị hằng số < 255 làm đối số của hàm, nên nó sẽ hiểu đây là giá trị 8-bit. Giá trị này được dùng như 8-bit cao nhất của duty cycle, dẫn đến công thức cần dùng là value = duty * (PR2 + 1) = 0,5 * (15 + 1) = 8! (chứ không phải công thức dành cho duty cycle 10-bit như trên).
Nếu bạn đặt giá trị 32 (tức là lớn hơn PR2 + 1) làm đối số của hàm thì có thể xảy ra hiện tượng mà bạn đã quan sát được.
Xem giải thích chi tiết hơn ở đây:
http://www.picvietnam.com/forum/showthread.php?t=5772
Nên dùng phiên bản mới nhất của tài liệu hướng dẫn.
Thân,