我正在使用Atmega328
使用arduino bootloader
。我的整个代码工作正常。现在,我需要使用analogRead()
获取ADC值,但是一旦PC
参见analogRead()
,它就会重新启动微控制器。这是示例代码。
void setup() {
Serial.begin(19200);
while(!Serial);
Serial.println("Setup finish");
delay(200);
}
void loop() {
Serial.println("Reading analong Values");
uint16_t a = analogRead(A0);
Serial.println(a);
delay(1000);
}
输出是
Setup finish
�Setup finish
�Setup finish
�Setup finish
�Setup finish
�Setup finish
�Setup finish
�Setup finish
�
我还试图在其之前和之后放置delay()
,但没有徒劳。如何修复它。谢谢。
更新: 我尝试过
0
而不是A0
,但没有徒劳。更新: 问题全部归结为FTDI程序员的
voltage selection(3.3 or 5V)
开关。将其设置为5V可以很好地工作,但是将其切换到3.3V,问题再次出现。
来自Arduino网站:
默认值:5伏(在5V arduino板上)或3.3伏(在3.3V arduino板上)的默认模拟引用
内部:内置参考,等于Atmega168或Atmega328上的1.1伏和Atmega8上的2.56伏(在Arduino Mega上不可用)
这清楚地表明,您正在使用的ATMEGA328在阅读模拟输入时需要内部引用1.1V。它可能正在重新启动,因为使用analogReference(DEFAULT);
时,Atmega328不知道如何正确解码信号并崩溃。
由于Analogread仅在模拟输入引脚上起作用,因此它采用通道号,而不是销钉号。尝试通过0而不是A0。它可能会失败,因为A0比模拟输入通道的数量更高(作为数字引脚),从而导致界限。
电源3.3V
和AVcc
PIN之间的inductor
是analogRead() reset
的问题。此处提到该电感器的目的,电感器目的。但是,短路电感器清除了问题。
我建议您不要编写uint16_t a = analogRead(A0)
,而应将A0的输入声明为变量,然后在程序中稍后调用。此外,void setup()
部分中有一个错误您以条件为WARE循环,并用半结肠结束了线。如果卷曲括号之间的语句为真