我有下面的设置。我发现我的arduino Getting重新启动。我有Arduino开发板,液晶显示器,传感器。使用7812稳压器IC为来自7805 IC和Arduino板的Sensor和LCD Display SHARE公共接地和5v电源供电。最终他们处于共同的潜力。现在我有了Peice的代码。我个人尝试过每个功能都可以正常工作,没有任何错误,并且Arduino开发板不会重置。当我将所有代码块放在一起时。重新启动。重新启动后,可以正常工作几分钟,然后再次重置。


如何解决这个问题?

#include <LiquidCrystal.h>
#include <avr/wdt.h>
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
void setup()
{
 Serial.begin(9600);
 wdt_enable(WDTO_8S);
 MODE=INIT;
 pinMode(beeper, OUTPUT);
 lcdClear();
}

void loop()
{
Track_loop();
LCD_Display();
CHK_Key();
wdt_reset();
Serial.println("..........................");
}
void Track_loop()
{
  calcPos();
  calcTime();
  calcElevationAngle();
  callMode();
  actuate();
  // checkHWFaults();
  Wind_calc();
  Print_Result();

}

void Print_Result()
{
  Print_Date();
  Print_Time();
}



我在我的Serial.println语句中添加了这些功能

void Print_Date(){
  Serial.print("Local Date:");
  Serial.print(local_day);
  Serial.print("/");
  Serial.print(local_month);
  Serial.print("/");
  Serial.println(local_year);
}
void Print_Time()
{ Serial.print("local_time is:");
  Serial.print(local_h);
  Serial.print("-");
  Serial.print(local_m);
  Serial.print("-");
  Serial.println(local_s);


}

最佳答案

我怀疑您对看门狗的使用引起了问题。

如果我们说http://www.embedds.com/using-watchdog-timer-in-your-projects/是信息的“权威”来源,那么也许您的wdt_reset()调用没有被及时调用,因此您的系统正在复位吗?


  如果启用了看门狗定时器,则必须保重并将其重置
  在填满并复位MCU之前。否则,如果程序挂起或
  停留在一些无限循环中而无需重置看门狗只会增加计数
  并重置系统


来自http://www.nongnu.org/avr-libc/user-manual/group_avr_watchdog.html

#define wdt_reset() __asm__ __volatile__ ("wdr")



  重置看门狗定时器。启用看门狗定时器后,将有一个呼叫
  计时器到期前,必须先执行此指令,否则
  看门狗启动的设备复位将发生。


如果从项目中禁用看门狗,您是否还会得到相同的结果?

更新1

要调试代码,请使用Serial.println(“ xxxx”)函数将所需的文本输出到已设置的串行端口。

看到


Google Search
LadyAda Tutorial
无数其他


注意:我们是否应该更新这些说明,使它们包含完整的说明?标记为社区Wiki,这样每个人都可以根据需要进行更新。

关于c - MCU/Arduino重置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22447842/

10-10 21:20