四年多前整過一次低功耗的,當時調(diào)試也是OK的,程序基本上是移植過來了。
這次重新改動一下,做了,本以為搗騰一天差不多了,結果又搗騰了兩天。
硬件平臺是使用9V的電池,系統(tǒng)穩(wěn)壓到5V,普通的穩(wěn)壓IC肯定不行的,必須是LDO型的IC。LDO選的是國產(chǎn)的BL8061,INPUT VOLTAGE是2-16V,OUTPUT CURRENT:250mA,典型的消耗是2uA,BL8060輸入電壓是1.5-14V,最大電流時200mA,功耗是1uA。穩(wěn)壓前后的電解電容1uF。因為板子做的是貼片的,貼片的手頭現(xiàn)成的只有10V/22uF,偶加在穩(wěn)壓后,因為9V電池空載電壓就接近10V了,穩(wěn)壓前偶弄了個普通的雜牌鋁電解,結果第一晚就被這顆害死了。
第一晚折騰了倆小時,發(fā)現(xiàn)咋掉電休眠模式后電流還是800多uA,記得以前只有1uA左右的,咋回事?因為經(jīng)過時間比較長了,重新看了有關休眠的PDF文檔資料,完了,自說自話的加了句關閉全部外設的命令,就是功耗抑制寄存器PRR全部置位,發(fā)現(xiàn)電流還是大,第二天早上,偶調(diào)試了下,電流還是大,后來想想會不會這種垃圾雜牌鋁電解漏電流太大,結果拆掉,休眠時的總功耗就3uA,其實,掉電休眠后,AVR的M48PA總消耗電流大約是0.5uA,LDO1uA左右,外圍還有個AD欠壓檢測電流,大約消耗1uA左右,整體全部加起來大約就是2.5-3uA之間。達到預期目的。
接著,休眠喚醒后,發(fā)現(xiàn)鍵盤工作老不正常,查看原來的程序,除了掃描的矩陣陣列I/O口變化了,其他沒啥變化啊,反復比對,測試還是不行,果斷弄個不休眠的測試程序,移植過來后,鍵盤操作完全正常,知道問題百分百出在休眠的那些設置上,果斷查。查休眠后的一些寄存器設置,是否開啟了,以前第一次弄的時候吃過DIDR0,DIDR1的虧,看看休眠喚醒后都開啟復位了啊。試了幾次,不行;再看休眠前關閉的那些設置,發(fā)現(xiàn)就多了個PRR設置,屏蔽掉后,發(fā)現(xiàn)完全正常了。
休眠時,偶全部置位1,休眠后,偶全部設置為0,恢復,但是發(fā)現(xiàn)鍵盤執(zhí)行就是不正常,屏蔽掉,鍵盤程序執(zhí)行正常了,而且消耗的電流基本上沒差別,就差0.2-0.3uA左右。待有時間再多調(diào)試下看看到底是何種原因導致PRR未恢復正常。
休眠電流要最小:掉電模式必須的,然后能關閉的功能全部關閉,關閉BOD檢測,關閉看門狗,電壓越低越好,1.8V,頻率越低越好。
省電模式因為開啟了TIMER2定時器,電流會大十幾個uA。