Arduino 中的看門狗定時器


看門狗定時器是任何微控制器的基本部分。如果程式停留在某處,它會重置該程式。簡單來說,看門狗定時器的運作方式如下 -

  • 定時器會一直遞增。

  • 該程式必須確保它會一直重置該定時器,即不允許它溢位。

  • 如果定時器溢位,則表示該程式停留在某處,因此無法重置該定時器。在定時器溢位時會生成一箇中斷,該中斷會重置微控制器。

要在 Arduino 中實施看門狗定時器,我們使用 avr wdt 庫。

程式碼如下 -

#include<avr/wdt.h>
void setup() {
   Serial.begin(9600);
   wdt_disable(); //Disable WDT
   delay(3000);
   wdt_enable(WDTO_2S); //Enable WDT with a timeout of 2 seconds
   Serial.println("WDT Enabled");
}
void loop() {
   for(int i = 0; i<5; i++)
   {
      Serial.println("Looping");
      delay(1000);
      wdt_reset(); //Reset the watchdog
   }
   while(1); //Watchdog timer should get triggered here
}

如你所見,我們初始化 Serial 然後首先停用看門狗定時器。然後引入 3 秒的延遲。程式不會在此處重置,因為看門狗已停用。現在,啟用了超時時間為 2 秒的看門狗定時器。這意味著,如果程式不能每 2 秒重置一次該定時器,那麼看門狗就會被觸發並重啟微控制器。

在迴圈中,我們首先列印到 Serial 5 秒,確保每秒重置一次看門狗。到目前為止,該程式執行良好。然後,我們進入一個無限的 while 迴圈。在這裡,由於我們沒有重置 wdt,因此它將被觸發並重啟 Arduino。

請注意,預置的看門狗超時值範圍為 15 毫秒到 8 秒。

更新於:2021 年 7 月 24 日

超過 7K 的瀏覽量

開啟你的 職業生涯

完成課程認證

開始
廣告
© . All rights reserved.