看门狗定时器+ Arduino


8

如何使用Arduino设置硬件看门狗定时器?


2
我想你应该选择其他的答案Arduino的有内置的看门狗。
马特·威廉森

Answers:


7

有许多专用的硬件看门狗芯片,但是使用常规的555定时器IC和几个支持部件就足够容易了。将555配置为具有非常长的“高电平”周期和相对短的(也许0.3秒)“低电平”周期的不稳定模式时,输出可以通过二极管连接到Arduino的复位引脚,以使看门狗成为集电极开路设备。然后,Arduino可以使用数字输出来定期重置看门狗,以开启一个晶体管,该晶体管使555上连接的定时电容器放电,从而防止其到达触发点,从而导致其重置Arduino。

有关执行此操作的项目的一些基本信息,请访问http://www.practicalarduino.com/news/id/471。


1
phooky是绝对正确的,但是内部WDT有其局限性:它不能运行超过6秒钟(取决于CPU型号),并且无法完全通过软件进行干净的“重新引导”。您可以告诉CPU跳到位置0并重新启动引导加载程序,但随后可能会在RAM中留下一些令人毛骨悚然的内容,并且仍在CPU中设置了诸如中断标志之类的内容。在硬件中置位RESET可以确保Arduino提供一个干净的环境。
jonoxer

2
使WDT超时导致“干净复位”,因为将确保所有寄存器都在定义的状态下启动。在软件中完成它就像禁用中断和无限循环一样简单。
尼克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
}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.