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がセットになっている書籍があったので購入して使用しました。
下記から統合開発環境「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を点灯させています。