スイッチを使って発光ダイオードを制御しましょう。今回の動作は、スイッチをオンにすると点灯、オフにすると消灯するようにします。当然、スイッチと発光ダイオードは直接つなげません。また今回の制御では、厳密な制御を行うわけではないので、チャタリング(ウィキペディア)は考慮しません。
1.今回使用するPICについて
今回使用するPICは「PIC12F1822」です。
2.回路
スイッチの接続ピンRA4では、PICの中にあるプルアップ機能を使用しています。なのでRA4の状態は、スイッチがオフの状態だと1、スイッチがオンの状態だと0になります。参考:プルアップ(ウィキペディア)
簡単にプルアップの回路の動きを説明すると、スイッチが押されていない状態だと、RA4に電気が流れているので1になります。スイッチが押されるとRA4へ流れていた電気がグランドへ流れるため、RA4の入力は0になります。
ピンへの接続は以下の通りです。
RA2:発光ダイオード
RA4:スイッチ
3.プログラム
スイッチの状態を認識し、発光ダイオードを点灯・消灯させるプログラムを作成します。基本的な初期設定は「発光ダイオードを光らせる」と同様です。しかし、今回はPICのプルアップ機能を使用するので、その設定を有効にする必要があります。
OPTION_REG = 0b00000000 ;// 7bit目が0でプルアップ抵抗が有効 ANSELA = 0b00000000 ; // すべてデジタルI/Oに割当てる TRISA = 0b00011000 ; // RA3,4を入力とする WPUA = 0b00010000 ; // RA4のみプルアップ抵抗設定 PORTA = 0b00000000 ; // ピン状態初期化
37行目
プルアップを有効にするため「OPTION_REG」の7ビット目をゼロにします。
OPTION_REG = 0b00000000;
38行目
全てのポートをデジタルI/Oに設定します。
39行目
今回、スイッチとつながっているRA4を入力に設定します。
(RA3は入力のみのピンなので、一緒に入力に設定します)
40行目
RA4のプルアップを有効にします。
41行目
ピンの状態を初期化します。
メインの処理では、動作し続けるようにするため永久ループにします。プルアップを利用しているため、RA4が0の時、スイッチが押されている状態になるので、点灯するようにRA2を1にします。逆にRA4が1の時はスイッチはオンしていないので、消灯するようにRA2を0にします。
for(;;) { if( RA4 == 0 ) { RA2 = 1; } else { RA2 = 0; } }
注意:プルアップを使用しているので、RA4の0と1の判定を間違えないようにしてください。
ソースコード
プログラムの全文を掲載します。
<注意>
本サイトの注意事項を確認してください。
ソースコードや回路図などを使用する場合、上記注意とともに、自己責任でお願いします。
3.動作確認
PICへ書き込んで動かしてみてください。問題がなければ約1秒で点灯・消灯を繰り返します。
<更新履歴>
新規作成:2015年4月4日
第2版:2016年9月30日:フォーマット変更(内容の変更はなし)