PICkit 2 Debug Expressに付属の44-Pin Demo Boardが動くのはわかったから、いよいよ自分で買ってきたPIC16F877Aを動かしたい。
しかし、PICkit 2はICSPで書き込むので、書き込みの回路と動作確認の回路を1つにしないといけない。
ICSPの回路はいろいろ制限がありそうで嫌だから、とりあえず2つの回路が干渉しないように動作確認は簡単だけどプログラムとして動作しているのがわかる程度にしておく。
まずはPICkit 2のコネクタとPIC16F877Aをつなぐ部分だけの回路図を書いてみた。
これに動作確認のためにポートDの0~3にLEDをつないで順番に光らせることにした。
プログラムはデモボード用に書いたCのソースを0~3でループするように変更したのを用意した。
#include <pic.h> void delay(void) { unsigned char i, j; for (i = 0; i < 254; i++) { for (j = 0; j < 254; j++) { } } } void main(void) { TRISD = 0; unsigned char led = 0x01; do { PORTD = led; if (led == 0x08) { led = 0x01; } else { led <<= 1; } delay(); } while (1); }
MPLAB IDEを起動してプロジェクトを作成し、ビルドはOK。
しかし、うまく動かない。というか、まったく動かない。
メッセージを見る限りでは書き込みは終わっているらしいんだけど、実行されていない感じ。
Debugをしようにも「PICkit 2 was unable to establish a valid Vdd on the target (Attempted 5.0V - Read 0.0V)」というエラーメッセージが出てDebug Modeに入れないという。
DebuggerメニューのSettingでもVddに+5Vを供給はしているので大丈夫だとは思うんだけど。
せめて書き込みが正常に終わっているのか明確になれば原因も探りやすいと思って、PICkit 2のアプリを起動してみた。
Readボタンがあったので、Readするとデータ(プログラム?)は読み取れる。
「ふむふむ。何か書き込まれているらしいな」ということはわかった。
けど、これが出荷時に何かプログラムが書き込まれている可能性は十分にあるので、何か他のプログラムを用意して書き込んでみて、内容が変わるかを見ることにする。
C言語だと似たようなコードになるだろうから、デモボード用のレッスンファイルから02 Blinkというプログラムのアセンブラソースを持ってきてプロジェクトを作成し、PIC16F877A用にビルドしてみた。
すると、__CONFIGのところでエラーが出るので、インクルードファイルを見ながらエラーのものは削除してエラーが出ないようにした。
やはり動かないけどPICkit 2アプリでReadすると明らかに違うコードが書き込まれていた。
どうやらICSP部分は動いているらしいことがわかった。
(ただし、正常に動いているかは不明だけど。)