ウォッチドッグタイマー+ Arduino


8

Arduinoでハードウェアウォッチドッグタイマーを設定するにはどうすればよいですか?


2
私はArduinoのは、内蔵のウォッチドッグを持っているとして、あなたは他の答えを選ぶべきだと思う。
マット・ウィリアムソン

回答:


7

利用可能な専用のハードウェアウォッチドッグチップは多数ありますが、通常の555タイマーICといくつかのサポート部品を使用するのは簡単です。非常に長い「HIGH」期間と比較的短い(おそらく0.3秒)「LOW」期間で555を安定モードで構成すると、出力をダイオードを介してArduinoのリセットピンに接続して、ウォッチドッグをオープンコレクタにすることができます。端末。Arduinoは、デジタル出力を使用して定期的にウォッチドッグをリセットし、555に接続されたタイミングコンデンサを放電するトランジスタをオンにして、Arduinoをリセットするトリガーポイントに到達するのを防ぎます。

これを行うためのプロジェクトに関するいくつかの基本的な情報は、http://www.practicalarduino.com/news/id/471で入手できます


1
phookyは完全に正しいですが、内部WDTには制限があります。それは約6秒以上実行できず(CPUモデルによって異なります)、純粋にソフトウェアからクリーンな「再起動」を行う方法はありません。位置0にジャンプしてブートローダーを再起動するようにCPUに指示することができますが、RAMに危険なものや、CPUに設定されている割り込みフラグなどが残っている可能性があります。ハードウェアでRESETをアサートすると、Arduinoはクリーンな環境を実現します。
jonoxer 2009年

2
WDTをタイムアウトさせると、すべてのレジスタが定義された状態で起動することが保証されるため、「クリーンリセット」発生します。ソフトウェアでそれを達成することは、割り込みを無効にして無限にループするのと同じくらい簡単です。
Nick T

14

atmegaチップにはすでにウォッチドッグタイマーが組み込まれています。avr/wdt.hそれを操作するために使用できます。

簡単な例:

#include <avr/wdt.h>

void setup() {  
  wdt_enable(WDTO_500MS); // have the wdt reset the chip
  // if 500ms passes without a reset
}

void loop() {   
  wdt_reset(); // reset the wdt
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.