![]() |
Điều chỉnh độ sáng LED
Em đang làm đề tài điều chỉnh độ sáng đèn led bằng PWM thông qua cảm biến quang đưa tín hiệu vào kênh AN0. Mong các bác góp ý dùm.
[code] #include <16F877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #device 16F877a*=16 ADC=8 #include <def_877A.h> #use delay(clock=4000000) #include <def_877a.h> int8 mode=0,somode; int8 value,aa; int8 duty; int8 const a[11] = {192,249,164, 176,153,146,130,248,128,144,136}; #INT_EXT //khai bao ngat ngoai EXT_ISR() {//KHAI BAO NGAT mode++; if (mode==11) mode = 0; } // End of INT void pro1(); void main() { set_tris_b(0x01); set_tris_d(0x00); set_tris_c(0x00); setup_port_a(ALL_ANALOG);//Đọc giá trị ánh sáng môi trường từ //cảm biến quang trở setup_adc(adc_clock_internal); set_adc_channel( 0 ); setup_ccp1(CCP_PWM); setup_timer_2(T2_DIV_BY_4, 249, 4); enable_interrupts(int_EXT);//ngắt ngoài dùng để đặt mức sáng ext_int_edge(L_TO_H); // enable_interrupts(GLOBAL); portd=192;set_pwm1_duty(0); while(1) { switch(mode) { CASE 0: portd=a[mode];set_pwm1_duty(0);BREAK; default: pro1() ; break; } } } void pro1() { portd=a[mode]; value=(float)read_adc(); delay_us(10); somode=(mode*25.5);//22.5=0.5V*255/5V // 5V/0.5V=10 muc if (value<somode) { duty=(somode-value); set_pwm1_duty(duty); } else set_pwm1_duty(0); } |
Bài viết của bạn vẫn còn một đoạn văn bản tiếng Việt không dấu. Ngay cả đặt câu hỏi mà bạn cũng không thực hiện được cho đàng hoàng, thử hỏi có mấy người muốn giúp bạn?
Thân, |
Trích:
|
Theo mình bạn nên để ADC=10,thì mức độ lấy mẫu sẽ chuẩn xác hơn, không hiểu mấy tiền bối nghĩ sao.
|
Múi giờ GMT. Hiện tại là 10:17 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam