まずはLEDを点滅させます

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


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

LEDblink1

今回使用するピン番号は1番(VDD)と8番(VSS)と5番(RA2)です。

@まずは、下記図画面の様に配線しましょう。
 図は、12F675ですが12F1822も同じ配線になります。
 PICの1番ピンに電源+5V、8番ピンに電源GND(-)側、5番ピンにLEDの足が長い方を接続します。

LEDblink2 LEDblink3

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

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

#define _XTAL_FREQ 4000000         // delay用に必要(クロック4MHzを指定)

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


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

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

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

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

《やさしく解説》

LEDについて

LEDblink4

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は1秒点灯して終了してしまう事になります。

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

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

《その他》

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



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


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