電子工作 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振れたりした。極小さい電流であることを実感した。

 

 

Menu Pageへ戻る    

Topへ戻る