LoginSignup
4
2

More than 3 years have passed since last update.

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

Posted at

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チカチカの回路

schematic.png

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

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

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

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

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

まずはMPLAB X IDEを起動
icon1.png

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

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

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

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

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

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

ソースを書く

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

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

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

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

ウィンドウの下のほうにConfiguration Bitsの新しいサブウィンドウが生成されます。チップによって設定できる項目が変わります。PIC16F84は非常に少なくてたった4項目。らくちんです。
newpj10.png
FOSCはクロックの供給回路のタイプを選びます。今回の回路では外部RCによる発振なのでEXTRCを選択します。
WDTEはをウォッチドッグタイマーを有効・無効にする設定です。デバッガを使うなら無効です。どっちでもいいです。
そのあと、[Generate Source Code to Output] を押してこの設定のコードを表示させます。
それをコピーして、main.c の先頭部分にペーストしてしまいましょう。
newpj11.png

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 をブレッドボードのコネクタに接続します。ピンの順番や電圧を間違えないようにしましょう。
IMG_2211.JPG

POWER/ACTIVE/STATUS ランプも緑/青/緑に点灯しているのを確認してから、三角アイコンを押してコンパイル&書き込みをします。
newpj12.png
PICkit3 を抜けば、チップは通常動作を始めます。

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

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

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2