PICでUSB
by K.I
2014/07/10
Index
- PICでUSBを使ってみたい。ということで、
- USBインターフェース内臓のPICでは、18F14K50が一番小さい様なので、これで試して1みよう。
1以前にもいろいろ試したんだけど、サーバクラッシュで記録が全て失われてしまったので、もう一度覚えている範囲でやりなおし。。
[top]
- Microchipから、MPLABXをダウンロードしてインストールしておく。
- 古いMPLAB8もダウンロード出来るので、そちらをダウンロードしても良いかもしれない。
- 今は、XCコンパイラが標準みたいなので、C18は古いのかもしれないけど
- C18コンパイラ用に書かれたソースもあるので、インストールしておく
- こちらから、MPLAB C for PIC18 v3.47 in LITE modeをダウンロード
- MicroChipのライブラリをダウンロードしておく
- こちらの、
- Current MLAから、mla_v2013_12_20_windows_installer.exeをダウンロード
- Legacy MLAから、microchip-libraries-for-applications-v2013-06-15-windows-installerをダウンロード
- 作業用のドライブがあるなら、インストールは、そちらのドライブに設定する。自分の場合はDドライブなので
- D:\microchip_solutions_v2013-06-15 にしておく
[top]
- Windows標準のCDCドライバを使うと、USBを通常のシリアルインターフェースのように通信できる
- PICもCDCクラスのライブラリが用意されているので、それを使ってみる
- LegacyMLAの方を使って、プロジェクトを新規作成
- File→New Project...で、Existing MPLAB IDE v8 Projectを選択して、Next
- Project Filenameに、D:\microchip_solutions_v2013-06-15\USB\Device - CDC - Basic Demo\Firmware\USB Device - CDC - Basic Demo - C18 - Low Pin Count USB Development Kit.mcp
- Deviceは、PIC18F14K50
- Supportted Debug Headerは、None
- Select Toolで、PICkit3
- Select Compilerで、C18を選択
- プロジェクトの場所は、MLAをインストールした同じドライブにする必要がある
- Project Name: cdc_demo
- Project Location: D:\work\pic\pic18f14k50
- Project Folder: D:\work\pic\pic18f14k50\cdc_demo.X
- Encoding: Shift_JIS
- Run→Clean and Build Project で、コンパイルしておく
- PIC18F14K50に、ブートローダーを書き込む
- File→Import→Hex/ELF...(Prebuild) Fileで、BootLoaderのHEXファイルを指定してHEXファイルだけのプロジェクトを作る2
- D:\microchip_solutions_v2013-06-15\USB\Device - Bootloaders\HID\USB Device - HID - HID Bootloader - C18 - PIC18F14K50.hex
- こんなメッセージが出た。これは念のためみたいなもんなのかな?まぁ、良しとする
CAUTION: Check that the device selected in MPLAB IDE(PIC18F14K50) is the same
one that is physically attached to the debug tool. Selecting a 5V device when a
3.3V device is connected can result in damage to the device when the debugger
checks the device ID. Do you wish to continue?
- プロジェクトを右クリックしてpropertiesを選択、
- PICkit3のOption Categoriesを Powerにして、Power target circuitfrom PICkit3にチェック
- Voltage Level は、よく分からないので、3.25Vのまま
- もう一度、やってみる
*****************************************************
Connecting to MPLAB PICkit 3...
Firmware Suite Version.....01.30.09
Firmware type..............PIC18F
Target detected
Device ID Revision = 8
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0xfff
configuration memory
Programming...
Programming/Verify complete
- PIC18F14K50のMCLR端子をLにして電源を入れると、BootLoaderが起動する
- USB-IO2.0(AKI)のMCLR端子は何も接続されていないので、スイッチを付ける
- これだけだと、常にBootLoaderが起動してしまう様なので、MCLRを10kΩでプルアップしておく
- 基板の裏側の、MCLR端子に繋がるスルーホールとGND間に小型のタクトスイッチを付けた(GNDのレジストを少し削った)
- さらにMCLR端子とVDD間に10kΩの抵抗を付ける
→USB-IO2.0基板に、BootLoader起動用のスイッチと、10kΩのプルアップ抵抗を付ける
- 3つのボタンの左側、Import Firmware Imageボタンを押して、予めコンパイルしておいたcdc_demoのHEXファイルを選択
- 真ん中の、Erase/Program/Verify Deviceボタンを押すと、
Starting Erase/Program/Verify Sequence.
Do not unplug device or disconnect power until the operation is fully complete.
Erasing Device... (no status update until complete, may take several seconds)
Erase Complete (1.066s)
Writing Device Program Memory...
Writing Complete (0.81s)
Writing Device Program Memory...
Writing Complete (0.006s)
Verifying Device's Program Memory...
Verifying Complete (0.427s)
Verifying Device's Program Memory...
Verifying Complete (0.002s)
Erase/Program/Verify Completed Successfully.
You may now unplug or reset the device.
書込みに成功したので、基板からUSBケーブルを抜く
Device Detached.
- ボタンを押さずに、USBケーブルをもう一度挿しなおす。
- USB Bootloaderのアプリは、何も反応しない
- 今度は、USB-IO2.0基板が、COMポートとして認識されている
- TeraTerm等のターミナルソフトを起動して、基板上のBootLoader起動用ボタンを押してみると、
Button Pressed --
- キーボードから、例えば 'ABCDE'と入力すると、
- アスキーコードで、+1された文字が表示される
BCDEF
2あぁ、面倒くさい。もっと簡単な方法ないのかなぁ。
[top]
- というか感想だけど、
- ブートローダを使うと、USB接続するだけで、プログラムの書き換えが簡単に出来るので、かなり便利
- 18F14K50はメモリも小さいので、大きなプログラムは無理だけど、
- A/D変換処理して、USBでPCに送信する簡単なプログラムを作っておくと、いろいろ使えそうな感じ
- CDCデモが動くのを確認したところまでしかやってないけど、いろいろ目移りしてなかなか進まない
- また消えたりすると困るので、とりあえず纏めておく。
- MPLABXで、プロジェクトファイルをコピーしてくると、うまくOpen出来なかったりする
- どうも、nbproject/configurations.xmlに、ファイルの絶対パスが書かれていて邪魔しているっぽい
- これを書き換えれば良さそうなんだけど、
- なんで、相対パスで書かないんだろう?
- いや、そもそも全部のファイルにPath付けるの止めて欲しい
- コンパイル後のコードはどうやって見るんだろう。
- その他、いろいろ分かりづらい。慣れの問題なのかなぁ
[top]
- 上記のボードが安価。DIP品でブレッドボードという手もあるけど、
- USBは水晶発振じゃないと安定して通信出来ないので、このボードを使うのが無難かな。
- どうせなら、ブートローダ用にリセットスイッチを付けてくれれば良かったのに。。
- ブートローダは、本家MicroChipのもの以外にも、いろいろ作ってる人が居る様だ
3とても長いけど、ものすごく参考になる。第498回〜第514回ぐらいが、18F2550を18F14K50に乗せかえる話。
[top]
- USBでキー入力するアクセサリを作りたいなぁと思って調べてみると、
- これはUSB接続のキー入力、JoyStick入力をするもので、キットも販売されている
- これも18F14K50を使っていて、回路図も公開されているので、試しに作ってみようと思う。
- 以前、USB-IO2.0(AKI)にブートローダのタクトスイッチを付けたものがあるので、
- まぁ、単純にJ1,J2の端子を全て1kΩでプルアップするだけなので、回路図描くまでもなかったかな。。
- ブートローダは前の章でやった様に、書き込み済みなので、同様の手順でDiviveUSBのファームを書き込む
- まず、ReviveUSBのファーム[REVIVE_USB_ver007.hex]をダウンロードしておいて、
- HIDBootloader.exeを起動して、
- タクトスイッチを押しながら、PCとUSB-IO2.0基板をUSBケーブルで接続して、
- 3つのボタンの左側、Import Firmware Imageボタンを押して、REVIVE_USB_ver007.hexファイルを選択
- 真ん中の、Erase/Program/Verify Deviceボタンを押すと、ファームが書き込まれる
- ファーム書き込みの時点では、1kΩのプルアップは無くても良い。
- DiviveUSBの設定ツール[REVIVE_USB_CT_v130.zip]をダウンロードする
- 設定ツールを起動してから、ファームを書き込んだUSB-IO2.0(AKI)を接続しても、
- 右下に、「デバイス未検出」と表示されており、ReviveUSBとして認識されない
- どうやら、プルアップをチェックしてるっぽいので、ブレッドボードで配線してみた
- こうすると「デバイス検出済」と表示され、RiviveUSBとして認識された!
- 例えば、こんな風に各ピンに12個のキーを割り当てることが出来る
- Windows7だと特にドライバなしで、キーボードとして認識され、キー入力できる
- 自分はこれが目的だったんだけど、これ以外にマウスやジョイパッドとして設定することもできる
- キーマトリクスとして使えるファームもあるらしい
- 自分は、USB-IOにブートローダのスイッチとか配線済みだったので、1kΩプルアップ追加して試してみたけど、
- 普通はReviveUSBのキットか組立済を買った方が簡単かな
[top]
[電子工作関連に戻る]