0

我有以下设置。我发现我的 arduino 再次重新启动。我有 Arduino 板、LCD 显示器、传感器。使用 7812 稳压器 IC 为 7805 IC 和 Arduino 板的传感器和 LCD 显示器共享公共接地和 5v 电源供电。最后他们处于共同的基础上。现在我有代码了。我单独尝试每个功能都可以正常工作,没有任何错误,并且 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();
    }
    

我在我的 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);


}
4

1 回答 1

0

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

如果我们说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") 函数将所需的文本输出到您设置的串行端口。

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

于 2014-03-17T06:12:50.707 回答