当前标签

WDT

在此以PIC16F87X为例:MCU处于sleep时,用WDT定时,如何使其在宽温度范围内工作定时相对一致,误差尽量小呢?

答:一般MCU处于sleep时,WDT(看门狗)是停止状态,用WDT的主要目的,是在程序运行当中,MCU受到外面杂讯干扰,导致程序运行乱掉或MCU当掉,此时就须WDT(一般WDT时钟来源是选用内部RC振荡)来自救及做复位动作,而当MCU处于sleep时,其MCU是处于省电模式状态,因主振停止所以程序不运行,此时就WDT可以停止动作(此模式WDT时钟来源是选用主晶振系统),如果MCU处于sleep时,又要WDT能继续动作,此时只有一个目的,就是用WDT的时间段来做定时工作(因程序停止运行,无法清除WDT计数器,故WDT计数一定会溢出),而在这个模式下因主振停止(因要省电)的WDT时钟来源只能选用内部RC振荡,所以RC振荡的频率会受工作温度及电压变动而产生飘移,所以要省电模式下不建议用WDT来做定时。 如果要省电模式下做定时工作,有一个很好建议,可采用HOLTEK MCU双振荡系列,如HT49XX,HT47XX,HT48XX,HT46R6X等系列,其优点在省电模式下,其主振停止而保持第二振荡系统维持振荡,此振荡系统为RTC(Real Time Clock 32768Hz振荡系统),工作电流维持在2~3uA(工作电压3V)之间,又因是用32768晶振,不受工作温度及电压变动的影响,可准确做定时工作。

在设计软体时,大多单片机都设有看门狗,需要在软体适当的位置去喂狗,以防止软体复位和软体进入死循环,如何适当的喂狗,即如何精确判定软体的运行时间?

答:大多数单片机都有看门狗定时器功能(WDT,Watch Dog Timer)以避免程序跑错。HOLTEK有一款基本I/O型单片机--HT48R05A-1,我们就以它为例做个说明吧。 首先了解一下WDT的基本结构,它其实是一个定时器,所谓的喂狗是指将此定时器清零。喂狗分为软件和硬件两种方法。软件喂狗就是用指令来清除WDT,即CLR WDT;硬件喂狗就是硬件复位RESET。当定时器溢出时,会造成WDT复位,也就是我们常说的看门狗起作用了。 在程序正常执行时,我们并不希望WDT复位,所以要在看门狗溢出之前使用软件指令喂狗,也就是要计算WDT相隔多久时间会溢出一次。HT48R05A-1的WDT溢出时间计算公式是:256*Div*Tclock。其中Div是指wdt预分频数1~128,Tclock是指时钟来源周期。如果使用内部RC振荡作为WDT的时钟来源(RC时钟周期为65us/5V),最大的WDT溢出时间为2.1秒。 当我们得到了WDT溢出时间Twdt后,一般选择在Twdt/2左右的时间进行喂狗,以保证看门狗不会溢出,同时喂狗次数不会过多。 软件运行时间是根据不同的运行路线来决定的,如果可以预见软件运行的路线,那么可以根据T=n*T1来计算软件的运行时间。n是指运行的机器周期数,T1是指机器周期。HOLTEK单片机是RISC结构,大部分指令由一个机器周期组成,只需要知道软件运行了多少条指令,就可以算出运行时间了。HOLTEK的编译软件HT-IDE3000中,就有计算运行时间的工具。但是对于CISC结构的单片机,一条指令可以由若干个机器周期组成,那么就需要根据具体执行的指令来计算了。