質問: AVRウォッチドッグタイマを読む AVRウォッチドッグタイマー。コード内からウォッチドッグタイマーを読み取る方法はありますか? 使用目的例:ウォッチドッグタイマーが最後にリセットされてから経過した時間の概算(非常に大まかな、+/ - 1秒)を得るこれにより、私のコードでは、外部RTCなどを使用せずに、スリープ状態になった時間を推測できます。 私はattiny85データシートを調べてみましたが、見つかりませんでした。アイデアの人?
回答: *Note that I am not advocating this solution - only showing that I think it is possible. I think that Kvegaoro's answer is more practical and even likely to use less power for almost all real-life use cases.* こんなことができると思いますが... 1. Set up watchdog interrupt only mode. 2. Set up the prescaller to the maximum 8s delay. 3. Start the Watchdog. 4. Sleep. 5. Wake due to some external INT other than the Watchdog. 6. Stop the Watchdog immediately upon waking. 7. In a loop, step though the prescaller values from highest to lowest. d. clear the Watchdog interrupt flag a. set the prescaler to the loop value. b. check to see if the Watchdog interrupt flag has become set. c. shift the bit from the previous test into a shift register. これらすべての最後に、シフトレジスタはプリスケーラカウンタ内の値の上位ビットを持っているはずです。 これ、私の推測ではあります。たとえそうでなくても、このメソッドはまだ機能することができます、あなたはそれが呼び出されたことを示すフラグをどこかに設定するウォッチドッグ割り込みハンドラを作成する必要があります。次に、プリスケーラが更新されるたびにこのフラグをチェックして、割り込みが発生したかどうかを確認します。 あなたがこれが実際に意味をなさない稀なユースケースの1つを持っていると私に納得させることができるならば、私は詳細を打ち出すためにいくつかのコードをスピンアップします!