我有下面的设置。我发现我的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/