目次>8章.機能が豊富なPICを使う(PIC12F683)>(5)GP2/INT割り込みを使う
(ひとの動きを検出したら明かりを点ける,省電力実用版)
PIC12F683のGP2/INT割り込みを使ってみます。
GP2/INT割り込みは、PIC16F84AのRB0/INT割り込みに相当します。
割り込み信号はNaPiOnの出力とし、単三乾電池3本で動作させます。
作るものは、「暗いときに人の動きを検出したら、高輝度LEDを5秒間点灯させる」です。
乾電池で動作させますので、極力省電力となるようにしました。
【2007.6.25】 2005年12月5日に電源を入れ、高輝度LEDが1日2〜5分(最長30分程度)点灯する環境で動作し続けていましたが、本日高輝度LEDが点灯しなくなりました。 緑のLEDは人の動きで点滅しますので機能はしています。 このときの電源(単三乾電池3本直列)電圧を測ると1.9Vでした。 単三乾電池3本で1年半動作し続けたことに驚きを感じています。
【2007.7.24】 |
実験回路 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
・ |
実用化するために、Cdsセルにより暗い時だけ動作させるようにしました。 灯りには高輝度LEDを使います。 また、単三型乾電池3本を電源とします。PIC12F683は、乾電池2本でも動作できますが、高輝度LEDの動作電圧が最低3.6Vのため乾電池3本で4.5Vとしました。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラムの仕様 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NaPiOnにより、人の動きを検出するとGP2/INT割り込みが発生します。 割り込み発生時にGP0(Cdsセル)の状態をチェックし、 0であれば(明るければ)何もしません。 1であれば(暗ければ)、5秒間高輝度LEDを点灯します。 待ち時間は、TMR0割り込みにより作成します。
人の動きを検出していない時は、SLEEP命令により省電力モードで待機します。
オシレータは1MHzの内部クロックを使用します。高速動作させる必要がありませんので、もっと遅くてもかまいません。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラムの作成 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
やる事は、PIC16F84Aで行った「RB0/INT割込みを使う」とほぼ同じです。
以下はメイン処理のフローです。
napionフラグは、GP2/INT割込み処理で1にします。
以下は割込み処理のフローです。
今回のプログラムで初期設定するレジスタと、その設定値について説明します。
ここでは、今回設定する値を中心に説明します。
<GPIOレジスタ>
ポート(GP0〜GP5)のON/OFFを制御するレジスタで、0をセットするとOFF(LEDは消灯),1をセットするとON(LEDは点灯)になります。
<TRISIOレジスタ>
ポート(GP0〜GP5)を入力で使うか出力で使うかを指定します。
尚、Bit3,6,7は設定が無視されますが、プログラムでは0をセットします。
<CMCON0レジスタ>
コンパレータの動作を設定するために使用しますが、今回はGP0〜2をデジタル入出力として使用しますので、CM0〜CM2には1を設定します。
<OSCCONレジスタ>
OSCCONレジスタでは、オシレータの動作モードを設定します。
<ANSELレジスタ>
ANSELレジスタでは、アナログ入力(A/D変換)の設定を行います。
__CONFIG命令では以下の記述をします。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
プログラム全体 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
上記の処理を組み込んだプログラムはこちらです。 メモ帳などのテキストエディタに取り込んで、P683NAPION.ASMという名で保存し、MPLABでアセンブル&PICライタでPICに書き込んで動かしてみて下さい。
今まで、PIC16F84Aを使用していた場合は、MPLABのプロジェクトウィザードで「PIC12F683」を選択して下さい。
|