スイッチの入/切でLEDを点灯させます

〔PICの動かせ方入門に戻る〕


タクトスイッチとLEDを配線しスイッチが押されたらLEDを点灯させます。

SWtoLED1

今回使用するピン番号は1番(VDD)と8番(VSS)と5番(RA2)と3番(RA4)です。
3番ピンがデジタル入力で5番ピンがデジタル出力です。

@まずは、下記図画面の様に配線しましょう。
 図は、12F675ですが12F1822も同じ配線になります。
 PICの1番ピンに電源+5V、8番ピンに電源GND(-)側、5番ピンにLEDの足が長い方を接続します。
 また、3番ピンにタクトスイッチを接続しますがプルアップ抵抗はPIC内蔵を使用します。

SWtoLED2 SWtoLED3

AMPLAB X(v2.15)を起動させます。

B下記がプログラムソースです、
MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。
 プロジェクトを作成して新規ファイルにコピーペーストして貼り付けて下さい。
 プログラムソースをダウンロードしてプロジェクトに取込む事も出来ます。 *1)
---------------------------------------------------------------------
#include <xc.h>

// コンフィギュレーション1の設定
#pragma config FOSC     = INTOSC   // 内部クロック使用する(INTOSC)
#pragma config WDTE     = OFF      // ウオッチドッグタイマー無し(OFF)
#pragma config PWRTE    = ON       // 電源ONから64ms後にプログラムを開始する(ON)
#pragma config MCLRE    = OFF      // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(OFF)
#pragma config CP       = OFF      // プログラムメモリーを保護しない(OFF)
#pragma config CPD      = OFF      // データメモリーを保護しない(OFF)
#pragma config BOREN    = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF      // CLKOUTピンをRA4ピンで使用する(OFF)
#pragma config IESO     = OFF      // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN    = OFF      // 外部クロック監視しない(OFF)

// コンフィギュレーション2の設定
#pragma config WRT    = OFF        // Flashメモリーを保護しない(OFF)
#pragma config PLLEN  = OFF        // 動作クロックを32MHzでは動作させない(OFF)
#pragma config STVREN = ON         // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV   = HI         // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP    = OFF        // 低電圧プログラミング機能使用しない(OFF)

void main()
{
     OSCCON     = 0b01110010 ; // 内部クロックは8MHzとする
     OPTION_REG = 0b00000000 ; // デジタルI/Oに内部プルアップ抵抗を使用する
     ANSELA     = 0b00000000 ; // アナログは使用しない(すべてデジタルI/Oに割当てる)
     TRISA      = 0b00011000 ; // RA4だけ入力その他のピンは出力に割当てる(RA3は入力専用)
     WPUA       = 0b00010000 ; // RA4は内部プルアップ抵抗を指定する

     PORTA      = 0b00000000 ; // 出力ピンの初期化(全てLOWにする)


     while(1) {
          if (RA4 == 0) {      // 3番ピンのスイッチが押されたか?
               RA2 = 1 ;       // 5番ピンにHIGHを出力する(LED ON)
          } else {
               RA2 = 0 ;       // 5番ピンにLOWを出力する(LED OFF)
          }
    }
}
---------------------------------------------------------------------
CコンパイルPIC書き込みを実行して下さい。

DPICをブレッドボードに取付けて、スイッチを押してみて下さいLEDが点灯すると思います。

《やさしく解説》

タクトスイッチについて

SWtoLED5

 タクトスイッチは4本のリード線が出ていますが、
 写真の様に足が出ている側面の方向同し(3と4)がボタンを押した時につながります。

 押していない状態では(1と3)(2と4)同しがつながっています。
 (1と2)または(3と4)はつながっていない。

 押したら早い話全て(1,2,3,4)つながります。
 ですが通常は、(1と2)か(3と4)に配線します。

LEDについて

SWtoLED4

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内蔵プルアップ抵抗
 RA0〜RA5に接続すれば内蔵プルアップが使用できます。
 使用する場合は、下記のレジスターにて設定する必要があります。
 OPTION_REG = 0b00000010 ; 赤い所とするとプルアップを使用しないです。
 WPUA = 0b00010000 ; どのピンをプルアップするか指定します、1でする、0でしないです
              右からRA0,RA1,RA2,RA3,RA4,RA5の順、この例ではRA4をプルアップするです

デジタルI/O
 デジタルピンの設定は下記のレジスターにて設定します。
 ANSELA = 0b00000000 ; アナログは使用しないので全て0です、全てデジタルの入出力に使用する
               赤数字部分の右からRA0,RA1,RA2,RA4の順です
 TRISA = 0b00010000 ; 1でデジタル入力、0でデジタル出力(RA3は入力専用なので設定無意味)
               右からRA0,RA1,RA2,X,RA4,RA5の順、この例ではRA4を入力にするです

 ※プルアップを使用する場合はもちろんデジタル入力の場合だけです。

《その他》

今回は5番・3番ピンを使用しましたが他のピンを使用する場合は下記の表を参照して下さい。
また、4番ピンRA3は入力しか出来ません、出力不可です。
ピン番号
ピンの名前 RA0 RA1 RA2 RA3 RA4 RA5



MPLAB X用に記事変更(*1) 2015/10/02


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2015 Shigehiro Kimura All Rights Reserved.