[英]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.