前回はMPLABをインストールしました。今回は、MPLABとPICkit4を使って、実際にPICにプログラムを書き込みます。
Projectを作成
MPLAB X IDEを起動し、Flie>New Project…をクリックします。New Projectの画面が開きます。そのまま、Nextをクリックします。
Nextをクリックします。
Select Headerもそのまま、Nextをクリック。
Select ToolはPICkitをつないでいないので書き込み機が表示されないが問題ないのでそのまま、Nextをクリック。
Project Locationは、プロジェクトを保存しておく場所を指定します。デフォルトのままでも任意の場所でも構いません。名前を入れたら、Finishをクリック。
下記画像のようにプロジェクトが作成されます。
ソースファイルを追加
プロジェクトを作成したら、次にソースファイルを追加します。ソースファイルとは、プログラム本体のことです。Flie>New File…をクリックします。
次にファイル名を指定します。わかりやすい名前にしましょう。たとえば、温度センサのお試しなら、その温度センサの型番とか。
New Fileウィンドウが開いたら、
①CategoriesはC, File TypesはC Source Fileを選択し、
②Finishをクリック
そして、Finishをクリック
このようなエディタ画面が出てきます。
コードは以下のものをコピペしてください。次回以降にコードの解説をしていきます。
==================================================
// PIC16F1503 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 8000000
void PICinit(){
OSCCON = 0b01110000 ;
ANSELA = 0b00000000;
TRISA = 0b00000000;
TRISC = 0b00011000 ;
PORTA = 0b00000000;
PORTC = 0b00000000 ;
OPTION_REG = 0b00000000 ;
return;
}
int main(void){
PICinit(); //PIC????
while(1){
RC0= 0;
__delay_ms(200);
RC0= 1;
__delay_ms(200);
}
return 0;
}
==================================================
ここで、何やらビルドエラーが出ました。
コンパイル
いよいよコードを書いていきますが、今回はPICにプログラムを書き込むことが目標です。コードは以下のものをコピペしてください。次回以降にコードの解説をしていきます。
==================================================
// PIC16F1503 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled)
#pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
// CONFIG2
#pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 8000000
void PICinit(){
OSCCON = 0b01110000 ;
ANSELA = 0b00000000;
TRISA = 0b00000000;
TRISC = 0b00011000 ;
PORTA = 0b00000000;
PORTC = 0b00000000 ;
OPTION_REG = 0b00000000 ;
return;
}
int main(void){
PICinit(); //PIC????
while(1){
RC0= 0;
__delay_ms(200);
RC0= 1;
__delay_ms(200);
}
return 0;
}
==================================================
コードを張り付けたら、ビルドします。ビルドとは、書いたプログラムの文法チェック・コンパイルを自動で行ってくれます。右上のトンカチ(Build main project)のアイコンをクリックしましょう。
MPLAB X IDE v5.xxと8ビットPICマイコン用のCコンパイラーであるMPLAB XC8 v5.xxを組み合わせて使うときの設定に問題があるそうです。
専門的なことはわかりませんので以下を参考にして修正してください。
①PIC12-16F1xxx_DFP(1.1.53)をクリック。
②XC8 Global Optionsをクリック。
③C standardをC90に変更し、OK。
修正を行い、再度ビルドを行い、下記画像のように「Build Successful」と表示されればビルド成功です。
回路作成
以前、作製した書き込み機を使用して動作確認用の回路を構築します。
用意するもの
・PIC16F1503↓
・PICkit4
・ブレッドボード
・ジャンパコード
・書き込み機
・抵抗(3kΩ)
・赤LED
今回私は、PICはPIC16F1503を使用していますが、これ以外のものを使用している方はそのデータシートを見てpinの配置を確認しましょう。
作成した回路図は以下のようになります。
以前作製した書き込み機にLEDが付いているだけの簡単なものになります。
実際の接続写真は以下のようになります。
以上でハードの準備は完了です。
プログラムを書き込む
先ほど、書いたプログラムををPICへ書き込みます。
左上に再生ボタンをクリックします。
「5V印加しますが問題ないか」と聞いてきます。PIC16F1503の電源電圧上問題ないのでそのままOK。
ここでも「Target device was not found (could not detect target voltage VDD).」というエラーが出ました。
このエラーは書き込みツールから正常に電圧が供給されていないので、外部から電源を入れるかライターから供給することで解決します。
今回はライターから電源を供給して、解決します。
①PIC12-16F1xxx_DFP(1.1.53)をクリック。
②Propertiesの画面の中から使用している書き込みツールを選択。
③Option categoriesの中からPowerを選択。
④Powerの画面でチェックボックスにチェックを入れる。
⑤OKをクリック。
これで最後に再度、左上に再生ボタンをクリックします。・・・※①
マクニカの事業>半導体事業>サポート
「Microchip PICマイコン:PICマイコンに書き込みを行う際にTarget device was not found (could not detect target voltage VDD).というエラーメッセージが表示された際の対応方法を教えてください」
その後数秒後に、下のOutputウィンドウにProgramming/Verify completeと出てくれば成功です!
書き込みの瞬間の挙動を動画にしています。(本文「※①」あたりより)
一度書き込みが終了してしまえばPICkit4を外し、外部から電源を入れても動作します。
他のPICでも全く同様の書き込み手順です。始めのプロジェクト作成のところで使用するPICを指定することで、同じ様なことができます。
次回は、今回コピペしてもらったコードの解説をします(面倒ですがw)