avr:atmega328p ADC 始终读取最大值

avr: atmega328p ADC always reads max value

我一直在尝试使用 c 中的 atmega328p 对模拟信号进行采样。以前我有过类似的工作,但不知何故这次我无法让它工作。我试图做一个最小的例子来得到相同的结果:

#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 位 adc,这是最大值,所以我可能做错了什么,但我无法发现错误。

提前感谢您的任何回答

此致, 伤害

您似乎正在尝试从引脚 PC0 的 ADC0 读取数据。确保将 PC0 连接到 GND 或其他已知电压;如果它是浮动的,你会得到不可预测的结果。

您还应该尝试将 0x87 写入 ADMUX 以减慢 ADC 的时钟速度。

如果您需要更多帮助,您应该post您的完整代码和显示所有连接方式的图片。