自作USBデバイスを開発したい人にオススメの本
Posted by arms22 on 2009年01月09日

自作USBデバイスを作るにあたって、参考にした本を紹介します。
※今週はあまり作業がすすまなかったので、積読本の消化にあてました。
―USBインターフェースの基礎から応用までを
豊富な設計・製作例を通して学ぶ
CQ出版
売り上げランキング: 131792
価格: ¥ 2,940
各種USBコントローラの使い方・解説、USBデバイスドライバの開発、USBデバイスの設計&製作例が沢山載っています。回路図も沢山あるので、使ってみたいUSBコントローラの回路図がすぐに役に立つと思います。USBN9602/03/04、EZ-USB SX2、EZ-USB FX2、USBホストSL811FC、FT8U232/245など。
―各種USBコントローラの使い方と
基本ソフトウェアの作成法
CQ出版
売り上げランキング: 75903
価格: ¥ 2,520
↑の本と似通った内容なのでどちらか1冊あれば十分かな。中身をみて参考にしたいコントローラの解説があるほうを選べばよい。FT232/245/2232の解説が欲しい人はこっちかな。。けどFT232はBMのほうだったり、、BMのほうはシンクロナスビットバンモードが使えません。
技術評論社
売り上げランキング: 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)。
Posted by arms22 on 2008年10月12日

ロータリーエンコーダキーボード用アルミフレームに部品を取り付けてみました。なかなかの見栄えです。取り敢えずロータリーエンコーダを四つ取り付けています。1つはプッシュスイッチ付き。
裏側です。右側の黒いケースはテイシン電機のTB-55B(W80xD50xH20mm)。アルミフレームと同じ幅(80mm)なのでぴったりです。基板用ケースとしての役割以外にロータリーエンコーダを取り付ける為の隙間を作るゲタの役割も果たしています。この写真を撮った時点ではケースの中身は空です。
ケースの中身です。メインのマイコンPIC18F2550がのっています。LEDとスイッチはブートローダー用。
ロータリーエンコーダキーボード用アルミフレームはまだ9枚残っています~。欲しい方、作ってみたい方はコメント(メールアドレスは非公開)、もしくは arms22 at gmail.com までご連絡ください。
アルミフレームのサイズはW80xD130xH3、ロータリーエンコーダやボリュームが取り付けられる7φの穴が計35個あります。1枚1600円です。
※図面はあとでアップします。
PIC18F2550でUSB入力デバイスを作る(5)。
Posted by arms22 on 2008年10月09日

ロータリーエンコーダキーボード用のアルミフレームが届きました。こちらの板金屋さんに製作をお願いしました。1枚だけの発注だと1枚7000円だけど、10枚発注すると1枚1600円になります。ので10枚製作依頼した。1枚は自分で使うとして残り9枚何に使うんだよ orz。。
アルミフレームのサイズは130mm×80mm×3mm、ロータリーエンコーダやボリュームが取り付けられる7φの穴が計35個あります。打ち抜き加工(?)されているので裏側には少々バリがあるので、紙ヤスリなどで削ります。
欲しい方がいましたらコメント(コメントのメールアドレスは非公開です)、もしくはメール(arms22 at gmail dot com)でご連絡ください。
PIC18F2550でUSB入力デバイスを作る(4)。
Posted by arms22 on 2008年09月08日

6つのロータリエンコーダを使ったキーボードをブレッドボード(パンじゃないですよ!)に実装しました。とりあえずSafariに特化して次のようにキーを割り当てた。左のロータリエンコーダから右回り、左回りの順で記載。
- TAB、シフトTAB
- コマンド+]、コマンド+[ ※Safariでは「次に進む」「前へ戻る」
- カーソル→、カーソル←
- カーソル↓、カーソル↑
- ページダウン、ページアップ
- Volアップ、Volダウン
ロータリーエンコーダの使い方
http://elm-chan.org/docs/tec/te04.html

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

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)。
Posted by arms22 on 2008年08月24日

6連ロータリエンコーダ!デデントデテント付き!カタンカタンってなるやつ!
こいつでGoogle Earthを操作すると面白いかも。
※携帯電話のカメラで撮ったので汚くてすみません。。
裏側。アンティークコンピュータ図鑑みたいな本をみて以来、大量のコードの束に惹かれるようになった。1つ1つの部品から伸びてくるコードがだんだん束になっていく様がいい。これはまだまだ序の口だけど。
フレームは段ボールを加工して作りました。数字なんか入れてやると少し見栄えするようになります。
ロータリエンコーダは共立電子シリコンハウス3Fレジカウンタ横に置いてあります。デデントデテントなしのものもあります。1個¥150。秋月より安い。
追記 2008/8/25
ロータリエンコーダはALPS電気製EC16Bだと思います。たぶん。。(お店で型番を見てなかった)
PIC18F2550でUSB入力デバイスを作る(2)。
Posted by arms22 on 2008年08月23日

こちらの記事を参考に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)今回のハードウェアではRC0にLED1、RC1にLED2、RB4にsw2を接続しています。
...
#define mInitAllLEDs() LATC &= 0xF0; TRISC &= 0xF0;
#define mLED_1 LATCbits.LATC0
#define mLED_2 LATCbits.LATC1
...
#define mInitAllSwitches() TRISBbits.TRISB4=1;
...
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入力デバイスを作る。
Posted by arms22 on 2008年08月23日

まずは情報収集。
辻見裕史のホームページ - 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とか他デバイス多数。