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もらってくるもの)
クロックは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 関数内に動作コードを書いていきましょう。
/*
* 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くらいまで上がるので注意。