Arduino Analogread()重置微控制器



我正在使用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.3VAVcc PIN之间的inductoranalogRead() reset的问题。此处提到该电感器的目的,电感器目的。但是,短路电感器清除了问题。

我建议您不要编写uint16_t a = analogRead(A0),而应将A0的输入声明为变量,然后在程序中稍后调用。此外,void setup()部分中有一个错误您以条件为WARE循环,并用半结肠结束了线。如果卷曲括号之间的语句为真

,您应该写下要执行的操作

最新更新