PICkit3 と 44ピン デモボード
PICチップが使えるようになれば、電気を自由自在に操れます。そして様々な創作活動に応用できます。一度覚えれば一生ものです!
PICとは
PICはプログラム可能なICチップの事です。Microchipという会社の製品です。
扇風機や洗濯機などの家電には、PICのようなICチップが搭載されているので、ボタンを押したらスタートしたりタイマー設定したりできるのです。
PIC以外にも、H8、AVR、ARMといった商品が販売されています。右も左もわからなかったので、とりあえず秋月電子で見かけたPICkit3 デバッグエクスプレスを購入しました。(^^;
2018年7月29日追記:2018年3月1日にPICkit4が発売されました。1, 2か月前に秋月電子で販売されていましたが、その後見かけなくなりました。(^^;;;
デバッグエクスプレスには実験用基板 44pin demo boardが付属しています。この基板がない、Pickit3単体でもPICチップにプログラム可能です。たまたまデバッグエクスプレスしか在庫がなかったのでデバッグエクスプレスにしました。現在まで実験用基板を使う機会はほぼありませんでした。
PICに関する情報は様々あり、とても混乱しました。秋月電子ではライタが販売されていますが、これが必要なのかどうか、ダウンロードできる開発環境がMicrochip以外から販売されているが、わざわざ購入する必要があるのかなど、疑問に思いました。
見聞きした情報からの想像です。昔はライタ、開発環境、コンパイラーが別々になっており、各社が価格と性能、使用期限などに差をつけて商品をリリースし、マーケットを作っていたようです。しかし他社との競争のためか、Microchipが2012年にMPLAB X IDEやXCコンパイラーをリリースして状況が大きく変わったようです。
2016年現在では、開発環境にMPLAB X IDE、コンパイラーにXC8を使うのが一般的なようです。しかし、インターネットや書籍での情報のほとんどはMPLAB IDE、HI-TECH Cコンパイラー、MPLAB C18コンパイラー、CCS社Cコンパイラーを前提とした、以前の開発環境のままのようです。
Microchip社は移行を促しているようです。「MPLAB C18の製品寿命は終わりに近づいています。」と言い、「C18コンパイラからXC8 Cコンパイラへの移行ガイド」を作成しました。
PCへの設定
MPLAB X IDE (開発環境)とコンパイラーをPCへインストールします。コンパイラーにはXC8, XC16, XC32があります。各PICチップはこれらのいずれか1つに対応します。私はすべてインストールしておきました。
次に説明書とレッスンファイルをダウンロードしました。
MPLABを起動すると以下の画面になります。
ここから下は実験用基板 44pin demo boardの説明です。このボードを使うと、ボードに使われているPIC (18F45K20)の制御方法を勉強できます。しかし、サンプルプログラムがMPLAB Xで簡単に動作しないので、はっきり言って時間の無駄です。(T^T) 「PICチップの選び方」や「MPLAB XとMCCを使ったPICプログラミング」へ進むことをお勧めします。(^^;
まずはレッスンファイルを解凍しました。
C:\Users\user_name\MPLABXProjects\01 Hello LED\Lesson 1 LED.mcp や 01 Hello LED.cなどのファイルがあることを確認してください。
Pickit3を接続します。Pickit3のドライバーは提供されていないようです。MPLAB IDEが起動していれば、Pickit3が自動的に認識されます。そしてPOWERとACTIVEが点灯します。STATUSはまだ点灯しません。
プロジェクト作成
アイコンをクリックします。もしくは[File] – [New Project]の順にクリックします。
[Microchip Embedded] – [Existing MPLAB IDE v8 Project]を選択します。
先ほど解凍したmcpファイルを指定します。
書き込みたいPICチップの型番を指定します。自動的にPIC18F45K20が選択されます。選択されない場合は、[All Families]から[Advanced 8-bit MCUs (PIC18)]にするとDeviceが絞り込まれます。Deviceで[PIC18F45K20]を選択します。
PICkit3をクリックします。
コンパイラー選択画面です。XC8の下にある行をクリックします。
そのまま[Next]をクリックします。
C:/mcc18/h/p18f45k20.hとC:/mcc18/lkr/p18f45k20.h がMissing Filesになりますが[Finish]をクリックします。
ビルド
アイコンを押します。もしくは[Run] – [Build Main Project]の順にクリックします。するとプログラムがバイナリコードへ変換されるのですが、失敗してしまいました。サンプルプログラムのはずなのに。(^^;;;
Missing Filesのあたりから挙動が怪しいなと思いましたが。
:0: error: (500) undefined symbols: _TRISD(dist/default/production\Lesson_1_LED.X.production.obj) _LATDbits(dist/default/production\Lesson_1_LED.X.production.obj) (908) exit status = 1 make[2]: *** [dist/default/production/Lesson_1_LED.X.production.hex] Error 1 nbproject/Makefile-default.mk:125: recipe for target 'dist/default/production/Lesson_1_LED.X.production.hex' failed make[2]: Leaving directory 'C:/Users/user_name/Source Codes/MPLABXProjects/01 Hello LED/Lesson 1 LED.X' make[1]: *** [.build-conf] Error 2 nbproject/Makefile-default.mk:84: recipe for target '.build-conf' failed make: *** [.build-impl] Error 2 make[1]: Leaving directory 'C:/Users/user_name/Source Codes/MPLABXProjects/01 Hello LED/Lesson 1 LED.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed BUILD FAILED (exit value 2, total time: 1s)
C18からxc8へ
調べたところ、レッスンファイルが古いコンパイラー「MPLAB C18」用のものだと思われました。
#include “p18f45k20.h”
という部分を
#include <xc.h>
へ修正することでビルドできました。
実行
プログラムをPICチップへ書き込みます。そのためにはPICチップのVDDに電圧がかかっている必要がありますが、PICkit3が半自動的にやってくれます。
アイコンを押します。もしくは[File] – [Run Main Project]の順にクリックします。警告が表示されます。
Check that the device selected in MPLAB IDE (PIC18F45K20) is the same one that is physically attached to the debug tool. Selecting a 5V device when a 3.3V device is connected can result in damage to the device when the debugger checks the device ID. Do you wish to continue?
3.3V仕様のPICチップを接続している場合に間違って5V仕様のPICチップ設定になっていると、デバッガ(PICkit3)がPICのデバイスIDをチェックする時にダメージを与えてしまうのです。
PIC18F45K20の仕様を確認したところ、動作電圧は1.8Vから 3.6Vになっていました。間違って5VのPICチップ設定になっているとダメージになるという事ですね。危ない危ない。
普通はCancelを押します。でもOKを押してみましょう。(O.O)
エラーが表示されました。
Target device was not found (could not detect target voltage VDD). You must connect to a target device to use PICkit 3.
書き込み対象となるPICチップが見つからないというエラーです。原因は設定不足です。PICkit3からPICチップへ電力供給するよう設定しなければならないのです。
アイコンを押します。もしくは[File] – [Project Properties]の順にクリックします。
Conf: [default]の下にある[PICkit3] をクリックします。Option categories:を[Power]にします。
[Power target circuit from PICkit3]にチェックを入れ、[OK]します。Voltage Levelがデフォルトでは5.00なので、3.25にします。実際には1.8Vから 3.6Vであればいいのだと思いますが、私は3.25しか使ったことがありません。
再びアイコンを押します。もしくは[File] – [Run Main Project]の順にクリックします。また警告が表示されますので、今度は[Do not show the message again]にチェックし、[OK]をクリックします。
Programming/Verify complete
と表示されれば、書き込みが正常完了しました。またPICは直ちに動作を開始しています。
動作確認
実験用基板を見てみましょう。
基板上のLED7が点灯しました!
一度書き込みが完了すると、そのPICは電池でも動作するようになります。PICkit3を外して電池で動作することを確認しました。
手元にあった電池で3.0Vを接続しました。LEDが光っていますね。基板上の左上にはピンが刺さらないので (裏面にゴムがついているため)、下の部分を使用しました。
このように、44pin demo board用プログラムはMPLAB X IDE上で動作しません。また動作するバージョンを探したのですが、見つかりませんでした。それでもいくつかは動作したので、ここに掲載しておきます。
02 Blink LED
02 Blink LEDの修正点は以下の通りです。とりあえず動くようにはなりました。正しい修正方法は「C18コンパイラからXC8 Cコンパイラへの移行ガイド」に書かれているようです。
修正前
#include “p18f45k20.h”
#include “delays.h”
修正後
#include <xc.h>
修正前
/** D E C L A R A T I O N S *******************************************/
修正後
/** D E C L A R A T I O N S *******************************************/
#define _XTAL_FREQ 1000000
修正前
Delay1KTCYx(50); // Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz
修正後
__delay_ms(200);
動作確認
基板上のLED7が200ミリ秒間隔で点灯と消灯を繰り返します。
03 Rotate LED
03 Rotate LEDの修正点は02 Blink LEDと同じです。さらに以下の通り修正すると動作しました。
修正前
const rom unsigned char LED_LookupTable[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
修正後
const unsigned char LED_LookupTable[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
動作確認
基板上のLEDのうち1つがLED0、LED1、・・・LED7、LED0、LED1、の順に点灯します。
04 Switch Input
04 Switch Inputの修正点も02 Blink LEDと同じです。時間設定の部分は少し違います。
修正前
Delay10TCYx(25); // delay 250 cycles or 1ms.
修正後
__delay_ms(1);
ヘッダファイルにも修正が必要です。以下のように04 Switch Input.hを開き、修正してください。
修正前
#ifndef PICKIT_H
#define PICKIT_H
修正後
#ifndef PICKIT_H
#define PICKIT_H
#endif
動作確認
基板上のLEDのうちLED0が点灯します。基板上のスイッチSW1を押すとLED0が消灯し、LED1が点灯します。LED0、LED1、・・・LED7、LED0、LED1、の順にLEDが移動します。
12 CCP PWM
05-06 Timer-Debugから11 Program Memoryは時間の都合で省略し、12 CCP PWMにとりかかりました。
修正点は04 Switch Inputと同じです。ヘッダファイルも修正してください。時間設定の部分は少し違います。
修正前
Delay1KTCYx(63); // delay about 250ms at peak brightness, just for effect!
修正後
__delay_ms(250);
動作確認
基板上のLEDのうちLED7が点滅します。点滅の光は徐々に明るくなり、明るくなったら今度は徐々に暗くなります。明暗の間隔は3秒位です。
コメントを残す