簡體   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