我有PIC18F87J11和MPLAB C18。我试图通过强制设备进入休眠状态来限制设备的电池消耗。我注意到,一旦进入睡眠模式,timer0就会停止计数,直到唤醒。此外,我所知道的唤醒设备的唯一方法是当它接收到来自另一个节点的消息时,因为我有一个MRF89XA收发器。
为了让我的设备进入休眠状态,我只需调用这个函数,该函数在编译器头文件中定义。
Sleep(); Q1:除了从某个节点接收消息之外,我如何唤醒设备?在DataSheet中,它说通过中断退出,或者通过重置退出,但是如果没有计时器,你怎么做呢?
通过阅读DataSheet,它指出必须使用Timer1才能监控时间,这是真的吗?
我真正想要的是尽可能降低电池使用量,并让计时器工作在睡眠模式下。
谢谢!
发布于 2013-07-17 04:34:29
是的,Timer1是唯一可以在睡眠模式下运行的定时器。来自数据表:
从任何其他模式进入睡眠模式的
不需要时钟开关。这是因为一旦控制器进入休眠状态,就不需要时钟了。如果选择了WDT,INTRC信号源将继续运行。如果启用了Timer1振荡器,它也将继续运行。
要以最低功耗运行计时器,请使用睡眠模式和Timer1。
如果您希望在电源管理模式下使用其他外设,如Timer0,除了休眠模式外,还有一种称为空闲模式的替代模式:
如果在执行
SLEEP指令时将IDLEN位设置为‘1’,则外设将从使用SCS<1:0>位选择的时钟源开始计时;但不会计时。时钟源状态位不受影响。设置IDLEN并执行SLEEP指令提供了一种从给定的运行模式切换到其对应的空闲模式的快速方法。
要将IDLEN位设置为1,请在发出Sleep();之前添加OSCCON |= 0b10000000;。
显然,空闲模式会比休眠模式消耗更多的电量,因为外围设备仍在运行。
发布于 2014-02-20 18:03:36
我确实遇到了这个问题,但这只是我的一个小疏忽。Timer1可以有/有一个同步位,叫做:
T1CONbits.nT1SYNC = 1;// Timer1外部时钟输入同步控制位。
这使定时器1与主时钟同步。由于主时钟不在休眠模式下运行,因此它不能同步,因此Timer1不工作。我所需要做的就是确保我没有将Timer1同步到主时钟。将其配置为正确的睡眠模式,即不是深度睡眠、空闲或vBAT,一切都会正常工作。
我使用的是带有PIC18F97j94的MPLABx和XC8
https://stackoverflow.com/questions/17683624
复制相似问题