avr:atmega328p ADC始终读取最大值

时间:2017-04-28 19:33:49

标签: c avr adc

我一直试图用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,这是最大值,所以我可能做错了,但我无法发现错误。

提前感谢您的回答

此致 害

1 个答案:

答案 0 :(得分:0)

看起来你正试图从ADC0读取,这是引脚PC0。确保将PC0连接到GND或其他已知电压;如果它是浮动的,你可能会得到不可预测的结果。

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

如果您需要更多帮助,则应发布完整的代码和图片,说明如何连接。