Цифровой выход АЦП уменьшается на 1

Я работал в проекте АЦП на ATmega 32, мой АЦП имеет разрешение 10 бит, Vref = 2,56 В (внутренне из этой информации я могу сделать вывод, что размер шага = 2,56/1024 = 2,5 мВ

затем, если входное напряжение составляет 2,5 В, выход цифровых данных должен быть 2,5 В / 2,5 мВ = 1000 = 0b1111101000

Я сделал этот код и сделал симуляцию в протейсе, но когда входное напряжение было 2,5 В, выходное значение было 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;
}

и это результат моделирования протея

введите описание изображения здесь

1 ответ

Решение

Ваша математика немного не в порядке. При 0 В выходной сигнал АЦП равен 0, поэтому для достижения 2,56 В требуется всего 1023 шага.

2,5 В / (2,56 В / 1023) = 999,02344

Другие вопросы по тегам