PIC(1)-スイッチによるLED点灯

このエントリーをはてなブックマークに追加

PICはMicrochipTechnology社が製造しているマイコンです。PICは、Peripheral Interface Controllerの略で、日本語訳にすると周辺機器接続部制御となります。PICはマイコンの一種で、CPUや入出力インターフェイス(I/O)、メモリ(RAM、ROM)が一つのICの中に搭載されたワンチップマイコンが主流です。以前のマイコンはCPUやI/O、RAM、ROMは別々のICとして分かれていたようです。PICは機能の違いやピン数の違い、メモリ容量の違いなどでさまざまな種類があります。

今回は、PICを使用して、LEDを制御してみたいと思います。使用するマイコンは、PIC16F627Aです。以下のようなH/Wがセットになっている書籍があったので購入して使用しました。

キットで遊ぼう電子回路 新PIC入門C言語編

下記から統合開発環境「MPLABX」がダウンロードできるので、ダウンロードしてインストールしておきます。インストールするとXCコンパイラをインストールすかどうか問い合わせがあると思いますので、XC8コンパイラを忘れずにインストールしておいてください。

https://www.microchip.com/mplab/mplab-x-ide

それではMPLABを実行して、開発環境を開きます

新規プロジェクトを作成していきます。FileメニューよりNewProjectを選択します。新規プロジェクト作成ダイアログが開かれれるので、Standalone Projectを選択して、Nextを選択します。

ここでは、使用するデバイス(PIC)を選択して、Nextを選択します。使用するデバイスは、PIC16F627Aです。

ヘッダーの選択画面が開かれますが、今回使用しないので、Nextを選択します。使用しているPICライターの選択ダイアログ開かれます。私はPICkit3を使用しているので、PICkit3を選択して、Nextを選択します。

使用するコンパイラを選択するダイアログが開かれので、XC8を選択します。XC8はMPLAB Xをインストールした時にはインストールすると思いますが、インストールしなかった場合は別途インストールしてください。

プロジェクトの作成先を選択するダイアログが開かれます。Project Name、Project Location、Project Folderを設定します。今回は、Project NameをSample_LED_001、Project Locationをドキュメントフォルダの中のMPLABフォルダにしました。Project NameとProject Locationを設定するとProject Folderが自動で設定されます。日本語文字を使用する為に、EncordingはShift_JISを選択して、Finishを選択します。

これで、新規プロジェクトの作成は完成です。画面左上側にプロジェクトが表示されているのがわかります。それでは、ソースファイルの作成に取り組みます。Projectsの中のSorce Filesを右クリックして、メニューの中のNew→C Source Fileを選択します。ファイル名を設定して、Finishを選択します。C Source Fileのファイル名設定画面が表示されるので、ファイル名を設定して、Finishを選択します。

C Source Fileが作成されたので、この中にプログラムを書き込んでいきます。

#include <xc.h>  // インクルードファイルの読み込み

#pragma config FOSC = INTOSCIO
#pragma config WDTE = OFF
#pragma config PWRTE = ON
#pragma config MCLRE = ON
#pragma config BOREN = ON
#pragma config LVP = OFF
#pragma config CPD = OFF
#pragma config CP = OFF

// メイン関数
void main (void)
{
	CMCON = 0x07;   // 1,2,17,18端子を入出力端子に設定

	PORTA = 0xFF;   // 電圧レベルの初期設定
	PORTB = 0xFF;   // 電圧レベルの初期設定

	TRISA = 0x21;   // 入出力設定
	TRISB = 0x00;   // 入出力設定

	// 永久ループ
	while(1)
	{
		if (RA0 == 0)   // SW1がONの場合
		{
			RB0 = 0;    // LED1点灯
                        RB1 = 0;    // LED2点灯
		}
		else    // その他の場合(SW1がOFFの場合)
		{
			RB0 = 1;    // LED1消灯
                        RB1 = 1;    // LED2消灯
		}
	}
}

メニューバーのRunより、Build Main Projectを選択して、ソースをビルドします。ビルドが成功すると、BUILD SUCCESSFUL (total time: 125ms)と表示されます。ビルドしたファイルをPICに書き込む前に、PICkit3からPICへ電源供給する為の設定をします。Power target circuit from PICkit3のチェックボックスをON、BVoltage Levelを3.25に設定しておきます。

それでは、ビルドしたファイルをPICkit3を使用してPICに書き込みます。メニューバーのRunより、Run Main Projectを選択して、書き込みを実行します。書き込みが成功すると、Programming/Verify completeと表示されます。SW1をクリックすると、LED1とLED2が光りました。

このプログラムのソースコードについて解説していきます。

#include <xc.h>

ヘッダファイルの宣言です。xc.hを指定する事で、現在使用しているPICで宣言できるプログラムが設定されます。

#pragma config *** = ***

コンフィグレーションのコードになり、PICのモード設定をしています。

void main (void)

C言語でおなじみのメイン関数です。それでは、メイン関数の中身を見ていきます。

CMCON = 0x07;

16F627AのPICは18端子ありますが、一つの端子に複数の役割を持っているので、設定しています。

PORTA = 0xFF;

ポートレジスタの電圧レベルを設定するコードです。

TRISA = 0x21;

ポートレジスタが入力か出力か設定しています。0が出力、1が入力になります。

while(1)

ループ宣言で、これもC言語でお馴染みですね。変数に「1」を指定しているので、無限ループになります。

if (RA0 == 0)

条件分岐宣言で、これもC言語でお馴染みですね。スイッチがONの時に、RA0が「0」になります。

RB0 = 0;

ポートレジスタの各端子に電圧レベルを設定しています。LEDは、アノード側が電圧レベル「1」、カソード側を電圧レベル「0」に設定する事で点灯します。
今回の回路はアノード側には電源あるので、カソード側の電圧レベルを「0」にします。これらのコードを組み合わせる事で、LEDを点灯させています。