PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   ADC trong pic! (http://www.picvietnam.com/forum/showthread.php?t=13247)

vth_87 10-02-2012 11:03 AM

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();
}
}

internet.com 10-02-2012 07:23 PM

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();
        }
}



Múi giờ GMT. Hiện tại là 10:46 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