まずはLEDを点滅させます

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


LEDを配線し約1秒毎に点滅させます。

LEDblink1

今回使用するピン番号は14番(VDD)と5番(VSS)と10番(RB4)です。

@まずは、下記図画面の様に配線しましょう。
  PICの14番ピンに電源+5V、5番ピンに電源GND(-)側、10番ピンにLEDの足が長い方を接続します。

LEDblink2 LEDblink3

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

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

#define _XTAL_FREQ  8000000     // delay用(クロック8MHzで動作時)

// コンフィギュレーション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)

// 指定した時間(num x 10ms)だけウエイトを行う処理関数
void Wait(unsigned int num)
{
     int i ;

     // numで指定した回数だけ繰り返す
     for (i=0 ; i<num ; i++) {
          __delay_ms(10) ;     // 10msプログラムの一時停止
     }
}
// メインの処理関数
void main()
{
     OSCCON = 0b01110010 ;     // 内部クロックは8MHzとする
     ANSELA = 0b00000000 ;     // AN0-AN4は使用しない全てデジタルI/Oとする
     ANSELB = 0b00000000 ;     // AN5-AN11は使用しない全てデジタルI/Oとする
     TRISA  = 0b00000000 ;     // ピン(RA)は全て出力に割当てる(RA5は入力のみとなる)
     TRISB  = 0b00000000 ;     // ピン(RB)は全て出力に割当てる
     PORTA  = 0b00000000 ;     // RA出力ピンの初期化(全てLOWにする)
     PORTB  = 0b00000000 ;     // RB出力ピンの初期化(全てLOWにする)

     // 約1s毎にLEDの点滅を繰り返す

	while(1) {
          RB4 = 1 ;            // 10番ピン(RB4)にHIGH(5V)を出力する(LED ON)
          Wait(100) ;          // 1秒ウエイト
          RB4 = 0 ;            // 10番ピン(RB4)にLOW(0V)を出力する(LED OFF)
          Wait(100) ;
    }
}
---------------------------------------------------------------------
CコンパイルPIC書き込みを実行して下さい。

DPICをブレッドボードに取付けて動かせば、約1秒毎にLEDが点滅を繰り返すと思います。

《やさしく解説》

LEDについて

LEDblink4

LEDには極性が有ります、
足の長いアノード側を10番ピンの方に、足の短いカソード側を電流制限抵抗の方に接続します。
また、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は1秒点灯して終了してしまう事になります。

Wait(num)関数
 numにて指定した数値だけウエイト動作を行います、数値はnum x 10ms秒です。

__delay_ms(value)
 プログラムを指定した時間だけ一時停止します。
 value:停止したい時間を指定します、単位はミリ秒です。
 クロック8MHz動作では98ms25231msまでしか指定出来ません。 *2)

デジタルI/Oの設定方法 *1)
 デジタルピンの設定は下記のレジスターにて設定します。
 ANSELA = 0b00000000 ; デジタル入力を行うピンA(RA0-RA4)の指定をします
               赤数字右からRA0(17ピン),RA1(18ピン),RA2(1ピン),RA3(2ピン),RA4(3ピン)の順
               1でアナログ、0でデジタル、この設定はRA0-RA4を全てデジタルI/Oに割当
 ANSELB = 0b00001000 ; デジタル入力を行うピンB(RB1-RB7)の指定をします
               赤数字右からRB1(7ピン),RB2(8ピン),RB3(9ピン),RB4(10ピン),RB5(11ピン),
               RB6(12ピン),RB7(13ピン)の順
               1でアナログ、0でデジタル、この設定はRB3(9ピン)をアナログで使用するです

 次にピンの入出力を設定します。
 TRISA = 0b00000000 ; この設定はRA0-RA7全て出力に設定するです
               1で入力、0で出力、右のビットから左へRA0〜RA7の順
 TRISB = 0b00001000 ; この設定はRB3のみ入力に設定するです
               1で入力、0で出力、右のビットから左へRB0〜RB7の順

《その他》

今回は10番ピンを使用しましたが他のピンを使用する場合は下記の表を参照して下さい。
また、4番ピンRA5は入力しか出来ません、出力不可です。
ポートA
ピン番号 16 15 18 17
デジタル入出力ビット名 RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0

ポートB
ピン番号 13 12 11 10
デジタル入出力ビット名 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0



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


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