Thông báo

Collapse
No announcement yet.

Lỗi ADC trong PIC16F887

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lỗi ADC trong PIC16F887

    DEAR ALL!
    chả là thế này, em đang lập trình ADC cho pic 16f887, và có 1 vấn đề nhờ các bác hỗ trợ. em xin cảm ơn!
    em có 1 thiết bị tải ngoài với mức điện trở quy định là 30-40kΩ. và chân AN0(PIN2) lấy tìn hiệu ANALOG.
    với tải là 35kΩ thì mức điện áp hiển thị trên AN0 là 3.3v và em lấy 1 tải có điện trở là 60kΩ thì áp trên AN0 là 4.1v. nếu oke thì hiển thị led . ko oke thì led tắt.
    mời các bác xem đọan code.

    #include<16f887.h> //khai bao ten VDK
    #device 16F877*=16, ADC=10 // 10 bit
    #fuses HS,NOLVP,NOWDT,PUT
    #use delay (clock=20000000)
    #include <stdio.h>
    #include <math.h>
    int16 adcsensor;
    int16 adcMIC;
    int mok;
    int sensorok;
    int16 i,count;


    void checksensor() //////////////////////////// kiem sensor ////////////////////////////////
    {
    set_ADC_channel(3);
    delay_us(20);
    adcsensor=read_adc();
    if (adcsensor<200)
    {
    sensorok=0;
    }
    if (adcsensor>200)
    {
    sensorok=1;
    }
    }

    void checkMIC()
    {
    set_ADC_channel(0);
    delay_us(20);
    adcMIC=read_adc();
    if (adcMIC<680) // tuong ung voi 40kΩ
    {
    if (adcMIC>635) // tương ứng 30kΩ
    {
    mok=1;
    }
    if (adcMIC<635)
    {
    mok=0;
    }
    }
    if (adcMIC>680)
    {
    mok=0;
    }
    }


    void check()
    {
    if(mok==1)
    {
    output_bit(pin_b1,1); // led ok sang

    }
    if (mok==0)
    {
    output_bit(pin_b1,0); //led tat
    }
    count=mok;
    }



    void checkHP()
    {
    checksensor();
    if (sensorok==0)
    {
    checksensor();
    output_bit(pin_e0,0);
    while (sensorok==0)
    {
    checksensor();
    }
    }
    if (sensorok==1)
    {
    output_bit(pin_e0,1); // cylinder push jig on

    checkMIC();
    check();
    if (count<1)
    {
    checkMIC();
    check();
    while (count<1)
    {
    checkMIC();
    check();
    }
    }
    if (count==1)
    {
    delay_ms(2500);
    output_bit(pin_e0,0); // cylinder push jig oFF
    checkMIC();
    check();
    for (i=1; i<50; i++)
    {
    delay_ms(10);
    checkMIC();
    check();
    }
    checkMIC();
    check();
    }
    }
    }




    void main()
    {
    setup_adc_ports(sAN0|sAN1|sAN2|sAN3|VSS_VDD);
    set_tris_b(0x00);
    set_tris_e(0x00);
    set_tris_a(0xff);
    setup_adc(adc_clock_internal);
    output_b(0x00);
    output_e(0x00);
    count=0;

    while (true)
    {
    checkHP();
    }
    }

    nhưng ko hiểu tại sao khi em thử với tải 60KΩ thì led vẫn sáng.( mặc dù mức ADC của tải này 4.1v=843)
    nhờ các bác chỉ giáo.
    thanks

Về tác giả

Collapse

vhai0106 Tìm hiểu thêm về vhai0106

Bài viết mới nhất

Collapse

Đang tải...
X