MCU / Arduino RESET

时间:2014-03-17 05:58:12

标签: c arduino microcontroller reset arduino-uno

我有以下设置。我发现我的arduino再次重启。我有Arduino板,lCD显示器,SENSOR。传感器和LCD显示器SHARE公共接地和7805 IC和Arduino板的5v电源使用7812稳压器IC上电。最后他们处于共同的地面潜力。现在我有代码的Peice。单独我尝试每个功能都正常工作没有任何错误,Arduino Board将不会被重置。当我把我所有的代码块放在一起。重新开始。一旦它重新开始工作几分钟,然后再次重置。

  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();
    }
    
  2. 我在我的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);
    
    
    }
    

1 个答案:

答案 0 :(得分: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")
  

重置看门狗定时器。当看门狗定时器启用时,呼叫   在计时器到期之前需要该指令,否则为a   将发生看门狗启动的设备重置。

如果从项目中禁用监视程序,您是否仍会获得相同的结果?

更新1

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

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