![]() |
|
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Feb 2009
Bài gửi: 5
: |
ADC và PWM điều khiển độ sáng 1 led công suât.
Xin chào các cao thủ trên diễn đàn PIC VIỆT NAM mình là người mới tìm hiểu về PIC và đang dùng PIC16F877A mình muốn hỏi chương trình dùng tín hiệu vào ADC và dùng PWM để điều khiển độ sáng cho một con LED công suất. Bác nào có chương trình mẫu thì cho mình tham khảo với đây là chương trình của mình nhưng khi mô phỏng thấy im re biên dịch thì không có lỗi.
Phần cứng: Nút nhấn trên RB0 và biến trở nối với nguồn 5V và cho vào AN0. Tạm thời mình chưa tìm hiểu cách post hình lên diễn đàn và đóng khung code nên mới viết như vậy mong mọi ng thông cảm. Mong hồi âm và xin chân thành cảm ơn! code______________________________________________ _____________________ #include "C:\Documents and Settings\SMART HOME\Desktop\LAP TRINH PIC\CCS for PIC16F877A\PWM\cht\main.h" // su dung adc o che do 8 bit // chuong chinh doc 3 moc gia tri adc xuat ra tuong ung 3 muc sang cua den led byte value; void main() { byte value; setup_adc_ports(AN0); // Thiet lap cong AN0 la cong vao ADC. setup_adc(ADC_CLOCK_INTERNAL ); // Thiet lap che do xung mo rong // setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_16,255,1); setup_ccp1(CCP_PWM); set_pwm1_duty(0); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); // TODO: USER CODE!! set_tris_b(0x0f); while(true) { if(input(PIN_B0)==1) //Tin hieu cam bien { set_adc_channel( 0 ); value = read_adc(); if((value>0)&&(value<100)) set_pwm1_duty(50); else if((value>100)&&(value<200)) set_pwm1_duty(150); else set_pwm1_duty(255); delay_ms(10); } else set_pwm1_duty(0); } } __________________________________________________ _______________________ |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 2 túi
|
Trích:
Đôi khi mô phỏng Protues không chạy nhưng thực tế lại chạy ngon ơ đó. Protues có một lỗi khi mô phỏng PWM, để khắc phục trước mắt xem chương trình của bác có chạy không thì bác thêm vào một dòng setup_timer_2(xxx) ngay sau khi thực hiện set_pwm1_duty(xx). Để khắc phục lỗi củ chuối này của Protues, bác down file Pic16.dll sau và thay thế file Pic16.dll trong thư mục cài đặt. Lúc này không cần phải setup_timer_2(xx) nữa. Thân ái. |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Jul 2006
Bài gửi: 11
: |
giúp em lỗi của chương trình
Chào các bác
Em đang tập viết chương trình dùng CCSC chương trình đơn giản bên dưới. Compile không báo lỗi nhưng khi chạy mô phỏng thì không chạy/ Code:
#include <16f877A.h> #include <def_877a.h> #FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, #use delay(clock=20000000) //===========Chuong trinh chinh================ void main() { unsigned char i; While(true) { for (i=0x01;i<0x80;i++) { PORTB=i; delay_ms(100); } for (i=0x80;i>0x01;i--) { PORTB=i; delay_ms(100); } } } |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 6 túi
Tham gia ngày: Jul 2007
Bài gửi: 154
: |
led
Trích:
set_tris_b(0x00); |
|
![]() |
![]() |
![]() |
|
|