Цифровой выход АЦП уменьшается на 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