Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

gpsnmeajp
電子工作が主な趣味ですが、PC用のツールを作るのも好きです。 特にライセンスを明記していないソースコードのライセンスについてはCC0です。
https://sabowl.sakura.ne.jp/gpsnmeajp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away