|
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 |
|
10-02-2012, 11:03 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Dec 2010
Bài gửi: 9
: |
ADC trong pic!
thưa anh chị!
em có 1 bài toán nhờ anh chị em trong diễn đàn hỗ trợ. em lập trình dùng pic 16f887 và lấy tín hiệu analog từ ngoài vào. tín hiệu từ bên ngoài là 1 tải có điện trở 30-40kΩ(mức oke). ứng với mức tải này thì em đo trên chân AN0(chân lấy tín hiệu từ tải) là 3.2v ( ứng với ADC=658). Với mức tải 60kΩ(mức không oke) thì em đo trên chân AN0 là 4.1v( tương ứng ADC=843). Khi em lập trình em set mức ADC= 640-->680: Là mức oke. ngoài ra sẽ là mức ko oke. và nếu oke thì có đèn tín hiệu sẽ báo sáng. ko oke thì đèn ko sáng. thế nhưng khi em đưa cả 2 mức tải oke và ko oke thì đèn tín hiệu oke vẫn bật sáng. em ko biết phải làm sao.mong anh chị giúp đỡ. chân thành cảm ơn. mời anh chị xem code: #include<16f887.h> //khai bao ten VDK #device 16F877*=16, ADC=10 // 10 bit #fuses HS,NOLVP,NOWDT,PUT #use delay (clock=12000000) #include <stdio.h> #include <math.h> #use fast_io(c) #use fast_io(d) int16 gt2; int tai; void checkTAI() // kiem tra ADC tu tai. { set_ADC_channel(0); delay_us(20); gt2=read_adc(); if (gt2<680) // muc cao nhat cua tai oke { if(gt2>640) { tai=1; } if(gt2<640) { tai=0; output_low(pin_c3); } } if (gt2>680) { tai=0; } } void checkden() // chuong trinh kiem tra den tin hieu { if(tai==1) { output_high(pin_c3);// den tin hieu bao oke } if(tai==0) { output_low(pin_c3);// den tin hieu ko sang } } ///////////////////////////// void main() { setup_adc_ports(sAN0|sAN1|sAN2|sAN3|VSS_VDD); set_tris_c(0x00); set_tris_d(0x00); set_tris_a(0xff); set_tris_e(0xff); setup_adc(adc_clock_internal); output_c(0x00); output_d(0x00); tai=0; while (true) { checkTai(); checkden(); } } |
10-02-2012, 07:23 PM | #2 |
Đệ tử 1 túi
Tham gia ngày: Sep 2010
Bài gửi: 18
: |
Bạn xem code này nha:
Code:
#include<16f887.h> #device *=16 ADC=10 #fuses HS,NOLVP,NOWDT,NOPUT #use delay (clock=12M) #use fast_io(c) int16 gt2=0; int tai=0; void checkTAI(){ // kiem tra ADC tu tai. gt2=read_adc(); if (gt2>640 && gt2<680) // muc cao nhat cua tai oke tai=1; else tai=0; } void checkDEN(){ // chuong trinh kiem tra den tin hieu if(tai) output_high(pin_c3); // den tin hieu bao oke else output_low(pin_c3); // den tin hieu ko sang } void main(){ set_tris_c(0x00); output_c(0x00); setup_adc(adc_clock_internal); setup_adc_ports(sAN0); while (1){ delay_us(20); checkTAI(); checkDEN(); } } thay đổi nội dung bởi: internet.com, 10-02-2012 lúc 07:32 PM. |
|
|