今天测试了下看门狗。
可以使用wdt.h中的wdt_enable(value)和wdt_disable(),也可以使用自己定义的WDT_enable(uint8_t count)和WDT_disable(void)。
复位看门狗用wdt.h中的wdt_reset()。
----------------------------------------------------------------------------------------------------------------------------------
使用PA0测试复位时间:
1、上电时PA0输出0.5s的高电平(示波器)
2、接着PA0拉低,同时启用看门狗(2s后复位)
3、如果看门狗复位,那么复位后会再次将PA0会被拉高,而且复位前PA0的低电平持续时间应该是2s(5V电源下)
测试代码:
#include #include "watch_dog.h" #include "_noinit.h" #include "system.h" #include "config.h" int main(void) { // PA0为输出口 DDRA = (IO_OUTPUT << DDA0); // PA0拉高 PORTA = (1 << PA0); // 维持0.5秒 delay_ms(500); // PA0拉低 PORTA &= ~(1 << PA0); // 使能看门狗 @ 2s wdt_enable(WDTO_2S); // WDT_enable(WDTO_2S); // // 1. 看门狗在2秒后复位,所以PA0的低电平会维持2秒 // 2. 而后芯片复位,PA0会被拉高 // 3. 跳转到1 // // 记录复位次数 _noinit_using(); while(1) { } return 0; } 增加使用.noinit特性测试复位: 上面的_noinit_using()使用了.noinit特性,通过观察PORTB上的8位LED的状态(二进制计数器)得知复位次数。 测试代码: uint8_t v_noinit __attribute__ ((section(".noinit"))); void _noinit_using(void) { v_noinit++; // 8位LED,低推 DDRB = 0xFF; PORTB = 0xFF; PORTB = v_noinit; } _noinit_using具体原理参考这里: http://blog.csdn.net/manon_des_source/article/details/51536802 测试结果: 1、示波器可以看到PA0输出的是0.5的高电平H和1.86秒的低电平L。 同时PORTB上的8位LED组成的二进制计数器在0.5秒的高电平出现时就会加1。 2、0.5秒高电平是启动看门狗之前的时间,1.86秒是看门狗定时器溢出时间,溢出后复位MCU。 于是又重新出现0.5秒的高电平。 这说明看门狗工作正常,确实实现了复位MCU。 3、当然每次下载程序或看门狗复位后,PORTB上的8位LED组成的二进制计数器也会加1 ---------------------------------------------------------------------------------------------------------------------------------- 结果误差分析: 1、复位时间只有1.86s,而不是2秒。 测试电源电压是5V,所以应该是温度和示波器造成的误差。 特地查看了下Atmega16的Datasheet,发现在室温30度下,WDT的频率大概是1020Hz(下图)。 频率是1.02倍,对应的时间应该是 2s / (1020 / 1000) = 1.96s。 剩下的误差,也许是示波器的问题吧。 另外、芯片使用的是8MHz的时钟,这需要手动校准,看看复位时间是否更接近2s |<----待测试-question-001 或者使用内部自动校准的1MHz时钟测试。 ----------------------------------------------------------------------------------------------------------------------------------
上一篇:A005-软件结构-从前后台到调度器
下一篇:B001-Atmega16-定时器1-(ques=1)
推荐阅读最新更新时间:2024-11-11 11:36
推荐帖子
- 如果你开发一个生物大数据管理平台,该如何选用UDP/TCP技术提高大数据传输性能。
- 如果你开发一个生物大数据管理平台,该如何选用UDP/TCP技术提高大数据传输性能。如果你开发一个生物大数据管理平台,该如何选用UDP/TCP技术提高大数据传输性能。好高深的样子,要数据挖掘吗?
- Sassa的番茄号 TI技术论坛
- SM32f429ZI通过FSMC读写SDRAM失败,求指教
- 使用SM32f429ZI芯片,通过FSMC读写32M的SDRAM(IS42S16160J),测试读写失败。每次擦除和写入的数据在memory窗口看都只有第一行显示,后面全是FF。感觉memory是不可信的。执行全片擦除(全片写入0x00)后结果如下图:而且发现擦除任意一个byte,在memory就会显示第一行全是0x00,然后其他行全是FF执行全片写入后结果如下图:跟擦除一样,写入任意一个字节,都会在第一行显示该字节,其他行为FF。所以觉得m
- wjroy11 stm32/stm8
- 大电容滤低频,小电容滤高频?
- 不了解多组LCR串联后再并联的特性,没有相当的多阶LC滤波器、多级LC陷波器设计能力,千万不要以为用瞎猫碰死耗子的方法可以试出好用的滤波电容器组,你高价买来的某些优秀的参数可能会害死你。大电容滤低频,小电容滤高频?1000uF高频电解电容与典型104MLCC并联的阻抗特性图上图的Y轴转为对数 可见,多颗不同的电容并联,ESR并不是越小越好,这下,知道高手高手高高手为什么要在退耦用的MLCC上串零欧电阻(实际约50mR)了吧!谢谢分享
- PowerAnts 模拟电子
- IEC61850方案分享,基于全志、瑞芯微国产平台实现!
- 什么是IEC61850协议?IEC61850是一种用于在电力自动化系统中进行数据交换和控制的通信协议。它定义了一种标准化的通信和数据模型,以支持设备和系统之间的数据交换和互操作性。IEC61850协议被广泛应用于电力系统自动化和数字化转型中,特别是在智能电网和分布式能源资源管理中。通过使用IEC61850协议,电力系统的组件可以更加高效地互相通信,实现更加精确的监测和控制。IEC61850协议应用框架图如下:图1IEC61850标准的服务
- 别打牛牛 ARM技术
- 【得捷Follow me第3期】任务5:使用外部传感器
- 环境光传感器:这是一颗模拟传感器.通过Grove连接到核心板的GPIO2接口,利用内置的ADC进行电压读取ADC读取时可以以u16格式读数,也可以直接拿到具体电压值.直接调用方法即可.这颗环境光传感器使用的是SENBA的LS06-S传感器,串联一颗68k电阻,中间输出至LM358.由于输出与光照强度不太不线性,这里不计算具体照度值,只做定性分析.旁边放一个手机作为亮度参考.读取的数据通过显示屏显示.代码如下adc=ADC(Pin(2)
- epix DigiKey得捷技术专区
- 给当年磁学没学好的朋友《磁性元器件分册》-赵修科
- 这是一本很经典的有关磁性元件的书在学校一般磁方面讲得比较少很多人也没有理解什么是磁场上次看到一个人怎么都不理解(很多人仅仅凭感觉来理解问题而非用逻辑,用定量的计算)为什么开气隙的磁环中磁能大多储存在气息中(准确的说是储存在磁导率低的地方,如果气隙处塞入塑料磁能也会储存于塑料处),因为低磁导率的部分磁阻(磁导率的倒数)最大,所以同样的磁通密度磁场更强,储能也就多了,其实这就像电容一样电容的电场能储存在两个平板之间而非导线上。 给当年磁学没学好的朋友《磁性元器件分册》-赵
- ssawee 模拟电子
设计资源 培训 开发板 精华推荐
- TE可穿戴解决方案助你打造暖心大白,答题赢TTI好礼
- 用富士通Cortex-M3 Easy Kit开发板,DIY出你的精彩!l
- ADI基于ADPD188BI的烟雾探测器集成解决方案 有奖直播 5月13日上午10:00-11:30 为您揭晓!
- 有奖直播:恩智浦基于RT06F的人脸识别技术解决方案
- 是德科技 DATA Center 资料,满足您的需求~下载有好礼!
- 深入剖析恩智浦LPC1000处理器
- ADI有奖下载活动之12 ADI基于视觉的占用检测解决方案
- 英飞凌BMS解决方案,为电动汽车和储能系统保驾护航!
- 看视频,读资料,参与PI答题有惊喜!
- ST有奖直播:智能功率开关在工业自动化行业的应用