gpt4 book ai didi

c - C 中 arduino 上的 ADC

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:14 25 4
gpt4 key购买 nike

我正在尝试在纯 C 中使用 Arduio Uno,因为我无法将 Arduino IDE 用于我的高级设计项目。我已经成功地使串行通信、数字输出/输入和模拟输入在一定程度上正常工作。我正在读取模拟输入,但其中大部分是 20,000+,这太高了。这应该是一个 10 位 ADC,而我只想使用 8 位。为什么我得到的读数是最高值的 100 倍?

void init_aio(){
DIDR0 = 0x00; //Digital input disabled on all ADC ports
PRR &= ~(1<<PRADC); //ADC turned on
ADMUX = 0x60; //AVcc, right adjusted, ADC0 pin
ADCSRA = 0xcF; //ADC Enabled, no auto trigger, Iterrupt enabled, 128 prescaller
}

int read_analog(){
reading = APin0;
ADCSRA |= 1<<ADSC; //conversion start
reading = abs(reading);
return reading;
}

我唯一能想到的是我正在使用“int reading_str = itoa(reading, buffer, 10);”使其成为可打印的值。当我直接打印 reading 时,它会将垃圾打印到终端。 (char buffer[100]; 就是缓冲区)

Uno 使用 Atmega328P:www.atmel.com/Images/doc8161.pdf

感谢您的帮助。

最佳答案

ADC 的最高位未初始化为零,因此您需要手动将它们屏蔽掉:

reading &= 0x3FF; // binary 0000001111111111, i.e. ten bits for ADC

然后,您可以通过将模拟引脚分别接地和 Vref,并检查结果值是否符合预期来验证这是正确的。

如果其他人遇到同样的问题,使用不同的读取 ADC 的实现,请确保您的字节顺序和位顺序是正确的。

关于c - C 中 arduino 上的 ADC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19521716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com