四年多前整过一次低功耗的,当时调试也是OK的,程序基本上是移植过来了。
这次重新改动一下,做了,本以为捣腾一天差不多了,结果又捣腾了两天。
硬件平台是使用9V的电池,系统稳压到5V,普通的稳压IC肯定不行的,必须是LDO型的IC。
LDO选的是国产的BL8061,INPUT VOLTAGE是2-16V,OUTPUT CURRENT:250mA,典型的消耗是2uA,BL8060输入电压是1.5-14V,最大电流时200mA,功耗是1uA。
稳压前后的电解电容1uF。因为板子做的是贴片的,贴片的手头现成的只有10V/22uF,偶加在稳压后,因为9V电池空载电压就接近10V了,稳压前偶弄了个普通的杂牌铝电解,结果第一晚就被这颗害死了。
第一晚折腾了俩小时,发现咋掉电休眠模式后电流还是800多uA,记得以前只有1uA左右的,咋回事?
因为经过时间比较长了,重新看了有关休眠的PDF文档资料,完了,自说自话的加了句关闭全部外设的命令,就是功耗抑制寄存器PRR全部置位,发现电流还是大,第二天早上,偶调试了下,电流还是大,后来想想会不会这种垃圾杂牌铝电解漏电流太大,结果拆掉,休眠时的总功耗就3uA,其实,掉电休眠后,AVR的M48PA总消耗电流大约是0.5uA,LDO1uA左右,外围还有个AD欠压检测电流,大约消耗1uA左右,整体全部加起来大约就是2.5-3uA之间。达到预期目的。
接着,休眠唤醒后,发现键盘工作老不正常,查看原来的程序,除了扫描的矩阵阵列I/O口变化了,其他没啥变化啊,反复比对,测试还是不行,果断弄个不休眠的测试程序,移植过来后,键盘操作完全正常,知道问题百分百出在休眠的那些设置上,果断查。
查休眠后的一些寄存器设置,是否开启了,以前第一次弄的时候吃过DIDR0,DIDR1的亏,看看休眠唤醒后都开启复位了啊。
试了几次,不行;再看休眠前关闭的那些设置,发现就多了个PRR设置,屏蔽掉后,发现完全正常了。
休眠时,偶全部置位1,休眠后,偶全部设置为0,恢复,但是发现键盘执行就是不正常,屏蔽掉,键盘程序执行正常了,而且消耗的电流基本上没差别,就差0.2-0.3uA左右。
待有时间再多调试下看看到底是何种原因导致PRR未恢复正常。
休眠电流要最小:掉电模式必须的,然后能关闭的功能全部关闭,关闭BOD检测,关闭看门狗,电压越低越好,1.8V,频率越低越好。
省电模式因为开启了TIMER2定时器,电流会大十几个uA。