//Logo Image
作者:林能祺(2009-08-02);推薦:徐業良(2009-08-14)

單晶片省電技術睡眠模式設定

單晶片省電技術目的在讓單晶片可以最低電量進行長時間的工作,例如以單片鋰鈷電池(3.7V)或三顆乾電池(4.5V)就可讓單晶片持續工作三個月甚至半年以上。應用於單晶片的省電技術可從電路設計、降低工作頻率、單晶片睡眠模式等方面著手,本文主要討論單晶片睡眠模式的設定方式。

1.     單晶片睡眠模式開啟

本文採用Microchip 18LF252之晶片,LFL其所代表之含意為IC之工作電壓為2.0V~5.5V,若型號無字母L則其工作電壓為4.2V~5.5VIC之選用與系統工作時間及電池有相當密切的關係,若以33號乾電池為系統工作的電壓源,則IC的選擇建議採用LF系列的晶片,可更增長系統的工作時間。

CCS的編譯軟體中無論使用何種晶片皆需對晶片定義,如下圖中#INCLUDE <18F252.H>,若使用LF系列的晶片,在CCS中仍定義為<18F252.H>,因晶片運算架構皆相同,只有晶片工作電壓不同,所以在CCS中引入檔頭仍為F系列的晶片。

1. CCS引入檔頭與時脈定義

1程式第二行中定義時脈的快慢,也影響系統的耗電量,當時脈越快、在相同的時間內會耗較多的電量,若要以降低時脈的方式省電,只需將時脈降低為20Mhz8Mhz等速度即可。

睡眠模式程式撰寫如圖2。首先宣告一睡眠模式sleep_mode的旗標為全域變數,接下來在主程式中宣告一個計數的變數couter,並以內部提升電阻的方式,將單晶片的PORT_B的腳位拉高(port_b_pullups(true);接下來初始化sleep_mode的旗標,ext_int_edge(H_TO_L)意思是宣告當外部中斷腳位從HIGH的狀態變成LOW的狀態,就產生中斷,並且進入中斷副程式;接下來將外部中斷打開,並打開全部有宣告使用的中斷。

2. 睡眠模式主程式

在主程式中主要的迴圈每秒會跑一次並閃一下系統指示燈,另外在外部中斷的腳位(PIN_B0)上與地線之間接一個開關,當開關被按下就會進睡眠模式,再按一次就會跳出睡眠模式。counter變數則是用來計算迴圈已跑的次數,如何跳出睡眠模式下節將作說明。

2.     喚醒睡眠模式

當單晶片在睡眠時,要從睡眠中喚醒單晶再繼續工作的方法很簡單,只需將外部中斷的腳位接地,也就是按下開關,單晶片就會醒來繼續工作。如上節所述,當產生中斷時會進入外部中斷的副程式,副程式撰寫如下:

3. 中斷副程式

每當進入中斷副程式時,先將button_pressed旗標清除,接下來檢查button_press是否為假,也就是開關未按下,若未按下就將sleep_mode的旗標設為真,並改變中斷的形態為L_TO_H,如此當一離開中斷副程式後在主程式中就會進睡眠模式;若button_press為真,則將button_press旗標清除、並將sleep_mode清除,同時把外部中斷的型式改為H_TO_L。程式最後三行檢查腳位是否有被按下,如果被按下則button_press值設為真,delay_ms(100)在此用意為去除開關的機械臂回彈導致誤判。