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

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


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

SWtoLED1

今回使用するピン番号は20番(VDD)と8/19番(VSS)と14番(RC3)と21番(RB0)です。
21番ピンがデジタル入力で14番ピンがデジタル出力です。

@まずは、下記図画面の様に配線しましょう。
  PICの20番ピンに電源+5V、8番と19番ピンに電源GND(-)側、14番ピンにLEDの足が長い方を接続
  します。また、21番ピンにタクトスイッチを接続しますがプルアップ抵抗は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      // 外部リセット信号は使用せずにデジタル入力(RA5)ピンとする(OFF)
#pragma config CP = OFF         // プログラムメモリーを保護しない(OFF)
#pragma config CPD = OFF        // データメモリーを保護しない(OFF)
#pragma config BOREN = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF   // CLKOUTピンをRA6ピンで使用する(OFF)
#pragma config IESO = OFF       // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN = OFF      // 外部クロック監視しない(FCMEN_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 ; // AN0-AN4は使用しない全てデジタルI/Oとする
     ANSELB     = 0b00000000 ; // AN8-AN13は使用しない全てデジタルI/Oとする
     TRISA      = 0b00000000 ; // ピン(RA)は全て出力に割当てる(0:出力 1:入力)
     TRISB      = 0b00000001 ; // ピン(RB)はRB0のみ入力、他は全て出力に割当てる
     TRISC      = 0b00000000 ; // ピン(RC)は全て出力に割当てる
     WPUB       = 0b00000001 ; // RB0は内部プルアップ抵抗を指定する
     PORTA      = 0b00000000 ; // RA出力ピンの初期化(全てLOWにする)
     PORTB      = 0b00000000 ; // RB出力ピンの初期化(全てLOWにする)
     PORTC      = 0b00000000 ; // RC出力ピンの初期化(全てLOWにする)

     while(1) {
          if (RB0 == 0) {      // 21番ピン接続のスイッチが押されたか?
               RC3 = 1 ;       // 14番ピンにHIGHを出力する(LED 点灯)
          } else {
               RC3 = 0 ;       // 14番ピンにLOWを出力する(LED 消灯)
          }
     }
}
---------------------------------------------------------------------
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には極性が有ります、
足の長いアノード側を14番ピンの方に、足の短いカソード側を電流制限抵抗の方に接続します。
また、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内蔵プルアップ抵抗
 RB0〜RB7に接続すれば内蔵プルアップが使用できます。
 使用する場合は、下記のレジスターにて設定する必要があります。
 OPTION_REG = 0b00000000 ; 赤い所とするとプルアップを使用しないです。
 デフォルトは内蔵プルアップは使用しないです。
 また、使用する場合はRB0-RB7の何れのピンをプルアップするのかを指定する必要が有ります。
 その指定はWPUBレジスターで行います。
 WPUB = 0b00000001 ; この設定でRB0のみ内部プルアップ抵抗を使うです
               右のビットから左へ RB0〜RB7 の順番です。

 尚、RA0-RA7/RC0-RC7を使用する場合は外付け抵抗によるプルアップかプルダウンが必要です。

デジタルI/O
 デジタルピンの設定は下記のレジスターにて設定します。
 アナログ設定用ANSELA/ANSELBでデジタルにします。
 ANSELA = 0b00000000 ;
     デジタルピンA(RA0-RA5)の指定をします。
     赤数字右からRA0(2ピン),RA1(3ピン),RA2(4ピン),RA3(5ピン),RA4(6ピン),
     RA5(7ピン)の順
     1でアナログ、0でデジタル、この設定はRA0-RA5を全てデジタルI/Oに割当
 ANSELB = 0b00000000 ;
     デジタルピンB(RB0-RB5)の指定をします。
     赤数字右からRB0(21ピン),RB1(22ピン),RB2(23ピン),RB3(24ピン),
     RB4(25ピン),RB5(26ピン)の順
     1でアナログ、0でデジタル、この設定はRB0-RB5を全てデジタルI/Oに割当

 次にピンの入出力を設定します。
ポートA
 TRISA = 0b00000000 ; RA0-RA7ピンの入出力を設定、1で入力 0で出力
               右のビットから左へ RA0-RA7 の順番です。
ポートB
 TRISB = 0b00000001 ; RB0-RB7ピンの入出力を設定、1で入力 0で出力
               右のビットから左へ RB0〜RB7 の順番です。
               (赤数字はRB0を入力にするです)
ポートC
 TRISC = 0b00000000 ; RC0-RC7ピンの入出力を設定、1で入力 0で出力
               右のビットから左へ RC0-RC7 の順番です。

 ※プルアップを使用する場合はもちろんデジタル入力の場合だけです。
 ※アナログピンの設定方法はこちらを参照して下さい。

《その他》

今回は14番・21番ピンを使用しましたが他のピンを使用する場合は下記の表を参照して下さい。
また、1番ピンRE3は入力のみ出来ます。
ポートA
ピン番号 10
デジタル入出力ビット名 RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0

ポートB
ピン番号 28 27 26 25 24 23 22 21
デジタル入出力ビット名 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

ポートC
ピン番号 18 17 16 15 14 13 12 11
デジタル入出力ビット名 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0



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


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