なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

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

Posted by arms22 on 2009年01月09日 0  0

自作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)。

Posted by arms22 on 2008年10月12日 0  0

ロータリーエンコーダキーボード表
ロータリーエンコーダキーボード用アルミフレームに部品を取り付けてみました。なかなかの見栄えです。取り敢えずロータリーエンコーダを四つ取り付けています。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日 0  0

自作キーボード用アルミフレーム 自作キーボード用アルミフレーム
自作キーボード用アルミフレーム
ロータリーエンコーダキーボード用のアルミフレームが届きました。こちらの板金屋さんに製作をお願いしました。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日 0  0

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)。

Posted by arms22 on 2008年08月24日 2  0

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

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

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

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

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

Posted by arms22 on 2008年08月23日 5  0

こちらの記事を参考に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入力デバイスを作る。

Posted by arms22 on 2008年08月23日 5  0

まずは情報収集。

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

このカテゴリーに該当する記事はありません。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。