自作USBデバイスを開発したい人にオススメの本

自作USBデバイスを作るにあたって、参考にした本を紹介します。
※今週はあまり作業がすすまなかったので、積読本の消化にあてました。



各種USBコントローラの使い方・解説、USBデバイスドライバの開発、USBデバイスの設計&製作例が沢山載っています。回路図も沢山あるので、使ってみたいUSBコントローラの回路図がすぐに役に立つと思います。USBN9602/03/04、EZ-USB SX2、EZ-USB FX2、USBホストSL811FC、FT8U232/245など。




↑の本と似通った内容なのでどちらか1冊あれば十分かな。中身をみて参考にしたいコントローラの解説があるほうを選べばよい。FT232/245/2232の解説が欲しい人はこっちかな。。けどFT232はBMのほうだったり、、BMのほうはシンクロナスビットバンモードが使えません。


PICで楽しむ USB機器自作のすすめ
後閑 哲也
技術評論社
売り上げランキング: 59279
価格: ¥ 2,814


PICで作ることが決まっているならこれ!本書ではUSBフレームワーク、USB関連レジスタの説明・使い方が丁寧に解説されています。本書で解説されているUSBフレームワークのバージョンは1.1です。最新のUSBフレームワークのバージョンは2.0。バージョン2.0ではファイル構成が大きく変わっていますが、コード自体それほど変わっていなさそうなので、本書の解説は役に立ちます。



なんでも作っちゃう、かもストア: USB関連書籍
http://astore.amazon.co.jp/nandemotukuty-22?_encoding=UTF8&node=29

なんでも作っちゃう、かも。: 自作USBデバイス
http://arms22.blog91.fc2.com/blog-category-24.html

PIC18F2550でUSB入力デバイスを作る(6)。

ロータリーエンコーダキーボード表
ロータリーエンコーダキーボード用アルミフレームに部品を取り付けてみました。なかなかの見栄えです。取り敢えずロータリーエンコーダを四つ取り付けています。1つはプッシュスイッチ付き。

ロータリーエンコーダキーボード裏
裏側です。右側の黒いケースはテイシン電機のTB-55B(W80xD50xH20mm)。アルミフレームと同じ幅(80mm)なのでぴったりです。基板用ケースとしての役割以外にロータリーエンコーダを取り付ける為の隙間を作るゲタの役割も果たしています。この写真を撮った時点ではケースの中身は空です。

ロータリーエンコーダキーボード基板
ケースの中身です。メインのマイコンPIC18F2550がのっています。LEDとスイッチはブートローダー用。

ロータリーエンコーダキーボード用アルミフレームはまだ9枚残っています~。欲しい方、作ってみたい方はコメント(メールアドレスは非公開)、もしくは arms22 at gmail.com までご連絡ください。
アルミフレームのサイズはW80xD130xH3、ロータリーエンコーダやボリュームが取り付けられる7φの穴が計35個あります。1枚1600円です。
※図面はあとでアップします。

PIC18F2550でUSB入力デバイスを作る(5)。

自作キーボード用アルミフレーム 自作キーボード用アルミフレーム
自作キーボード用アルミフレーム
ロータリーエンコーダキーボード用のアルミフレームが届きました。こちらの板金屋さんに製作をお願いしました。1枚だけの発注だと1枚7000円だけど、10枚発注すると1枚1600円になります。ので10枚製作依頼した。1枚は自分で使うとして残り9枚何に使うんだよ orz。。
アルミフレームのサイズは130mm×80mm×3mm、ロータリーエンコーダやボリュームが取り付けられる7φの穴が計35個あります。打ち抜き加工(?)されているので裏側には少々バリがあるので、紙ヤスリなどで削ります。

欲しい方がいましたらコメント(コメントのメールアドレスは非公開です)、もしくはメール(arms22 at gmail dot com)でご連絡ください。

PIC18F2550でUSB入力デバイスを作る(4)。

P1430010.jpg

6つのロータリエンコーダを使ったキーボードをブレッドボード(パンじゃないですよ!)に実装しました。とりあえずSafariに特化して次のようにキーを割り当てた。左のロータリエンコーダから右回り、左回りの順で記載。
  • TAB、シフトTAB
  • コマンド+]、コマンド+[ ※Safariでは「次に進む」「前へ戻る」
  • カーソル→、カーソル←
  • カーソル↓、カーソル↑
  • ページダウン、ページアップ
  • Volアップ、Volダウン
ロータリーエンコーダのデコード方法はELM-ChaNさんのページが参考になります。ロータリーエンコーダの出力(A相、B相)を2bitのバイナリコードとして扱い、前回値と今回値をテーブルのインデックスとし、変換テーブルを使って回転方向を判定します。

ロータリーエンコーダの使い方
http://elm-chan.org/docs/tec/te04.html

usbencoders.png

回路図です。ロータリーエンコーダの出力をPICのポート1つ1つに割り当てています。6ロータリーエンコーダ×2出力で12ポート使用しています。このままだとLEDやスイッチを追加していくにはポートが足りなくなりそうです。そこで、次のようにマトリクス上にロータリーエンコーダを配線する方法を思いつきました。こうすれば12ポートを7ポートまで減らせるかもしれない。

matrix.png

SEG1-SEG2は常時入力ポートにしておき、読み取りを行う直前にSEG1-SEG2いずれかを出力Lにする。SEG1-SEG2を順番に出力Lにして、REnc1-A/REnc1-B、REnc2-A/REnc2-Bを読み込めば、6ロータリーエンコーダすべての値が読みとれる。SEG1-SEG2は3-to-8-ラインデコーダが使える、、あ、ラインデコーダじゃ非アクティブポートをHi-Zにできないわ。

PICのファームウェアは前回作成したHIDKeybordをベースに作成しました。USB経由でファームウェアを更新できるようUBWに対応しました。UBWについてはこちらのWikiが参考になります。

memo/UBW - 千秋ゼミ
http://www-ice.yamagata-cit.ac.jp/ken/senshu/sitedev/index.php?memo%2FUBW

UBWに対応する為にやるべきことは次の四つ。
  • ブートモードに入るためのスイッチを追加する
    SW1をMCLR、SW2をRC2
  • ブートローダが使用するLEDを追加する
    LED1をRC0、LED2をRC1に接続。
  • PICライタでブートローダを書き込む
    ブートローダを1度書き込めば以降、ブートモードで立ち上げて、USB経由でファームウェアをダウンロードできる。
  • ファームウェアをブートローダに対応する
    リンカスクリプトをブートローダ対応版に差し替える。

PIC18F2550でUSB入力デバイスを作る(3)。

P1000003.jpg
6連ロータリエンコーダ!デデントデテント付き!カタンカタンってなるやつ!
こいつでGoogle Earthを操作すると面白いかも。
※携帯電話のカメラで撮ったので汚くてすみません。。

P1000004.jpg
裏側。アンティークコンピュータ図鑑みたいな本をみて以来、大量のコードの束に惹かれるようになった。1つ1つの部品から伸びてくるコードがだんだん束になっていく様がいい。これはまだまだ序の口だけど。
フレームは段ボールを加工して作りました。数字なんか入れてやると少し見栄えするようになります。

ロータリエンコーダは共立電子シリコンハウス3Fレジカウンタ横に置いてあります。デデントデテントなしのものもあります。1個¥150。秋月より安い。

追記 2008/8/25
ロータリエンコーダはALPS電気製EC16Bだと思います。たぶん。。(お店で型番を見てなかった)

PIC18F2550でUSB入力デバイスを作る(2)。

こちらの記事を参考にMicrochip社のUSBフレームワークに付属するHIDクラスのデモソースをPIC18F2550で動くように変更しました。
マウスのデモ(カーソルがぐるぐる回る)とキーボードのデモ(スイッチを押すたびに'a','b','c'と入力される)2つを動作させてみました。

USBフレームワークはv2.2になって大幅にファイル構成が変わっていましたが、
スイッチやLEDを接続するポート、コンフィグレーションワード、あとディレクトリ構成にあわせてインクルードパスを追加するだけで動作させることができました。

変更が必要なファイルは HardwareProfile.h (共通)と mouce.c (マウス)または Keyboard.c (キーボード)です。
※私の好みでUSBフレームワークのソースコードも今回作成したプロジェクトのディレクトリに置いていますが、変更が必要なファイルは上記2つ(HardwareProfile.hとmouce.cまたはKeybord.c)のみです。

HardwareProfile.h
48行目で自作ハードウェアであることを宣言します。
#define DEMO_BOARD USER_DEFINED_BOARD
#define USER_DEFINED_BOARD
ファイルの最後の方に自作ハードウェア用の設定を記述します。
#if defined(USER_DEFINED_BOARD)
...
#define mInitAllLEDs() LATC &= 0xF0; TRISC &= 0xF0;
#define mLED_1 LATCbits.LATC0
#define mLED_2 LATCbits.LATC1
...
#define mInitAllSwitches() TRISBbits.TRISB4=1;
...
今回のハードウェアではRC0にLED1、RC1にLED2、RB4にsw2を接続しています。

mouce.cまたはKeybord.c
ファイルの先頭の方で次のようにコンフィグレーションワードを設定します。
#elif defined(USER_DEFINED_BOARD)
#pragma config FOSC = HSPLL_HS
#pragma config WDT = OFF
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config PWRT = ON
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config LVP = OFF
#pragma config VREGEN = ON
#pragma config MCLRE = ON
#pragma config PBADEN = OFF

usb_descriptors.c
次のようにstring descriptorを変更しておけば自作デバイスっぽさがアップします。
//Manufacturer string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[21];}sd001={
sizeof(sd001),USB_DESCRIPTOR_STRING,
{'n','a','n','d','e','m','o','t','u','k','u','t','t','y','a','u','k','a','m','o','.',
}};

//Product string descriptor
ROM struct{BYTE bLength;BYTE bDscType;WORD string[17];}sd002={
sizeof(sd002),USB_DESCRIPTOR_STRING,
{'M','y',' ','H','I','D',' ','M','o','u','s','e',' ','D','e','m','o',
}};

ハードウェアは、
  • MCLRを10Kでプルアップ
  • 20MHzセラロックを接続
  • RC0にLED1を接続(Hiアクティブ)
  • RC1にLED2を接続(Hiアクティブ)
  • Vusbに0.1uFを接続
  • D+,D-を接続
  • RB4にsw2を接続(10Kでプルアップ)
  • RB5にsw3を接続(10Kでプルアップ)

今回作成したプロジェクトファイルを置いておきます。
※このプロジェクトファイルにはUSBフレームワークが同梱されています。別途USBフレームワークをダウンロードする必要はありません。

HID Mouse
http://xfind.hp.infoseek.co.jp/electric/hid/HIDMouse.zip
HID Keybord
http://xfind.hp.infoseek.co.jp/electric/hid/HIDKeybord.zip

PIC18F2550でUSB入力デバイスを作る。

まずは情報収集。

辻見裕史のホームページ - PIC
http://phys.sci.hokudai.ac.jp/LABS/yts/pic/pic.html
USBデバイスとPCとの関係が書かれている。分かりやすい。Microchip社のUSBフォーラムの有益な情報へのリンク多数あり。

趣味のブログ - MCHPFSUSBの、HIDクラスを使ってみました
http://sfukuda.at.webry.info/200804/article_18.html
Microchip社が提供するHIDクラスのサンプルコードをPIC18F2550で動くように変更している。参考になる。

新適当マイコン電子工作研究所 - USBプロジェクト - HIDデバイス(1)
http://noritan-micon.blog.so-net.ne.jp/2008-04-07
Tsuneoさんのコメントが大変参考になります。

USB - Device Class Definition for Human Interface Devices (HID)
http://www.usb.org/developers/devclass_docs/HID1_11.pdf
わからなくなったらここを見るしかない。

USB - HID Usage Tables
http://www.usb.org/developers/devclass_docs/Hut1_12.pdf

daily dayflower - MVPen (Pegasus Mobile NoteTaker) の解析 (3)
http://d.hatena.ne.jp/dayflower/20080807/
Report Descriptorについての解説。MacOSX環境でDeveloperツールをインストールされている方は /Developer/Applications/Utilities/USB Prober.app を起動してマウスやキーボードのReport Descriptorをみるとイメージをつかみ易いかも。

スキャンコード - Wikipedia
http://ja.wikipedia.org/wiki/スキャンコード

開発環境。

USB Application Design Center
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2651¶m=en534494
ここからPIC18/PIC24F用USBフレームワークがダウンロードできる。最新のUSBフレームワークはv2.2。v2.2に関する情報は少なくほとんどのサイトがv1.3を使って開発している。せっかくなので今回はv2.2を使って開発しよう。

MPLAB C Compiler for PIC18 MCUs
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en010014&redirects=c18
USBフレームワークはC18 C CompilerもしくはHI-TECH社のコンパイラ用に作られている。SDCCでの開発は、、フレームワークを移植すればできそうだけど、よけいな問題は抱え込みたくないのでまずはC18 C Compilerを使うことにする。開発はWindows環境で。

関連書籍。
PICで楽しむ USB機器自作のすすめ
PIC18を使ったUSBデバイスの開発について書かれています。PIC18FのUSBモジュールの解説などもあり参考になる。

USBターゲット機器開発のすべて―各種USBコントローラの使い方と基本ソフトウェアの作成法 (TECHI―Bus Interface)
PIC18を使ったUSBデバイス開発の解説があります。

オリジナルUSB機器の設計と製作―USBインターフェースの基礎から応用までを豊富な設計・製作例を通して学ぶ (ハードウェア・セレクション)
ハードウェアより。PIC18も一応ある。EZ-USBとか他デバイス多数。
Ads by Google
最近の記事
カテゴリ
Arduino (114)
電子工作 (114)
スタバッテルミン (5)
スタバカップアンプ (17)
電光掲示板 (7)
イベント (59)
太陽電池 (12)
ニキシー管 (19)
ARM (8)
PIC (20)
USBデバイス (7)
V850 (17)
Xfind (6)
プログラミング (5)
Android (3)
未分類 (25)
カメラ (6)
本 (18)
mbed (2)
SoftModem (0)
3Dプリンタ (35)
Amazon.co.jp
最近のコメント
三ツ星トラフィック:MPPT太陽電池充電(7) (08/29)
nameless911:Ogaki Mini Maker Faire 2014に行ってきたよ。 (08/28)
claynets:オープンソースのPCBCAD「KiCad」。 (08/26)
arms22:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (08/11)
Sekine:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (08/10)
arms22:ArduinoでSDメモリカードを読み書きする (08/05)
arms22:ArduinoでSDメモリカードを読み書きする (07/24)
arms22:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (07/22)
Sekine:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (07/20)
arms22:Arduinoで遊ぼう - OAuthを使って安全につぶやくライブラリ「Stewitter」 (07/11)
リンク
Ads by Google
以前の記事
プライバシーポリシー
当サイトでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 (氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、ここをクリックしてください。