ATMEGA324P的AVR看门狗使用

2020-02-13来源: eefocus关键字:ATMEGA324P  AVR  看门狗使用

AVR芯片大多数都有看门狗功能,看门狗电路实际上是一个定时电路,该定时器使用内部独立的1M的RC振荡器,根据设置看门狗的定时时间,当程序运行超过规定的时间后,如果没有及时复位看门狗(俗称喂狗),看门狗定时器就会发生溢出,这个溢出将导致程序复位,从而保证在程序跑飞的情况下,不会长时间没有响应。WIN AVR内部带有看门狗函数,需要包含头文件:#include


新的AVR系列(例如,ATMEGA324P等)使用增强功能的看门狗(Enhanced Watchdog Timer),与原来的看门狗相比较,除了有相同复位的功能以外,还增加了中断的功能设计。使用看门狗的中断功能,可以实现从Power Down状态唤醒CPU;另外同时使能中断和复位功能,可以在系统发生错误时,先进入中断状态,保存关键数据到EEPROM,然后再进行系统复位。


下面说明以ATMEGA324P作一个简单例子,简要地说明一下注意要点:

看门狗定时器控制寄存器– WDTCR:



1.A1tmega168由于具有中断功能,所以WDTCR增加了WDIF和WDIE两个额外的bit的功能;


2.增加了WDP3,溢出周期可以有长达8秒;


3.新的看门狗在初始化时,WDT的值不再一定是0。只要MCUSR寄存器上的WDRF置位,WDT也将被强制置位。这时,如果WDE要清零,必须要WDRF先清零。


4.在设计时即使不用WDT,它也可能在无意中被使能,例如在runaway指针和掉电情况下。因此即使不用WDT,在初始代码中一定要检查复位标志,如果WDT系统复位发生要采取处理步骤。


AVR的看门狗是软狗,也是硬狗! 如果熔丝位不设定,就是软狗,因为程序可以关闭,也可以打开 如果熔丝位设定了,就是硬狗,因为程序只可以清除,而无法打开或关闭!如果你的while(1)循环体内每循环一次的时间不超过看门狗的复位时间,只要喂狗一次就可以了。


最近重新设计一个项目,由原先使用的ATMEGA16更新到ATMEGA324P。把原代码转换后,测试结果异常。经过一天多的测试,才发现是新的看门狗惹的祸。以前用ATMEGA16,在初始化后才开始喂狗,可是新的AVR系列(例如ATMEGA324P等),系统复位发生时(除上电复位外) ,WDT可能继续运行,并使用最小溢出周期(大约15mS) ,造成了系统不断复位。根据datasheet,在程序开始时的关狗后一切就恢复正常了:

#include

#include

uint8_t mcusr_mirror;

void get_mcusr(void)

__attribute__((naked))

__attribute__((section(".init3")));

void get_mcusr(void)

{

mcusr_mirror = MCUSR;

MCUSR = 0;

wdt_disable();

}


5.使用看门狗的中断时,当WDIF和WDIE置位,就会产生中断。进入相应的中断程序后,系统自动清零WDIF和WDIE。下次要使用看门狗的中断时必须重新置位WDIE。


//在AVR ICC中对M128的初始化时最近使用下种方式


void Init_watdog(void)


{


WDR();


WDTCR = 0x1F;//设置最大分频


WDTCR = 0x0f;//启动看门狗


}


WDR();


补充,特别说明


使能看门狗不能用 |=,必须要直接赋值=。


还有数据手册上说:


改变定时器溢出时间及禁止(已经使能的)看门狗定时器需要执行一个特定的时间序列:

1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。

2. 在紧接的4 个时钟周期之内将WDE 和WDP 设置为合适的值,而WDCE 写"0”。


所以在WDTCR=0x0E;之前加上一句WDTCR=0x1F;

关键字:ATMEGA324P  AVR  看门狗使用 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic488101.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:以AVR为基础的E2PROM数据动态存储策略
下一篇:AVR单片机的定义以及优缺点汇总

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ATMega328P的MOSI脚引起的单片机重启
这段时间又遇到新问题,四轴在解锁起飞的时候会死机重启,甚至连烧录好的代码都丢失了。换了MPU,换了场管都没有作用。后来在一位朋友的帮助下找到了问题。原因是电机驱动的结构改了下:上一版的电路板,R10这个电阻不是下拉电阻,而是一个限流电阻,串联在D11脚和Q4之间。但是这样有个问题是刚接通电源的时候,MPU初始化未完成,D11偶尔会有轻微电流流出,导致电机旋转。为了解决这个问题,把R10改成下拉了,接通电源电机就不会转了。但是出现了电机通电MPU就复位的情况,查来查去,只有D11脚会这样。这个脚是328P的15脚,MOSI。也不知这个脚的电路有什么特殊的地方,会导致复位。解决办法是,再加上一个1K的限流电阻,问题解决了。但是原因
发表于 2017-11-18
ATMega328P的MOSI脚引起的单片机重启
无线传感器网络节点低功耗系统设计
  1.基于IA4421的控制器模块低功耗设计   1.1便携式模块节点硬件低功耗设计   (1)处理器选择   ATmega324p为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案:   ①TQFP(薄塑封四角扁平封装),体积小,集成度高;   ②6个可通过软件进行选择的省电模式;   ③最高达到20MIPs的吞吐率(在20MHz下)。   (2)接口电路低功耗设计   接口电路的低功耗设计,往往是容易被忽略的一个环节。在这个环节里,首先要选择低功耗的外围芯片,然后根本的方法是使接口电路的常态处于低功耗状态。另外,还要考虑以下两个因素:   ①上拉电阻/下拉电阻的选取。在能够正常驱动后级
发表于 2009-10-19
无线传感器网络节点低功耗系统设计
爱特梅尔 ATmega1284P微控制器开始付运
外部SRAM和地址闩锁,得以显著降低BOM成本和制造成本,减低复杂性,并缩短设计人员将产品带入市场的开发时间。”       ATmega1284P在掉电模式下的耗电量为100nA,在节能模式下为700 nA,在1.8 V、1 MHz时钟频率的工作模式下则为0.45 mA。其引脚和特性均与ATmega164PA、ATmega324PA和ATmega644PA兼容,这四款器件提供了从16KB闪存转向128KB闪存,以及从1KB RAM转向16KB RAM的普适型转移途径。       ATmega1284P现可单独供货,也可
发表于 2009-10-12
AVR单片机实现对步进电机的细分控制及其应用
需求分析本方案中使用的仪表具有如下特点和设计参数:●指针响应灵敏、走位准确,即收到驱动脉冲后不能丢步;●指针转动平稳,即指针从当前位置到目标位置之间的走位要平稳,正、反转都不能出现抖动;●两相、步距角10o、转动范围300o。根据技术参数可知,采用两相四拍和两相八拍时的步距角为10o和5o,在300o的范围内只能作30和60个刻度划分,在实际应用中,会发现指针步距角不能满足要求而且抖动不可避免。为了实现指针高精度的准确走位和平稳运转,要对步进电机步距进行高分辨率细分,这也是设计的难点所在。步进电机步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载
发表于 2020-02-08
AVR单片机实现对步进电机的细分控制及其应用
有关AVR芯片后缀解释
下面是目前市面上两种常见的后缀:AVR MEGA8-16PU AVR MEGA8-16AU AVR MEGA8L-8PU AVR MEGA8L-8AU,前面黑色部分为芯片型号,后面数字一般会带有容量信息(8即是8K、16即16K)。(L)表示芯片支持低压,有效电压:3.3V-5V。(16)红色数字部分表示芯片最高工作频率,16即是0-16M,8即是0-8M。(PU)黄色:PU代表DIP直插封装,后面U表示工业级环保型。AU即TQFP帖片封装。AVR MEGA48-20PU AVR MEGA48-20AU AVR MEGA48V-10PU AVR MEGA48V-10AU前面黑色部分为芯片型号,后面数字一般会带有容量信息(48即是
发表于 2020-02-08
AVR单片机熔丝位的配置
(1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态, “Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是 “配置熔丝位成为未编程状态“1”或成为已编程状态“0””。(2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时,请首先仔细阅读软件的使用说明,弄清楚“√”表示设置熔丝位状态为“0”还是为“1”。(3)使用CVAVR中的编程下载程序时应特别注意,由于CVAVR编程下载界面初始打开时,大部分熔丝位的初始状态定义为“1”,因此不要使用其编程菜单选项中的
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved