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