Edited at

PIC18で始めるUSBデバイス自作 その1:サンプルプロジェクトを動かす

More than 1 year has passed since last update.


はじめに

USBデバイスを作ってみたくなりました。

今まではFTDI社のFT232やFT245などを使ってきましたが、より簡単に繋いだり、

マイコンと直結させたりしたいといった欲求を満たすには、USBを勉強する必要があります。

ので、まず、日本では比較的ポピュラーなmicrochip社のPIC 18FシリーズのUSB内蔵品を使って、

USBの世界に触れてみようと考えました。


注意


  • USBの物理層には触れません

  • USBの接続に係る部分は勉強せず、フレームワークを使用します

  • とりあえずベンダークラスデバイスで、libusb1.0を使ってPCと通信できるのを目標とします。


今回やること


  • PICの開発環境を導入します

  • USBフレームワークのデモを書き込みます

  • HID mouseデモを実行し、マウスがグルグル回るさまを眺めて終わりです。


準備するもの

マイコンの開発のため、物理的なデバイスが必要となります。


マイクロチップ PICkit3(¥4,980)

PICの書き込みに使用します。

18F14K50へ書込み可能な他のICSPライターで代用しても構いません。

http://akizukidenshi.com/catalog/g/gM-03608

秋月電子通商で購入できます。



引用元: 秋月電子通商


PIC18F14K50使用USB対応超小型マイコンボード(¥800)

USB端子・書き込み端子が揃っており、公式サンプルがあります。

ピンヘッダも入っています。USB機器開発を始めるにはうってつけです。

http://akizukidenshi.com/catalog/g/gK-05499/

秋月電子通商で購入できます。

K-05499.jpg

引用元: 秋月電子通商


ハンダこて・ハンダ

適時購入してください


Windows PC

Windows 10 64bitで動作を確認しています。


開発環境の導入


MPLAB X

統合開発環境です。アセンブラが同梱されています。

こちらからダウンロードし、インストールしてください

http://www.microchip.com/mplab/mplab-x-ide

MPLAB® X IDE v4.01で動作を確認しています。


XC8 Compiler

コンパイラです。USBブートローダーが使えないことに目をつぶれば、

最適化なしのフリー版で十分です。

こちらからダウンロードし、インストールしてください

XC8,XC16,XC32がありますが、XC8だけで十分です。

http://www.microchip.com/mplab/compilers

MPLAB® XC8 Compiler v1.43で動作を確認しています。


Microchip Libraries for Applications

これがUSBフレームワークとデモになります。

こちらからダウンロードし、インストールしてください

http://www.microchip.com/mplab/microchip-libraries-for-applications

Microchip Libraries for Applications(v2017-03-06) Windows版で動作を確認しています。


組み立て

マイコンですので、組み立てが必要です。

このようにピンヘッダをはんだ付けしてください。

今回、回路は組み立てず、USB機能だけ使うので、書き込み用ピンヘッダのみでも構いません。

A.jpg


デモを書き込もう


MPLAB Xを起動する

スタートメニューから起動してください。

コマンドプロンプトが立ち上がった後、JAVA製のIDEが立ち上がります。

中身はNetBeansらしいです。そのため、NetBeansプラグインが使えるようです。


デモプロジェクトを開く

File→Open Projectをクリックし、開いたダイアログで以下のパスを開く。

C:\microchip\mla\v2017_03_06\apps\usb\device\hid_mouse\firmware

そして、以下のプロジェクトを読み込む。

low_pin_count_usb_development_kit_pic18f14k50.x


書き込みツールの切り替え

USB Device - HID - Mouse と書かれたプロジェクトを右クリックしてpropertiesを開く。

開いた画面のメニューの「Conf: [LPCUSBDK_18F14K50]」をクリック。

初期設定では「Hardware Tools」にて「ICD3」が選択されていますが、「PICkit3」をクリックし、OKを押します。

これで書き込みツールが切り替わります。

※OKがクリックできず、Cancelしか選べないときはIDEの調子が悪いことが多いため、

 IDEを起動し直し、プロジェクトを開き直すと行ける場合があります。

N.png


書き込み時電源供給の設定

今回は、18F14K50基板を単体で(電源供給すること無く)書き込むため、その設定も行います。

まず、再度プロジェクトのpropertiesを開きます。

先程までICD3が表示されていた左メニューがPICKit3になっていますので、クリック。

M.png

そして、画面上の「Option categories:Memories to Program」をクリックし、「Power」に変更。

「Power target circuit from PICKit3」のチェックボックスをオンにし、OKをクリックします。

これにより、書き込み時にPICKit3から電源供給がされるようになります。

「Voltage Level」は3.0~5.0の間であればOKです。

O.png


ビルドと書き込み

PICKit3に基板を差し込み、PICKit3自体もPCに接続します。

基板は図の向き、位置に差し込んでください。

B.jpg

そして、Make and Programボタンを押します。

P.png

このような画面が出たら、PICkit3の下にぶら下がっているSNから続く機器を選択してください。

Q.png

本当に電圧掛けていいのか?と聞かれますのでOKをクリック。

R.png

あとはしばらく待てば、書き込みが完了します。

Output欄にPrograming/Verify completeの表示が出れば完了です。

S.png


デモのテスト

PICKit3から基板を引き抜き、USBケーブルを接続してください。

PICKit3同梱のminiBケーブルでOKです。

image.png

しっかり奥まで差し込むと、PICKit3のときより煌々と明るく電源LEDが光り始め、PCにマウスとして認識されるはずです。

image.png

こんな感じでひとりでにマウスがぐるぐる回れば成功です。

ただし、このデモは本来デモ基板用のデータなので、スイッチがつながっている前提らしい挙動をします。

基板の足に適当に触ると、挙動が変わったり止まったりします。

output.gif


おわりに

今回は、PIC 18F14K50を使ったUSB機能のデモを動かすまでを紹介しました。

次はベンダークラスでバルク転送するデモを動かした後、

簡略化したプログラムを構築する予定です

次回はこちら


疑問

バッファにデータを入れないまま、送信要求を受けるとどうなるのだろう。

NAKで待たされる?あっ、バルク転送タイムアウト?それとも0バイトが帰る?

サンプルの書き方的には0バイトが帰ってるっぽいかな。


参考文献


現状のフレームワークの読み解き方、必要なファイルの選別

PICでUSBを動かす(その2) loops/ウェブリブログ

http://loops.at.webry.info/201404/article_3.html


18F14K50全般の使い方

はじめてのPIC 18F14K50

http://sky.geocities.jp/home_iwamoto/page/P14K50/P14_00.htm


日本語データシート

http://ww1.microchip.com/downloads/jp/DeviceDoc/41350D_JP.pdf