まずはLEDを点滅させます

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


LEDを配線し約300ms毎に点滅させます。

LEDblink1

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

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

LEDblink2 LEDblink3

AMPLAB IDEを起動させます。

B下記がプログラムソースです、
 プロジェクトを作成して新規ファイルにコピーペーストして貼り付けて下さい。
 プログラムソースをダウンロードしてプロジェクトに取込む事も出来ます。
---------------------------------------------------------------------
#include <pic.h>
#include <htc.h>            // delay用に必要


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

// メモリを保護しない(UNPROTECT):外部リセット信号は使用せずにデジタル入力(GP3)ピンとする(MCLRDIS)
// 電源電圧降下常時監視機能ON(BOREN):電源ONから72ms後にプログラムを開始する(PWRTEN)
// ウオッチドックタイマ無し(WDTDIS):内部クロック4MHz使用する(INTIO)
__CONFIG(UNPROTECT & MCLRDIS & BOREN & PWRTEN & WDTDIS & INTIO) ;

void main()
{
     CMCON  = 0x07 ;           // コンパレータは使用しない
     ANSEL  = 0b00000000 ;     // アナログは使用しない(すべてデジタルI/Oに割当てる)
     TRISIO = 0b00000000 ;     // ピンは全て出力に割当てる(GP3は入力のみとなる)

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

     // 約300ms毎にLEDの点滅を繰り返す
     while(1) {
          GPIO2 = 1 ;          // 5番ピン(GP2)にHIGH(5V)を出力する(LED ON)
          __delay_ms(150) ;
          __delay_ms(150) ;
          GPIO2 = 0 ;          // 5番ピン(GP2)にLOW(0V)を出力する(LED OFF)
          __delay_ms(150) ;
          __delay_ms(150) ;
    }
}
---------------------------------------------------------------------
CコンパイルPIC書き込みを実行して下さい。

DPICをブレッドボードに取付けて動かせば、約300ms毎に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は300ms点灯して終了してしまう事になります。

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

《その他》

今回は5番ピンを使用しましたが他のピンを使用する場合は下記の表を参照して下さい。
また、4番ピンGP3は入力しか出来ません、出力不可です。
ちなみにGPIOはジィピィアイオーです、ゼロではないです。
ピン番号
ピンの名前 GP0 GP1 GP2 GP3 GP4 GP5
出力ビット名 GPIO0 GPIO1 GPIO2 GPIO3 GPIO4 GPIO5




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