MPLAB X IDE でコードを書いてPICに書き込む (覚え書き)


MPLAB X IDE v5.25 とPICkit3 を使ってPIC16F84Aに書き込む手順の覚え書き

PIC16F84Aなんてかなり古いチップですが、書き込み手順を自分の覚書として残しておきます。
書き込むのはLEDチカチカです。芸がないな~。

用意したもの

ソフトウェア系
- Windows10 Professional (64bit)がインストールされたPC
- MPLAB X IDE (v5.25)
- コンパイラ xc8 (v2.10)
ハードウェア系
- PICkit3
- PIC16F84A-10/P (16F88ではない)
- ブレッドボード
- 抵抗 10kΩ x2, 220Ω x1
- コンデンサ 22pF x1, 0.01uF x1
- ジャンパピン多数
- USBからの 5V給電装置 (ようするに USBから5Vもらってくるもの)

LEDチカチカの回路

クロックはRC発振(10kΩ/22pF)の回路です。定数は適当です。マニュアルによれば、5kΩ以上1MΩ以下、20pF以上が推奨みたいなことが書かれています。

FOSC
RCEXT 外部RC発振 周波数精度は低い
HS 外部XTAL/セラロック発振 4MHz以上推奨
XT 外部XTAL/セラロック発振 4MHz以下推奨
LP ? 32.768KHz水晶の時らしい

C1はいわゆるパスコンです。電源-グランド間のノイズ吸収のために入れるものです。なくても動くことがあります。
JP1はPICkit3と接続するコネクタです。
RA2ピンにLEDをぶら下げて点滅させます。電流制限用の抵抗220Ωを入れています。

ブレッドボード
ブレッドボード上の実装例: もうちょっとレイアウト考える余地あり。

MPLAB X IDE上で新規プロジェクトを立ち上げる

まずはMPLAB X IDEを起動

新規プロジェクトの設定
File->New Project... で

開いたダイアログで Standalone Projectを選択して [Next]

書き込むデバイス(チップ型番)を選択。PIC16F84ならば、Middle-range の中にあります。[Next]

Select Tool では PICkit3 を選択します。ほかの書き込みツールを場合はそれに応じて設定します。あとでも設定できます。

Select Compiler ではコンパイラを選びます。ここは xc8 (v2.10) です。[Next]

最後に任意のProject Nameを設定します。EncodingはShift-JISを設定しておくのがいいでしょう。コメントで日本語入れたくなるでしょうし。そしたら [Finish]

ソースを書く

まずは、Projectのツリーからsource Files->New->main.c ... を選んで main.c ファイルをproject folder に新規生成&登録します。

ファイル名は任意にできるようです。

そうすると最初はこういうテンプレートになってます。(毎回名前を消すのが面倒になってきました...)

つぎにチップごとに違って覚えきれない Configuration BitsのPragma設定をします。もちろん、これにたよらず自分でpragma設定してもいいです。
メニューから Production -> Set Configuration Bits

ウィンドウの下のほうにConfiguration Bitsの新しいサブウィンドウが生成されます。チップによって設定できる項目が変わります。PIC16F84は非常に少なくてたった4項目。らくちんです。

FOSCはクロックの供給回路のタイプを選びます。今回の回路では外部RCによる発振なのでEXTRCを選択します。
WDTEはをウォッチドッグタイマーを有効・無効にする設定です。デバッガを使うなら無効です。どっちでもいいです。
そのあと、[Generate Source Code to Output] を押してこの設定のコードを表示させます。
それをコピーして、main.c の先頭部分にペーストしてしまいましょう。

main 関数内に動作コードを書いていきましょう。

main.c
/* 
 * File:   main.c
 * Author: cvp-swat
 *
 * Created on 2019/10/14, 23:52
 */

// 'C' source line config statements

// CONFIG
#pragma config FOSC = EXTRC     // Oscillator Selection bits (RC oscillator)
#pragma config WDTE = OFF       // Watchdog Timer (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF         // Code Protection bit (Code protection disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>
#include <stdio.h>   // なくてもいいかも 
#include <stdlib.h>  // なくてもいいかも 

#define _XTAL_FREQ 2000000 // __delay_ms() を使う場合は設定が必要。

/*
 * 
 */
int main(int argc, char** argv) {
    TRISA = 0b00000000;  // PORTA は全部出力モードに設定
    TRISB = 0b00000000;  // PORTB は全部出力モードに設定
    while(1){            // 永久ループにする
        RA2 = 1;         // RA2ピンを HIGHにして
        __delay_ms(950); // 950待って
        RA2 = 0;         // RA2ピンを LOWにして
        __delay_ms(950); // 950待って
    }
    return (EXIT_SUCCESS);
}

書き込み

PICkit3 をブレッドボードのコネクタに接続します。ピンの順番や電圧を間違えないようにしましょう。

POWER/ACTIVE/STATUS ランプも緑/青/緑に点灯しているのを確認してから、三角アイコンを押してコンパイル&書き込みをします。

PICkit3 を抜けば、チップは通常動作を始めます。

エラーがあれば赤字で表示されます。

Invalid Device IDの場合は PIC周辺の接続を確認しましょう。
また、PICkit3 の電力プロパティを調整することで解決する場合があります。

MCLRは書き込み中は11Vくらいまで上がるので注意。