ADC数字数据输出减少1

时间:2013-11-19 01:21:47

标签: microcontroller avr atmega adc

我一直在ATmega 32的ADC项目中工作 我的ADC是10位分辨率,Vref = 2.56V(内部 根据这些信息,我可以得出结论,步长= 2.56 / 1024 = 2.5mV

然后,如果输入电压为2.5伏,则数字数据输出必须为2.5V /2.5mV = 1000 = 0b1111101000

我已经制作了代码并在proteus中进行了模拟,但是当输入电压为2.5V时,输出为999(十进制)= 0b1111100111而不是1000为什么?? !!

注意:数字数据输出正确调整

这是我的代码:

包括

int main(void)
{
    DDRB = 0xFF;
    DDRD = 0xFF;
    DDRA = 0;
    ADCSRA = 0x87;          //ADC enable, clk/128
    ADMUX = 0xC0;           //Internal vref, single ended ADC0
    while(1){
    ADCSRA |=(1<<ADSC);     //start conversion
    while(ADCSRA & (1<<ADIF) == 0);
    PORTD = ADCL;
    PORTB = ADCH;
    }   
    return 0;
}

这是proteus模拟的输出

enter image description here

1 个答案:

答案 0 :(得分:4)

你的数学有点偏差。在0V时,ADC输出为0,因此只有 1023 步长才能达到2.56V。

2.5V /(2.56V / 1023)= 999.02344