PICマイコンにプログラムを書き込むにはPICkit2が便利です。しかし当然ここにもいくつかの罠が仕組まれています。
PICkit2はICSP(In Circuit Serial Programming)を実現します。 つまりPICを回路から取り外さなくてもPICにプログラムを書き込むことができます。 しかしPICkit2を回路につないだ状態で回路の電源を入れると回路が誤動作することがあります。。 回路の電源を入れるときはPICkit2を外さなくてはいけません。
またプログラム書き込み用のピンは通常のI/Oと兼用することができます。しかしそのピンを入力として使う時は注意が必要です。
PICマイコンのピンが入力ということはそれにつながるデバイスは出力です。
たとえばそのデバイスが0Vを出力している状態でICSPを行なうとどうなるでしょう。
以下のようにデバイスの代わりにスイッチを接続したもので考えます。このスイッチがONの状態でICSPを行なうということです。
PICkit2が発生するプログラミング電圧とGNDがショートし、PICkit2かデバイスが壊れます。
対策として下図のようにデバイスのそばに抵抗を入れます。これで電流が制限され、問題なくICSPが行なえるようになります。
PGCピンも入力として使用する場合は同じようにします。
しかしこの対策には欠点があります。回路動作時にこの抵抗が電流を制限するため、高速でON/OFFができなくなります。
特にdsPIC30F2012などのようにSPIピンとICSPピンが兼用の場合、ICSPのためにいれたこの抵抗のせいでSPI通信に制限が生じます。
dsPIC30F2012は最大20MHzでSPI通信ができるはずですが、この1kΩの抵抗があると、20MHzでは正常に通信できません。
一見できているようにみえても誤動作している時があります。オシロで波形を見ると信号がかなり鈍ってしまっていることがわかります。
これを避けるにはそもそもこのピンをプログラム書き込みと通常のI/Oで兼用しないことです。どうしても必要な場合はスイッチで切り替えます。