繁体   English   中英

即使启用了看门狗,Arduino 也会冻结

[英]Arduino is freezing even with watchdog enabled

我基于 ATmega328P 进行了硬件开发,并使用 Arduino IDE 进行了编程。

该板有一个继电器 output 用于切换交流负载。

有时,当负载打开或关闭时,微控制器会重新启动。 到目前为止还没有什么神秘之处。 可能是一些 EMI 干扰导致重新启动。

但是,有时微控制器会完全冻结。 我不知道为什么,因为我启用了看门狗定时器。 不应该有任何冻结。 据我所知,看门狗定时器应该在 2 秒后重启微控制器。

我需要帮助来理解为什么我会出现这种行为,当然,如果可以有任何软件修复。

这是显示此行为的简单代码。 我已经尝试更改一些保险丝配置(掉电、wdton 等),但到目前为止还没有成功。

任何帮助将非常感激

提前致谢

#include <avr/wdt.h>

#define R0 3
#define R1 4
#define R2 5

unsigned int delayTime = 200;
unsigned int counter   = 0;

//--------------------------------------------------------------------

void setup() {
  
  MCUSR = 0; 
  wdt_disable(); 
  
  Serial.begin (9600);
  delay (1000);
  Serial.println ("********************RESTARTING*****************");
  pinMode (R0, OUTPUT); 
  pinMode (R1, OUTPUT);
  pinMode (R2, OUTPUT);
  delay (2000);   
  
  wdt_enable (WDTO_2S);
  
}

//--------------------------------------------------------------------

void loop() {
  
  wdt_reset();
  digitalWrite (R1, HIGH);
  counter++;
  Serial.print ("R1 activated, counter = "); Serial.println (counter);
  delay (delayTime);
  digitalWrite (R1, LOW);
  Serial.print ("R1 deactivated, counter = "); Serial.println (counter);
  delay (delayTime);
  
}

您没有在三秒钟内启用看门狗复位。 我建议通过保险丝位WDTON使用 WDR 激活,而不是在三秒后通过 sw 激活。

  void setup() {
  
  MCUSR = 0; 
  wdt_disable(); //WDR disabled
  
  Serial.begin (9600);
  delay (1000);   //one second delay
  Serial.println ("********************RESTARTING*****************");
  pinMode (R0, OUTPUT); 
  pinMode (R1, OUTPUT);
  pinMode (R2, OUTPUT);
  delay (2000);   //two second delay 
  
  wdt_enable (WDTO_2S);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM