スイッチの入/切でLEDを点灯させます
〔PICの動かせ方入門に戻る〕
タクトスイッチとLEDを配線しスイッチが押されたらLEDを点灯させます。
今回使用するピン番号は1番(VDD)と8番(VSS)と5番(GP2)と3番(GP4)です。
3番ピンがデジタル入力で5番ピンがデジタル出力です。
@まずは、下記図画面の様に配線しましょう。
PICの1番ピンに電源+5V、8番ピンに電源GND(-)側、5番ピンにLEDの足が長い方を接続します。
また、3番ピンにタクトスイッチを接続しますがプルアップ抵抗はPIC内蔵を使用します。
AMPLAB IDEを起動させます。
B下記がプログラムソースです、
プロジェクトを作成して新規ファイルにコピーペーストして貼り付けて下さい。
プログラムソースをダウンロードしてプロジェクトに取込む事も出来ます。
---------------------------------------------------------------------
#include <pic.h>
// メモリを保護しない(UNPROTECT):外部リセット信号は使用せずにデジタル入力(GP3)ピンとする(MCLRDIS)
// 電源電圧降下常時監視機能ON(BOREN):電源ONから72ms後にプログラムを開始する(PWRTEN)
// ウオッチドックタイマ無し:内部クロック4MHz使用する(INTIO)
__CONFIG(UNPROTECT & MCLRDIS & BOREN & PWRTEN & WDTDIS & INTIO) ;
void main()
{
OPTION = 0b00000010 ; // prescale 8 デジタルI/Oに内部プルアップ抵抗を使用する
CMCON = 0x07 ; // コンパレータは使用しない
ANSEL = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
TRISIO = 0b00010000 ; // GP4だけ入力その他のピンは出力に割当てる(GP3は入力専用)
WPU = 0b00010000 ; // GP4は内部プルアップ抵抗を指定する
GPIO = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)
while(1) {
if (GPIO4 == 0) { // 3番ピンのスイッチが押されたか?
GPIO2 = 1 ; // 5番ピンにHIGHを出力する(LED ON)
} else {
GPIO2 = 0 ; // 5番ピンにLOWを出力する(LED OFF)
}
}
}
---------------------------------------------------------------------
CコンパイルとPIC書き込みを実行して下さい。
DPICをブレッドボードに取付けて、スイッチを押してみて下さいLEDが点灯すると思います。
《やさしく解説》
タクトスイッチについて
タクトスイッチは4本のリード線が出ていますが、
写真の様に足が出ている側面の方向同し(3と4)がボタンを押した時につながります。
押していない状態では(1と3)(2と4)同しがつながっています。
(1と2)または(3と4)はつながっていない。
押したら早い話全て(1,2,3,4)つながります。
ですが通常は、(1と2)か(3と4)に配線します。
LEDについて
LEDには極性が有ります、
足の長いアノード側を5番ピンの方に、足の短いカソード側を電流制限抵抗の方に接続します。
また、LEDには流せる電圧と電流が決まっています、必ず電流制限抵抗を付けましょう。
電流制限抵抗
LEDの順方向電流(IF)と順方向電圧(VF)がデータシート等に書いてあると思います、
例えばIFが10mAで、VFが2.5Vで、picのデジタル出力が5Vとすると、
(pic出力−順方向電圧)÷ 順方向電流 = 電流制限抵抗値
よって、(5V - 2.5V) ÷ 0.010A = 250Ω(250Ωは無いので240Ωか270Ωを使います)
10mAは0.010AというふうにAに変換して計算します。
だいたい120Ω〜680Ωのあたりだと思います。
LEDは5mAくらいで使った方が目に優しいでしょう、で470Ω?
また、抵抗はLEDのアノード側とカソード側のどちら側に接続してもOKです。
注意) PICの出力は20mA程しか流せません、これ以上のLED電流を流す場合は
PICの出力をトランジスタで一旦受けてからLEDをつながないといけません。
マイコン出力をトランジスタで一旦受ける場合はこちらを参考にして下さい。
プログラムについて
プログラムソースのコメントを読んでもらえば大体何をしているのか分かると思います。
while(1)
main()の中の処理は1回実行すると終了します、
だからwhile(1)の、{ }の中に処理を書き込めば無限に繰り返します。
もしwhile(1)を記述しないとプログラムはすぐ終了し、スイッチを押してもLEDは点灯しません。
PIC内蔵プルアップ抵抗
GP3以外のGP0,GP1,GP2,GP4,GP5に接続すれば内蔵プルアップが使用できます。
使用する場合は、下記のレジスターにて設定する必要があります。
OPTION = 0b00000010 ; 赤い所0を1とするとプルアップを使用しないです。
WPU = 0b00010000 ; どのピンをプルアップするか指定します、1でする、0でしないです
右からGP0,GP1,GP2,X,GP4,GP5の順、この例ではGP4をプルアップするです
デジタルI/O
デジタルピンの設定は下記のレジスターにて設定します。
ANSEL = 0b00000000 ; アナログは使用しないので全て0です、全てデジタルの入出力に使用する
赤数字部分の右からGP0,GP1,GP2,GP4の順です
TRISIO = 0b00010000 ; 1でデジタル入力、0でデジタル出力(GP3は入力専用なので設定無意味)
右からGP0,GP1,GP2,X,GP4,GP5の順、この例ではGP4を入力にするです
※プルアップを使用する場合はもちろんデジタル入力の場合だけです。
《その他》
今回は5番・3番ピンを使用しましたが他のピンを使用する場合は下記の表を参照して下さい。
また、4番ピンGP3は入力しか出来ません、出力不可です。
ちなみにGPIOはジィピィアイオーです、ゼロではないです。
ピン番号 |
7 |
6 |
5 |
4 |
3 |
2 |
ピンの名前 |
GP0 |
GP1 |
GP2 |
GP3 |
GP4 |
GP5 |
入出力ビット名 |
GPIO0 |
GPIO1 |
GPIO2 |
GPIO3 |
GPIO4 |
GPIO5 |
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2011 Shigehiro Kimura All Rights Reserved.