電子工作115 – 12F683を遅いクロック速度31KHzで動かし、割込み機能を使う超省エネLED防犯ライト

Electronics Project 115 – LED Warning Light Working with 31KHz and Interrupt of 12F683

 

概要    Introduction

   今回のプロジェクトは、省エネLED防犯ライトの集大成となる。PICマイコン(マイクロコントローラ)は動作の基本となるクロックの速度を下げると電流消費が下がることが知られている。更に、割込みにアッセンラコマンドの@Sleep を組込んで、必要のない時(昼間)は動作をほぼ停止させることによって電流消費を大幅に抑えられることも分かっている。両者が実現出来て、安価で、簡単なマイコンが130円8ピンの12F683である。.前の電子工作114では、12F629で割り込みの@Sleepを使って昼間の電流消費をほぼゼロに出来た。しかし、このマイコンには内臓クロックを極端に下げる機能は備わっていない。そこで上記の12F683の2つの機能を利用してどれだけ省エネ出来るか試してみた。下の回路図に示すレイアウトで、夜間7色LEDが点滅している時の電流消費が約80uA (micro ampere)で、昼間のLEDが点滅していない時(スリープ時)の電流消費はほぼゼロに近い2uAから1uA以下という結果を実現できた割と電流消費の大きいCdSセンサとVRでつくる分圧回路の代りに、出力3V程度の太陽電池を使ったことも省エネに大きく貢献している 計算では、容量220mAhの3Vリチウムボタン電池1個で6ッ月以上持ちそうだ

 

 In this project, I use 12F683 because its internal clock rate is randomly selectable and it is equipped with the interrupt capability. That is, I selected 31KHz internal clock rate (=1/129 of normally used 4MHz), which significantly contributes to power saving. Meanwhile, using @sleep command in the interrupt program can also reduce power consumption significantly. With the use of these two functions of 12F683, the power consumption drops to about 80 uA (micro ampere) at night when LED is flashing and to 2 to less than 1uA in daytime when no LED is flashing. Here, let’s calculate how long one 3V lithium button battery (220mAh) can drive this device. Assuming that the nighttime is 12 hours in 24 hours, the power consumed per day is 80uA x 12hrs=960uAh=0.960mAh. The number of days and months it lasts is calculated to be 220mAh/0.96mAh=229 days, and 229days/30days=7.6 months. It will last more than 6 months. Am I right?

 

回路図   Circuit Diagram

下図のように回路は電子工作114とほぼ同じだが、PICマイコンには内臓クロック速度を変えられる12F683を31KHz(通常使う4MHzの129分の1の速度)で使用している。電源には3Vのリチウムボタン電池1個を用いている。太陽電池からの入力電圧が約0.8V以下になる(夜間)と割込みがかかって、組み込んだ7色LEDが点滅を始める。0.8V以上では(昼間)はプログラムの@Sleepコマンドで装置がスリープ状態になり、消費電流はほぼゼロになる。

 

The following circuit diagram is almost the same as one in the previous Electronics Project 114. However, the device uses only one 3V lithium button battery. The interrupt function of 12F683 begins to work when the input voltage from Solar Panel drops below about 0.8V. That is, below 0.8V, the 7-color LED starts to flash. Meanwhile, when the input voltage is above 0.8V (in daytime) there will be no LED flashing and the device enters into the sleep mode, consuming almost no power.

 

実験中: テスタに夜間の電流消費が出ている(単位uA)

Experimenting of the system on breadboard, indicating the nighttime power consumption (75uA) on multi-meter

 

実験中:昼間の電流消費は0.1uAとほぼゼロに近い値

Daytime power consumption 0.1uA, almost zero

 

太陽電池(3V、Sanyoの計算機のもの?)、右のように、誤動作を起こさないように黒いテープで2.2V位に電圧を下げて使う

Solar Panel (output 3V), more than half of its surface covered with black tape to lower its voltage to around 2.2V for preventing a possible malfunction due to excessive input voltage level (shown on the right)

 

 

コメント   Comment

1) 12F683の超スロークロック速度31KHzとスリープ割込みを使って、超省エネなLED防犯ライトを製作することが出来た。

2)      太陽電池の電圧が最大の3V近くだと、GP0からの読込み時にエラー発生して誤動作するようなので、電池の一部を覆って電圧2.2V程度に下げた。安定して読込めるようになった。

3)      夜間に7色点滅LED(直径3mm)が点灯する時、装置は約80uAの電流を消費する。このLEDを単独で10K抵抗を介して3Vで点滅させる時の電流消費は70−80uAなので、31KHzで動いている時は、ほぼすべてがLEDの点滅に使われ、プログラムの中での他の動作に使われる電流消費は極わずかのようだ。

4)      今回で、LED防犯ライト シリーズは終了。割込みプログラムが動いたのはうれしい。 いろいろ勉強できた。

 

 

 プログラム    Program

12F683では31KHzの内蔵クロックが選択出来、省エネに貢献出来。それにはOSCCON=%00000001に設定する。通常利用する4MHzに比べ129倍遅くなる。入力にCdS分圧回路を使った別の実験では、クロック速度4MHzでの電流消費は31KHzを使った時のそれの約10倍となった。遅いクロック速度は間違いなく電流消費を下げることが分かった。次に、内蔵の割込み機能を使って昼間のLED点滅が必要ない時に、@Sleepというコマンドを使って電流消費をほぼゼロに抑えることが目標にして、下のように12F683BasicSolarIntr.pbpが出来上がった。当然ながら、24行ほどのステートメントはすべて必要で、順序も大事。プログラムの流れの概略: 太陽電池のGP0への入力電圧が昼間の2.2V位(明るい窓際など)から夜間になって0.V以下(digital L)になると、割込み(GPIOピンのレベル変化)がかかって、If SolarPlIn=0 then Lightupへ飛びLEDの点滅が始まり、暗い夜間中続く。明るくなって、太陽電池からの電圧入力が0.8V以上(digital H)になると、RepeatAに飛んでSleepLoopに戻り、@Sleepでスリープ状態に入り、次の割込みを待つ、この状態で電流消費がほぼゼロになる。 Configuration設定で、WDT BODENDisableはする。

 

The following program can set up the clock rate 31KHz of 12F683 and execute its interrupt routine.

'****************************************************************

'2020/4/15 Worked OK!

'Name of Program: 12F683BasicSolarIntr.pbp

'12F683 and PicBasic Pro 3.1 used

'Internal 31KHz clock rate used

 

'********Pin connection********

'Pin 1: Vdd (3V) coin battery

'Pin 8: Vss (GND)

'Pin 7: GPIO.0 - Solar panel input

'Pin 6: GPIO.1 - LED light output

'Pin 4: GPIO.3 - Reset

'************************ Program*************************

SolarPIn var GPIO.0    'Voltage input from Solar panel sensor

LED7 var GPIO.1      'LED output

 

TRISIO=%001001

CMCON0=7             'No use of comparator

OSCCON=%00000001    'This setting produces internal 31kHz clock rate.

ANSEL=0               'Set all port pins to digital/essential!

 

IOC.0=1       'Detect the level change of GP0 (GPIO.0) input data

INTCON.3=1   'Use of input level interrupt of GPIO port

INTCON.7=1   'Use of interrupt

 

SleepLoop:

LED7=0      'Essential

INTCON.0=0  'This changes to 1 when input data changes in GPIO port

@Sleep       'assembler command

INTCON.0=0  'Change this to 0

'**************Routine**********

 RepeatAA:        When an interrupt occurs, jump to here.

 LED7=0

 If SolarPIn=0 Then Lightup  'Check if input voltage at GP0 (GPIO.0) is below about 0.8V (L). If so, jump to Lightup.

 Goto RepeatA              'If not (bright), jump to RepeatA

 

 Lightup:      'When SolarPIn=0 (dark), continue this Lightup routine

 High LED7        

 Pause 100     '0.1 sec at default 4Mh but about 13 sec at 31kHz (0.1x129 times=12.9sec)

 Goto RepeatAA

 

 RepeatA:

 Goto SleepLoop

 '*********************End of Program *****************************:

 'Note:

'melabs U2 Programmer's configurations for 12F683

'Oscillator - INTOSC, WDTE - Disable, PWRTE - Disable, MCLR - Reset,

'BODEN - Disable, IXSO - Enable, FSCM - Enable, CD - Disable, CDP - Disable

 

 

Menu Pageへ戻る    (Return to Menu Page)

Top of Pageへ戻る   (Return to Top of Page)