Avr 如何在atmega128中为10秒延迟配置看门狗定时器
我正在使用ATMEGA128 16AC。所以我想用看门狗定时器至少在10秒后重置AVR。如果在10秒内未按下ex键盘键,则控制器应重新启动 我尝试使用诸如wdt_enable(value)之类的库函数;也通过配置WDTCR reg,但未能获得10秒的延迟 请帮我解决这个问题Avr 如何在atmega128中为10秒延迟配置看门狗定时器,avr,atmega,Avr,Atmega,我正在使用ATMEGA128 16AC。所以我想用看门狗定时器至少在10秒后重置AVR。如果在10秒内未按下ex键盘键,则控制器应重新启动 我尝试使用诸如wdt_enable(value)之类的库函数;也通过配置WDTCR reg,但未能获得10秒的延迟 请帮我解决这个问题 提前感谢。看门狗计时器取决于两件事(数据表中): 看门狗RC振荡器工作模式(第41页表13)。您希望将其设置为可能的最低值,即1MHz(默认值) 看门狗预分频器(第56页表22)。您希望将其设置为可能的最高值,即2048K
提前感谢。看门狗计时器取决于两件事(数据表中):
- 看门狗RC振荡器工作模式(第41页表13)。您希望将其设置为可能的最低值,即1MHz(默认值)
- 看门狗预分频器(第56页表22)。您希望将其设置为可能的最高值,即2048K,并提供1.8秒的最大超时(如果Vcc为5V)
我对PIC16系列有更多的经验,但我很确定这将在AVR中起作用。在ATmega 128中,使用16位定时器,如下所示配置它
// Enable overflow interrupt.
TIMSK |= (1 << TOIE1);
// Enable global interrupts.
sei();
// Start timer at Fcpu/1024. Approx 3.33sec for each cycle.(F_CPU = 16MHz External)
TCCR1B |= (1 << CS12) | (1 << CS10);
只需检查计时器ISR中的状态即可
if(system_timer_count == INPUT_KEY_TIMEOUT) {
//Do something if the following condition met.
}
通过这种方式,您可以在不干扰控制器正常工作的情况下创建任何时间延迟。只有当上述条件满足时,控制器才准备在ISR中执行任何操作
希望这对其他人有所帮助。嗨,Oguz Meter,谢谢你的反馈。事实上,我还没有完全同意你的回答。你能用一段代码解释一下吗。或者你可以给出一个提供简短教程的链接。嗨,Oguz Meter,谢谢你的提示。我已经配置了一个16位计时器并生成了所需的时间延迟,即使在同一个计时器ISR中使用看门狗,我也能够重置微控制器。跳到0不是真正的重置。这与其说是一个实际的解决方案,不如说是一个工作范围。需要做的是配置看门狗触发中断而不是重置,在中断回调中增加一个计数器,当达到预定的时间间隔时,将看门狗重新配置为重置模式,但使用最短的可用时间间隔(几毫秒),这将导致正确的重置。此处提供了一些代码:
if(system_timer_count == INPUT_KEY_TIMEOUT) {
//Do something if the following condition met.
}