![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 81
: |
Theo tui bạn thử sử dụng PWM với duty cycle thay đổi dần với tần số cố định (Một số cái còi "ngân" của ô tô cũng sử dụng phương pháp này... tiếng nhỏ dần).
Còn về nguyên lý hoạt động thì dutycle càng ngắn thì thời gian sáng của led càng ngắn (chớp nhanh) -> tối và ngược lại. Như vậy khoảng thời gian để đèn từ tắt hẳn đến sáng hoàn toàn thì cũng chính là thời gian để duty cycle chạy từ 0 đến max. Ví dụ: Code:
void main() { setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_1,25,1); set_pwm1_duty(0); while(true) { for(i=0;i<25;i++) { set_pwm1_duty(i); delay_ms(200); } } } Cái này tui chưa làm thử, nhưng đây là ý tưởng của tui... bạn tham khảo xem sao ![]() |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 1 túi
Tham gia ngày: Jul 2008
Bài gửi: 11
: |
Trích:
Mình thấy pic16f877a chỉ có 2 chân băm xung thôi nhưng mình muốn sử dụng 8 chân thì làm như thế nào mong được chỉ giáo! Trân trọng cảm ơn! |
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 4 túi
Tham gia ngày: May 2007
Bài gửi: 81
: |
Trích:
Code:
#include <12F683.h> #FUSES NOWDT //No Watch Dog Timer #FUSES INTRC_IO //Internal RC Osc, no CLKOUT #FUSES NOCPD //No EE protection #FUSES NOPROTECT //Code not protected from reading #FUSES NOMCLR //Master Clear pin used for I/O #FUSES NOPUT //No Power Up Timer #FUSES BROWNOUT //Reset when brownout detected #FUSES IESO //Internal External Switch Over mode enabled #FUSES FCMEN //Fail-safe clock monitor enabled #use delay(clock=4000000) int i; void main() { setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_1,25,1); set_pwm1_duty(0); while(true) { for(i=0;i<25;i++) { set_pwm1_duty(i); delay_ms(200); } } } |
|
![]() |
![]() |
![]() |
|
|