1

我一直在 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模拟的输出

在此处输入图像描述

4

1 回答 1

4

你的数学有点不对劲。在 0V 时,ADC 输出为 0,因此只需1023步即可达到 2.56V。

2.5V / (2.56V / 1023) = 999.02344

于 2013-11-19T01:26:35.857 回答