PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...) > Lỗi lập trình ngôn ngữ cấp cao

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Lỗi lập trình ngôn ngữ cấp cao Những lỗi trường gặp trong lập trình. Khóa luồng khi bug được lỗi.

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 20-01-2010, 11:43 AM   #1
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Lỗi thường gặp với set_pwm1_duty() của CCS C

Trong tài liệu hướng dẫn của CCS C có phần mô tả về hàm set_pwm1_duty() (và các hàm tương tự khác, set_pwmx_duty, x = 2 .. 5), được trích dẫn dưới đây:
Trích:
Writes the 10-bit value to the PWM to set the duty. An 8-bit value may be used if the least significant bits are not required. If value is an 8 bit item, it is shifted up with two zero bits in the lsb positions to get 10 bits. The 10 bit value is then used to determine the amount of time the PWM signal is high during each cycle as follows:
• value*(1/clock)*t2div
Vì đã có nhiều trường hợp hiểu sai về cách dùng hàm, nên tôi lược dịch phần mô tả này và giải thích dưới đây:
Trích:
Ghi giá trị 10-bit vào module PWM để thiết lập duty cycle. Có thể dùng một giá trị 8-bit nếu các bit có trọng số thấp nhất là không cần thiết. Nếu giá trị là một số 8-bit, nó được dịch trái 2 bit để có được giá trị 10-bit. Giá trị 10-bit này sẽ được dùng để xác định khoảng thời gian mà tín hiệu PWM ở mức cao trong mỗi chu kỳ như sau:
• value*(1/clock)*t2div
Giải thích: Nếu đối số của hàm là một biến thì trình dịch tự nhiên có thể xác định được kích thước của đối số (8-bit hay 16-bit). Nhưng nếu đối số là một hằng số thì trình dịch sẽ tự quyết định kích thước của đối số dựa vào giá trị (nếu giá trị <= 255 thì cần 8-bit, còn giá trị > 255 thì cần 16-bit). Trong trường hợp đối số là một hằng số <= 255, cần chú ý rằng giá trị của đối số sẽ được dịch trái 2 bit rồi mới dùng để thiết lập duty cycle cho module PWM.

Nói tóm lại, nếu đối số value là một giá trị 8-bit thì duty cycle sẽ được tính là: duty cycle = value/(PR2 + 1). Nếu đối số là một giá trị 10-bit (chứa trong một ô nhớ 16-bit) thì duty cycle sẽ được tính là: duty cycle = value/[4*(PR2 + 1)].

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:30 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam