ADC缓冲区未保存完整值

ADC缓冲区未保存完整值,c,microcontroller,pic,atmega,adc,C,Microcontroller,Pic,Atmega,Adc,我试图从PIC24F好奇开发板(PIC24FJ128GA204)中的电位计读取ADC值,如果值超过1000,则打开LED(我将其配置为10位)。 但是,缓冲区中的最大值约为500。下面的代码显示了该问题。 请告知 #include <xc.h> #define Pot_TriState _TRISC0 #define Pot_AnalogState _ANSC0 int main(void) { Pot_TriState = 1; Pot_AnalogState =

我试图从PIC24F好奇开发板(PIC24FJ128GA204)中的电位计读取ADC值,如果值超过1000,则打开LED(我将其配置为10位)。 但是,缓冲区中的最大值约为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;
}
#包括
#定义Pot_TriState_TRISC0
#定义Pot\u模拟状态\u ANSC0
内部主(空){
Pot_三态=1;
Pot_模拟状态=1;
_TRISC5=0;
_LATC5=0;
ADC_Config();
而(1){
如果(ADC1BUF10>=1000){
_LATC5=0;//永远不会执行
}
如果(ADC1BUF10>=300){
_LATC5=1;
}
}
返回0;
}
无效ADC_配置(){
AD1CON1bits.ADON=0;//更改配置时必须关闭ADC
//采样后自动启动转换,并将ADC配置为10位或12位
AD1CON1bits.SSRC=7;
AD1CON1bits.MODE12=0;
AD1CON2bits.PVCFG=0;//A/D转换器正电压参考配置位
AD1CON2bits.NVCFG0=0;//A/D转换器负电压参考配置位
AD1CHSbits.CH0SB=0b01010;//01010=AN10
AD1CHSbits.CH0SA=0b01010;//已添加
AD1CON3bits.ADRC=1;//1=RC时钟---ADC的内部RC时钟
AD1CON3bits.SAMC=0b11111;//设置自动采样时间——自动采样时间选择位11111=31 TAD
AD1CON2bits.BUFREGEN=1;//转换结果加载到由转换通道确定的缓冲区位置
AD1CON1bits.ASAM=1;
AD1CON1bits.ADON=1;
}

我在上述代码中找不到ADC1BUF10的定义。所以我不知道数据类型是什么。我也不知道如何定义ADCBUF10,这只是一个猜测:但是,如果它是一个10位有符号整数,它的最大值将是511。ADC转换的结果在一个16位AD1BUFx寄存器中找到。A/D结果缓冲区采用十六进制编号;ADC1BUF0到ADC1BUFF表示缓冲区0到15。因此,如果您有16个缓冲区,编号为
0
F
,那么
10
(如
ADC1BUF10
)不是无效的吗?@Someprogrammerdude是的,命名不一致。但这是数据表中实际写的内容。我试着用A代替10,但没用。我在上面的代码中找不到
ADC1BUF10
的定义。所以我不知道数据类型是什么。我也不知道如何定义ADCBUF10,这只是一个猜测:但是,如果它是一个10位有符号整数,它的最大值将是511。ADC转换的结果在一个16位AD1BUFx寄存器中找到。A/D结果缓冲区采用十六进制编号;ADC1BUF0到ADC1BUFF表示缓冲区0到15。因此,如果您有16个缓冲区,编号为
0
F
,那么
10
(如
ADC1BUF10
)不是无效的吗?@Someprogrammerdude是的,命名不一致。但这是数据表中实际写的内容。我试着用A代替10,但没用。