ダウンロードするには

データシートをよく読む

 PICマイコンのデータシートを読んでいきます。ちなみに最初に選んだPICマイコンは、PIC16F628Aというチップです。秋月電子通商で1個200円で売ってるものです。それを教材にしてPICプログラムを作ります。これからの説明は、PIC16F628Aについてですので、他のデバイスだとちょっと違うかもしれません。

 MICROCIHP社のPIC16F628Aのページから、データシートをダウンロードして読んでみます。アップデートによって章やページは変わるかもしれませんが、ちょうど今ダウンロードしたバージョンのドキュメントでは、14.11章にIn-Circuit Serial Programmingの項目がありました。2本のシリアル線(データ・クロック)と、電源5V、GND、プログラム電圧Vppで書き込めるようです。その次の14.12章には、Low-Voltage Programmingっていうのがあります。しかし、この資料には大したことは書いていません。PIC16F627A/628A/648A EEPROM Memory Programming Specificationを読むように書いています。将来URLは変更されるかもしれませんが、その時は検索して手に入れましょう。

 そっちを読んでいくと、Vppは12Vから14V、しかしLow-Voltage Programmingなら、4.5V〜5.5VでOKのようです。これこれ。このLow-Voltage Programmingなら、与える電圧は5Vだけでよくて、13Vを作る必要がないんですね。5VだったらUSBポートから供給されているので、そのまま使うことができます。だったらこっちの方法を使いましょう。13Vの方も、実際の電圧は内部で作るのであって、外部から供給する13Vはそのための基準電圧にするようです。たくさん電流をひくわけでもないようですので、作れるのなら作ってもいいのかもしれません。もしかしたらこの低電圧プログラミングができないデバイスもあるかもしれませんけど、まぁこれで商売するわけじゃないので別に構いません。自分用のができればOKというスタンスです。

プログラム/ベリファイモード

 プログラムを書き込むのは、PICマイコンを「プログラム/ベリファイモード」というモードに設定する必要があります。そうしなければ、自分の持つプログラムで勝手に動作を始めてしまいます。

 通常プログラミングと低電圧プログラミングでは、プログラム/ベリファイモードの設定方法に違いがあります。通常の方は資料を見ていただくとして、今回選んだ低電圧プログラミングについて見ていきましょう。

 データ、クロックをLOWにして、VDD(5V)=ON、Thld0時間(5usec)以上経過後PGMをHIGH、TLVPP(5usec)時間以上経過後MCLRをHIGHにするとプログラム/ベリファイモードでチップが起動します。アクセスは、さらにTPPDP時間(5usec)以上経過後に行います。

 データ・クロックの制御フォーマットはどうなっているのでしょうか。2.4.1章から各コマンドについて書いてあります。コマンド6ビット、データ16ビットのフォーマットで書き込みます。データ16ビットは不要なコマンドもあります。デーア16ビットのうち、実際に使うビットは真ん中14ビット。最初と最後を1ビットずつあけて、LSBファーストで送信します。コマンドは9種類。そのコマンドを、3.3章からのフローチャートを見ながら送信していけばいいでしょう。

 コマンド類を見ているとちょっと気になりました。PC、プログラムカウンタのあるところにデータを書き込むような仕様です。PCをインクリメントするコマンドはありますが、デクリメントや指定の位置に変更するコマンドはありません。というわけで、PCを戻すにはリセットかける必要がありそうです。

 その後の検証結果で、PGMピンをLOW→HIGHにするだけでリセットされてプログラム/ベリファイモードで再び起動するようです。また、PGMピンをHIGHにしたままMCLRをLOW→HIGHにするだけでもよさそうです。ただしこれらの操作はデータシートの手順に即していないのでなんらかの問題が発生する可能性があります。正しくは、先述のように、データ・クロックをLOWにして、・・・という手順を踏む必要があるのかもしれません。

 どうやらMCLRピンはリセットと同じ意味合いに使われるようですので、VDDはそのままであっても、PGMピンをHIGHにしたあとリセット解除(=MCLR→HIGH)にすればいいのではないかと思います。つまりリセットが解除されてPGMピンがHIGHレベルであればプログラム/ベリファイモードでチップが起動する、ということだろうと勝手に解釈してみます。そうすると、回路が若干カンタンになります。

PIC PICの一年生