PIC单片机学习第六天--8休眠
单片机型号----PIC16LF1508单片机
PIC单片机的一大优势就是----低功耗,那么它的低功耗是如何设计的,如何实现的呢?
低功耗实现的方式
1,睡眠(sleep)
睡眠方式是我们最常用的一种方式来降低功耗,但睡眠期间单片机不能做任何的事情。对于那些没事情就睡着,有事情就做一下的情况睡眠无疑是功耗最低的处理方式。
比如:
睡眠+ I/O电平变化中断唤醒 当按键没按下时,单片机睡眠,当按键按下后,执行相应的工作。
睡眠+数据接收中断唤醒 这样单片机就可以再没有接收到数据时候进入睡眠状态,接收到数据的时候就唤醒然后处理数据。当然首先单片机要有相关的外设比如SPI ,I2C,USART,等这些支持这些通讯的模块。
睡眠+看门狗唤醒 这个可以用在需要定时唤醒做事情的场合
2,降低时钟频率
如果即想功耗低,又想单片机在能低功耗的情况下工作。这无疑是个最好的选择。
PIC单片机 比如PIC16F1823 /1829可以选择从32MHz到31KHz的内部时钟频率,我们通常可以将单片机设置在 4MHz 以上的频率下工作,如果需要单片机降低功耗的时候可以降低频率比如在31KHz的频率下工作。
虽然PIC16F1823数据手册中写到,单片机在睡眠电流只有只纳安,在31KHz的电流有几微安。但事实纳安只是个幻想。在项目一个中我使用降频得到的最低功耗是50微安左右,采用睡眠也是50微安。因为在如此低的频率下,功耗主要是流失在I/O口上了。
3,电流大户
单片机工作时钟频率,要降低功耗首先要不就睡眠(关掉时钟),要么就降低频率。
最耗电流的模块 就数ADC模块,其实模块的耗电和他比起来就是小巫见大巫。所以要低功耗ADC模块绝对不能开。
还有个用电大户就是I/O口,I/O要不上拉,要不下拉,不能悬空,除此之外还有其他因素,比如I/0口的输入输出状态,比如和其它芯片连接要串个电阻。
这里就介绍下如何从正在运行的模式下进入睡眠模式呢?
可通过执行sleep指令进入睡眠模式,
SLEEP(); //进入睡眠模式
在官方头文件pic.h中有如下定义:
#define SLEEP() __asm("sleep")
进入休眠模式时,会存在以下条件,这里只着重说几个,我自己遇到的:
cpu时钟会被禁止
31 KHZ LFINTOSC不受影响,使用它工作的外设可以在休眠模式下继续工作。
数据手册里罗列了很多条件。这里我只说明这两个
如何从休眠模式中被唤醒:
任何外部中断
可以在休眠期间运行的外设产生的中断
这两个事件被认为是程序执行的继续。
这一章就说明了一个寄存器----VREGCON----稳压器控制寄存器
只有bit1----VREGPM有用,主要用来通过将 VREGCON 寄存器的 VREGPM 位置1,可以选择低功耗休眠模式。如果该位置 1,当器件处于休眠模式时,LDO 和参考电路会被置为低功耗状态;
还有和掉电模式(SLEEP)相关的几个寄存器:
在睡眠模式下TMR0,TMR1,TMR2三个定时器/计数器:
TMR0----在处理器处于休眠模式时,Tmer0 无法工作。在处理器处于休眠模式时,TMRO 寄存器的内容将保持不变。这句介绍在芯片手册的18.1.6章节。
TMR1----只有在设置为异步计数器模式时,Timer1 才能在休眠模式下工作。在该模式下,可使用外部晶振或时钟源使计数器递增计数。在手册的19.8章节。
TMR2----在处理器处于休眠模式时,Timer2 无法工作。在处理器处于休眠模式时,TMR2 和 PR2寄存器的内容将保持不变。在20.4章节。
以上就是对于PIC16LF1508单片机的睡眠模式的介绍,供大家参考学习。
参考: