avr: atmega328p АЦП всегда читает максимальное значение
Я пытался сэмплировать аналоговый сигнал с помощью atmega328p в c. Раньше у меня это работало с чем-то похожим, но на этот раз я не могу заставить его работать. Я попытался сделать минимальный пример, который дает мне тот же результат:
#include <avr/io.h>
uint8_t data[2];
ADMUX = (1 << REFS0);
ADCSRA = (1 << ADEN);
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC));
data[1] = ADCL;
data[0] = ADCH;
Этот код приводит к массиву data = {0b00000011, 0b11111111}
, не важно что. Так как atmega328p имеет 10-битный АЦП, это максимальное значение, поэтому я, вероятно, что-то делаю не так, но просто не могу определить ошибку.
Заранее спасибо за любые ответы
С уважением, Вред
1 ответ
Похоже, вы пытаетесь читать с ADC0, который является контактом PC0. Убедитесь, что вы подключаете PC0 к GND или другому известному напряжению; если он плавающий, вы можете получить непредсказуемые результаты.
Вам также следует попробовать записать 0x87 в ADMUX, чтобы замедлить работу АЦП.
Если вам нужна дополнительная помощь, вы должны опубликовать свой полный код и фотографии, показывающие, как все подключено.