電子工作 15 – 12F629を使った電池駆動の超省エネプログラム式スイッチ回路 – 電池でGO!
概要
12F629に内蔵されているスリープ機能を使うと、小さい電池で、超長持ちするスイッチ回路を組むことが可能になる。すなわち、スイッチを押して、何かの仕事をさせるルーチンを実行させ、終了したら消費電流が極端に小さいスリープ状態に入る。この状態では、消費電流が0.1uA以下のレベルになるので、2ー3Vの小さい電池で長期にわたってスイッチ機能を稼動させることが出来るようになる。
回路
下に示すようにいたって簡単である。12F629には、電源、GNDの外に、SW入力と外部出力の端子(ここではPhoto Relay)がつながる。SWは押すと導通するタイプのもの。SWをOFF状態(導通していない)からONにしても、ON状態からOFFにしても、割込みがかかって、ルーチンプログラムが実行される。終了するとスリープ状態になる。出力(GP4)につながっているPhoto RelayはGP4がHighの状態で、内部の発光素子が点灯し、ピン4と6間の抵抗が2MW以上から1−2Wに低下し、導通する。この間には最大電流300mAの負荷をかけることが出来る。今回は豆球をつないであるが、消費電流が300mA以下のものならモータでも何でもよい。
プログラム
以下に示すように、INTCON、IOC, OPTION_REG、WPUなどの設定や設定位置が、プログラムが動くかどうかのポイントであった。そして、@sleep という眠らせるコマンドが大事な役割を果たしている。動作させたいルーチンは *** Demo routine *** と Goto SleepLoopの間に入れる。
'****************** プログラミング備忘録
*******************
'IntS629a.bas 2007.1.18
'This
demo program functions as follows: when SW (GPIO.1) is pressed,
'an
interrupt occurs, executing the Demo routine (blinks LED (GPIO.4) twice)
'and
then enters into the sleep mode where current consumption is below 1 uA.
'Main
themes here are how to use the interrupt and the low-power consuming
'sleep
mode (@sleep), where battery operation becomes possible. Succeeded!!
'******** Pin
connection ******************
'Pin
1: Vdd (3.0V) - battery operated
'Pin
8: Vss (GND)
'Pin
6: GPIO.1: input - connected to SW (n.open) via 560 ohm resistor
'Pin
3: GPIO.4: output - connected to LED Red via 560 ohm resistor to GND
'**********
ここからがプログラム本体 ***************
LEDmain VAR GPIO.4 'LEDmain on GPIO.4
TRISIO=%000010 'GPIO.1
(Interrupt) - input
CMCON=7
'Disable Comparators.
WPU=%000010
'Weak Pull-Up on GPIO.1 only
OPTION_REG.7=0 'Enable Weak
Pull-Up's
IOC.1=1
'Detect input at GP1 - Essentiall !!
INTCON.3=1 'Enable the
port input-level change interrupt
SleepLoop:
LEDmain=0
INTCON.0=0 'Clear GPIF
@Sleep 'Have good
sleep! - This is a key command
INTCON.0=0 'Clear GPIF
'***
Demo routine *** ‘Insert your routine
below
High
LEDmain
'Start of Main routine
Pause 500 'Wait .5 seconds
Low
ledmain
Pause 500
High
ledmain
Pause 500
Low
ledmain
Pause 500
High
ledmain
Pause 1000
Low
ledmain
Goto
SleepLoop
‘**********
ここまでがプログラム ***************
'Note:
'AKI Programmer's configurations:
'FOSC - INTOSC(GP4:I/O); WDTE -
Disable; PWRTE - Disable
'MCLR - Internal ; BODEN -
Diable; CD - Disable; CDP - Disable.
考察・余談
仕事を終わって、SW入力待ち状態での消費電流は、通常のデジタルテスターで測れない程小さい。つまり、0.1mA以下なので、2V以上(12F629の保証最低稼動電圧)の小容量の電池でも長期間にわたって使えそうだ。趣味の電子工作では、あまり縁のなかった、商用の小物に広く使われているボタン電池も使えそう。さて、何に使うか。とにもかくにも、ずっと考えていた回路とプログラムが作成出来たので、ほっとした。
mA レベルでは、12F629を載せた実験ボードに手をかざしただけでも、テスターの表示が数uA振れたりした。極小さい電流であることを実感した。