首页 > 解决方案 > ADC 缓冲区未保存完整值

问题描述

我正在尝试从 PIC24F Curiosity 开发板(PIC24FJ128GA204)中的电位器读取 ADC 值,然后如果值大于 1000(我将其配置为 10 位)打开 LED。但是,缓冲区中的最大值约为 500。以下代码显示了该问题。请指教。

#include <xc.h>
#define Pot_TriState _TRISC0
#define Pot_AnalogState _ANSC0

int main(void) {
    Pot_TriState = 1;
    Pot_AnalogState = 1;

    _TRISC5 = 0;
    _LATC5 = 0;
    ADC_Config();
    while (1) {
        if (ADC1BUF10 >= 1000) {
            _LATC5 = 0; //Never be executed 
        }
        if (ADC1BUF10 >= 300) {
            _LATC5 = 1;
        }
    }
    return 0;
}

void ADC_Config() {
    AD1CON1bits.ADON = 0; // ADC must be off when changing configuration
    //start conversion automatically after sampling and configure ADC to either 10 or 12 bits
    AD1CON1bits.SSRC = 7;
    AD1CON1bits.MODE12 = 0;
    AD1CON2bits.PVCFG = 0; //A/D Converter Positive Voltage Reference Configuration bits
    AD1CON2bits.NVCFG0 = 0; // A/D Converter Negative Voltage Reference Configuration bit
    AD1CHSbits.CH0SB = 0b01010; //01010 = AN10
    AD1CHSbits.CH0SA = 0b01010; //added
    AD1CON3bits.ADRC = 1; // 1 = RC clock --- ADC?s internal RC clock
    AD1CON3bits.SAMC = 0b11111; // set auto sampling time -- Auto-Sample Time Select bits11111 = 31 TAD
    AD1CON2bits.BUFREGEN = 1; //Conversion result is loaded into the buffer location determined by the converted channel
    AD1CON1bits.ASAM = 1;
    AD1CON1bits.ADON = 1;
}

标签: cmicrocontrollerpicatmegaadc

解决方案


推荐阅读