2016/05/04 皆無軟体
PIC
マイコンにプログラムを書き込む方法
1
書き込み用ハードウェアの用意
(1) Microchip製 PICkit3
PICマイコンを製造しているMicrochip社純正のPICライタである。 USBケーブルでパソコン( 対応OS : OS X , Linux , Windows ) と 接続し、後で説明する統合開発環境を使ってマイコンにプログラムを書き 込むことができる。
(2) ICテストクリップ
マイコンにはさむだけでPICライタとマイコンを接続できる。書き込 むマイコンのピン数に応じて選ぶ。PIC12F1822の場合は、8ピンのク リップを使用する。
右の写真は、PIC12F1822にクリップを挟んだ様子である。
(3) ジャンパーコード(5本) 、ブレッドボード、電池ボックス(単3電池×3本)
2
ソフトウェアのインストール
マイコンのプログラム開発に必要なソフトウェアは、プログラムのソースコードを入力したり、
管理したりする「統合開発環境
(IDE)
とソースコードをマイコンの機械語に変換するコンパイラや リンカなどのツール群である。(1) MPLAB XIDE
PIC
マイコンのプログラムを開発する 統合開発環境のソフトウェアを以下のURL
からダウン ロードしてインストールする。http://www.microchip.com/mplab/mplab-x-ide
”
MPLAB XIDE”
のアイコンからダウンロードしたファイルを展開してから実行し、指示に従ってインストールする。
(2) XC8 Compiler
C
言語のソースコードを機械語に変換するC
コンパイラをダウンロードしてインストールする。http://www.microchip.com/mplab/compilers
MPLAB XC8 Compiler
のアイコンからダウンロードしたファイルを展開してから実行し、指示3
PICkit3
とマイコンを接続
(1) ICテストクリップを使う場合
右の写真は、PIC12F1822にクリップを挟んだ様子である。
なお、PICkit3の接続端子とPICマイコンの機能ピンとの対応は、
下図のとおり。
(2) ジャンパーコードを使う場合
IC
テストクリップの代わりに、ブレッドボードにマイコンを挿入し、ジャンパコードでマイコンと
PIC
ライタを接続することもできる。
右の写真は、接続した様子である。
下図は
PIC12F1822
の機能ピンと接続の関係を表したものである。
PICマイコンの電源端子VDDには、電源(単3電池
3本)のプラス端子をつなぎ、VSSにはマイナス端子をつなぐ。
MCLR/VPP
PICkit3
VSS GroundVDD ICSPDAT ICSPCLKPICkit3
PIC
12F1822 VSS Ground
VDD MCLR/VPP
ICSPDAT
4
ファームウェア(実行可能プログラム)の作成とマイコンへの書き込み
(1) MPLAB XIDEを起動
(右のアイコンはMPLAB XIDE ver. 3.26のもの)
(2) プロジェクト(Project)の作成
(a)メニューから[File]-[New Project...]をクリック
(b) [Choose Project]ダイアログボックス [Next>]をクリック。
(c) [Select Device]ダイアログボックス
[Family]は[Mid-range 8-bit MCUs (PIC12/10/16/MCP)]を 選択
[Device]は[PIC12F1822]を選択。 (マイコンによって変更)
[Next>]をクリック
(d) [Select Header]ダイアログボックス [Next>]をクリック
(e) [Select Tool]ダイアログボックス [PICkit3]を選択
[Next>]をクリック
(f) [Select Compiler]ダイアログボックス
[XC8]の中にある[XC8 (v*.**)]を選択(v*.**)はバージョンに よって異なる。
(g) [Select Project Name and Folder]ダイアログボックス [Project Name]にプロジェクト名
(ここでは[led-12f1822])を入力。
[Encoding]に[UTF-8]を選択(日本語のコメントが入力可能)
[Finish]をクリック
(3) ソースファイルの追加
(a) XIDEの窓の左側
[Projects]タブ内の[led-12f1822]の下位にある[Source Files]をクリックして選 択。
(b) メニューから[File]-[New File...]をクリック
(c) [Choose File Type]ダイアログボックス
[Microchip Embedded]を開き、[XC8 Compiler]を選択、更に[main.c]を選択。 [Next>]をクリック
(d) [Name and Location]ダイアログボックス
(4) ソースファイルの入力
X IDE右側のソースファイルのタブに、ソースコードを入力していく。
(a)(例1) LEDを点滅させるコード。いわゆるLチカの最低限のコード
#include <xc.h> #include <stdint.h>
#pragma config FOSC = INTOSC #pragma config WDTE = OFF #pragma config PWRTE = ON #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = ON #pragma config CLKOUTEN = OFF #pragma config IESO = OFF #pragma config FCMEN = OFF
#pragma config WRT = OFF #pragma config PLLEN = OFF #pragma config STVREN = ON #pragma config BORV = HI #pragma config LVP = OFF
void main(void) {
volatile uint32_t i;
OSCCON = 0b01110010 ; OPTION_REG = 0b00010000 ; ANSELA = 0b00010000 ; TRISA = 0b00011000 ; WPUA = 0b00001000 ; PORTA = 0b00000000 ;
while (1) { RA0 ^= 1;
for(i = 0; i < 10000; i++); }
(b)(例2) 前の例に注釈を入れ、再利用可能なようにマクロや関数を作成したもの
/*
* File: led-12f1822.c * Author: kaimu
*
* Created on May 4, 2016, 5:23 PM *
* LED1 : PIN 7 (RA0) : 1-ON, 0-off * Optical Sensor : PIN 3 (AN3/RA4)
* */
#include <xc.h>
#include <stdint.h> // ビットを意識した int 型を使うためのヘッダファイル
// LEDを光らせるマクロを定義 #define ledOn() (RA0 = 1) #define ledOff() (RA0 = 0)
#define led() (RA0 ^= 1) // LEDを点滅する
// PIC12F1822のコンフィグレーション (Configuration) #1 #pragma config FOSC = INTOSC // Internal Clock #pragma config WDTE = OFF // NO Watchdog timer
#pragma config PWRTE = ON // Program start at Power on after 64ms #pragma config MCLRE = OFF // No Ext Reset, Enable RA3 input pin #pragma config CP = OFF // No Code protect
#pragma config CPD = OFF // No Data Protect #pragma config BOREN = ON // Brown out enable #pragma config CLKOUTEN = OFF // CLKOUT as RA4
#pragma config IESO = OFF // No Internal External clock #pragma config FCMEN = OFF // No FCM
// PIC12F1822のコンフィグレーション (Configuration) #2 #pragma config WRT = OFF // No Write Protect #pragma config PLLEN = OFF // No PLL
#pragma config STVREN = ON // Reset on Stack over / under flow #pragma config BORV = HI // Watch Voltage drop (2.5V = HI) #pragma config LVP = OFF // No Low Voltage Programming
void wait(volatile uint32_t i)// 処理をちょっと待つ関数 {
while (i-- > 0); }
void initIO(void) // I/Oポートの初期化 {
OSCCON = 0b01110010 ; // Internal clock 8MHz
OPTION_REG = 0b00010000 ; // Weak Pull up Resistor RA4-OFF, others ON ANSELA = 0b00010000 ; // Analog PORT AN3(RA4)
TRISA = 0b00011000 ; // Input : RA34, Output: others WPUA = 0b00001000 ; // Weak pullup : RA3
PORTA = 0b00000000 ; // Initialize PORTA }
void main(void) {
initIO(); // I/O ポートの初期化
while (1) { // 無限ループ
led(); // LED が点灯していれば消灯し、消灯していれば点灯する wait(10000); // ちょっと待つ
(5) ビルドと書き込み
[Make and Program Device Main Project]のアイコンをクリック
[CAUTION]警告のダイアログボックスが表示されたら、
電源が正しく接続されていることを確認して、[OK]をクリック。
※書き込みの段階で、赤い字でエラーメッセージが出る場合、電源が接続されていなかったり、 クリップやジャンパーコードの接続に不具合があったりすることが多い。