2011年4月2日作成 2011年11月18日更新
安くて高機能なPIC24Fを使ってみたかったのですが、これまで使っていた秋月のPICプログラマ(初代?[写真右])では、PIC24Fの書き込みに対応していないので、自分で作ってみることにしました。
制御用マイコンにルネサスのR8C/M12A(秋月で100円)を使用しました。ファームウェアの書込みに書込み機が不要なので、マイコンの書込み機を何も持っていない場合でも製作可能です。でも、電子工作が初めてというような場合は、完成品のPICKIT2とかPICKIT3が4,000円前後で買えるので、それらを使用したほうが良いように思います。
USB接続にしたのでACアダプタが不要になって使いやすくなりました。
ソースファイルも公開しますので、自由に改良して使ってください。
R8CのファームウェアはHEWの無料版。windowsの書き込みソフトはVisual C# 2010 Express(無料版)で作成しています。
実行には .NET Framework 4 以降が必要なので、先にインストールしておきます。
書き込みソフトはインストール不要なので、zipファイルを解凍して実行するだけです。
COMポートとHEXファイルを選択して、スタートボタンを押すと書き込みを始めます。難しい事をしていないので、ぜひソースファイルも見て、できればもっとよく改良して使ってください。
いまのところ、PIC24FJXXXGA0XX と PIC16F87/88(LV-ICSPモードのみ) の書き込みができます。実行ファイルと同じディレクトリにある、デバイスリストファイル(ただのテキストファイル)を書き換えれば、LV-ICSPに対応したPIC16等8ビットPICにも書き込みできるんじゃないかと思います。
頻繁にマイコンの応答を確認しながら通信している関係で、USB-シリアル変換器によっては動作がとても遅くなることがあります。FT232RLの場合ドライバの設定で待ち時間を最小の1msにすると動作が速くなります。
データEEPROMの書き込みには対応していません。
PIC16シリーズで内蔵オシレータのキャリブレーションに使う値が、プログラムROMに書かれているものがあるようなのですが、この書き込みソフトではそれを考慮していません。そういうデバイスを持っていないのでテストする予定もありません。
チップイレース/バルクイレースコマンドを使っていないのと、HEXファイルにあるアドレス以外には書き込みをしないので、キャリブレーションデータは消えないのかもしれないけど、もしかしたら消えるのかもしれない?
PIC16の書き込みを行う場合、PGMピン(PIC16F88ならRB3)をVDDに固定しておきます。書いたプログラムを実行するときはPGMピンをGNDレベルに固定します。詳しくは使用するデバイスのデータシートを見てください。
; 手抜きのため、数は16進表記に限る。デバイス名に余計な空白禁止
;
;DEVICE, ID, PROGRAM ROM, ERASE, WRITE, DATA EEPROM, EREASE, WRITE
PIC16F87, 0720, 1000, 20, 4, 100, 1, 1
PIC16F88, 0760, 1000, 20, 4, 100, 1, 1
;
PIC24FJ16GA002, 0444, 2000, 200, 40, 0, 0, 0
PIC24FJ16GA004, 044C, 2000, 200, 40, 0, 0, 0
PIC24FJ32GA002, 0445, 4000, 200, 40, 0, 0, 0
PIC24FJ32GA004, 044D, 4000, 200, 40, 0, 0, 0
PIC24FJ48GA002, 0446, 6000, 200, 40, 0, 0, 0
PIC24FJ48GA004, 044E, 6000, 200, 40, 0, 0, 0
PIC24FJ64GA002, 0447, 8000, 200, 40, 0, 0, 0
PIC24FJ64GA004, 044F, 8000, 200, 40, 0, 0, 0
PIC24FJ64GA006, 0405, 8000, 200, 40, 0, 0, 0
PIC24FJ64GA008, 0408, 8000, 200, 40, 0, 0, 0
PIC24FJ64GA010, 040B, 8000, 200, 40, 0, 0, 0
PIC24FJ96GA006, 0406, C000, 200, 40, 0, 0, 0
PIC24FJ96GA008, 0409, C000, 200, 40, 0, 0, 0
PIC24FJ96GA010, 040C, C000, 200, 40, 0, 0, 0
PIC24FJ128GA006, 0407, 10000, 200, 40, 0, 0, 0
PIC24FJ128GA008, 040A, 10000, 200, 40, 0, 0, 0
PIC24FJ128GA010, 040D, 10000, 200, 40, 0, 0, 0
デバイス名:書き込みソフトは頭5文字を見て書き込み方法を決定します。(PIC16/PIC24)
デバイスID:データシートに載っている値。(16進)
プログラムROMサイズを16進で記述。今の書き込みソフトでは、hexファイルの内容を全部書くようにしているのでこの値は無視している。
イレースブロックサイズを16進で記述。たぶんPIC16はみんな0x20(32)じゃないかと思う。データシートに載ってる。PIC24ではチップイレースコマンドを使っているので、この値は無視している。
ライトブロックサイズを16進で記述。PIC16では1とか4とかいろいろある。わからない場合、とりあえず1にしておけば遅いけど書き込みできる。データシートに載ってる。PIC24では0x40(64)固定で処理しているのでこの値は無視している。
データEEPROMのサイズ。今のところデータEEPROMの書き込みには対応していないので、無視している。
データEEPROMのイレースブロックサイズ。たぶんPIC16はみんな1だと思う。
データEEPROMのライトブロックサイズ。たぶんPIC16はみんな1だと思う。
回路図の通りに作った場合、JP1をショートしてからUSBコネクタをPCに差し込むとファームウェア書き込みモードになるので、ルネサスのフラッシュ書き込みツールFDTでMOTファイルを書き込めば良い。エラー無く書き込みできたら、いったんUSBコネクタをPCから抜いてからJP1をオープンして再度PCに挿し込めば書き込み器として使用できる。
FDTはBASICモードのほうが機能が少なくてわかりやすいと思う。自分はBASICモードでしか使ったことがないです。
ルネサスのマイコンを使ったことがない場合、FDTのマニュアルとR8C/M12Aのデータシートも、日本語なので読んでみてください。
PIC24の書き込み手順でよくわからない所を参考にさせていただきました。
('A`)