XC8 HID 通信プログラム
PIC18のC言語がXC8になり、ブートローダー内のBIOSか使いにくくなりHID サンプルプログラムを一新しました。 これによりAE-PIC18F14K50もXC8に対応したプログラムに変更しました。
AE-PIC18F14K50とは、 秋月電子通商の販売する ボード(K-05499)でPIC18F14K50-I/SSとMini-USBが載った基板です。
これに、2KB HID ブートローダーとHID 簡易通信を元にしたモニタを書き込み、 Windows上で動作するコントロールアプリにて操作することにしました。
同様に販売しているUSB-IO2.0(AKI)同等に動かしてみようと。
ブートローダースイッチ
私が作った回路との大きな違いは、ブートローダースイッチが無いこと。 2.0版以前の2KB HID ブートローダーでは問題になります。
2.0版で付けたファームウェア側からのブートローダー起動機能により 問題なくファームウェアの書き換えができます。 ハードウェアに手を伸ばさなくて良いことが、予想以上に使いやすく感じました。
プログラム (2016/03/12更新)
PIC側ファームウェア
USBのプラグアンドプレイ部分にバグがあり特定の条件で接続までに時間がかかっていました。 それを修正しています
AE-PIC18F14K50用 ブートローダー/モニタ
ae-pic18f14k50_220.zip ( src\pic18f14k50_xc8_bootloader.hex / ae-pic18.X.production.hex )
HID ブートローダーとモニタプログラムのhexファイル及びソースファイル一式が入っています。
ブートローダーのソースは入っていません。2.0版と同じでLEDを使用しない設定にしています。
パソコン側プログラム
AE-PIC18F14K50 コントロールプログラム (Visual Studio Community 2015 / Visual C++にて作成)
制御プログラムとそのソースファイルが入っています。
回路図
まだ作ってないです。AE-PIC18F14K50 自体は半完成品です。
使い方
Version 2.00からは、ブートローダーがPICプログラムに書かれているので別々にPICライタで書き込む必要はないのですが…
- 先ずpic18f14k50_xc8_bootloader.hexをPICにライターを使って書き込みます。
- 次に、USBを接続しプートロダーを起動して AE-PIC18F14K50 のモニタ (ae-pic18f14k50.hex)を [Erase/Program/Verify Device] で書き込みます。
- モニタの書き込みが終了したら、[Reset Device] でAE-PIC18F14K50を再起動します。
- AE-Controll.exe を起動します。
-
最初にポートの入出力方向/プルアップを設定します。
ボタンは、押す(xpだと凹む/7だと色が付く)と入力(初期値)。
離す(xpだと凸る/7だと色が付かない)と出力になります。
そして[ポート設定]を押しデータを送信します。 - 次に出力ボタンを設定して[ポート出力]や[ポート入力]を押します。
- アナログ入力はコンボボックスから1チャンネル選んで入力することができます。 アクイジョン時間は、約5usですので10kΩ以下の入力負荷にしてください。 [ADC入力]を押すと16進データが返ります。
- [Bootloader]を押すと、ブートローダーへ制御を移します。
こんな感じで使うことができます。 後は必要応じてプログラムを改変して行きます。
Ver1.5では、タイマ割り込みを使った連続入力を付けてみました。 プログラムテスト用として(ちゃんとADC動いているかな?)
ファームウェア開発…
今回、HID 簡易通信を元にファームウェアを作りました。 HIDConsole.exeを使って通信の内容を確認しながら一つずつコマンド?とデータを実装していったのです。 何回も、PICに書き込んで…
全くハードに手を伸ばさないでプログラムを書き換えるので、 WindowsのMFCとMPLABを同時に起動し作業の中断が無く効率が良かったです。
Window側のプログラムも公開。 HID通信動作に関してはもう問題ないかな? 一応mpw5icspでも同様に使っているのでそこでも判るしいいかな。
免 責
情報は出来るだけ正確に書くつもりです。ただこの記事を見て作ると思ったときは、 個人の責任において作業を行なってください。 データの喪失や機器の損傷が有っても、一切の責任は取れません。