C语言 MCU/Arduino RESET



我有下面的设置。我发现我的arduino重新启动了。我有Arduino板,液晶显示器,传感器。传感器和LCD显示器共享共地和5v电源,由7805 IC和Arduino板使用7812稳压IC供电。最后,它们处于共同接地电位之下。现在我有了一段代码。我单独尝试了每个功能都工作正常,没有任何错误,Arduino板不会被重置。当我把所有的代码块放在一起的时候。要重新启动。一旦它重新启动工作正常几分钟,再次重置。

  1. 如何解决这个问题?

    #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();
    }
    

我已经在我的串行中添加了这些功能。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")函数将所需的文本输出到已设置的串行端口。

  • 谷歌搜索
  • <
  • LadyAda教程/gh>
  • 无数

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

相关内容

  • 没有找到相关文章

最新更新