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

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

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

Ads by Google

5 Comments

もあ says...""
PICを使ったHIDの作成も面白そうですね。
秋月の18F2550ボードを死蔵しているのを思い出しました。私も作ってみようかな。
HIDデバイスであれば特別なドライバ無しでOSから認識される物なのでしょうか?またMacOSXでもHIDとして認識されますか?
2008.08.24 09:15 | URL | #IRbY6ELI [edit]
arms22 says...""
HIDデバイスであれば特別なドライバなしでMacOSXやWindowsで使えます。USBフレームワークのデモ(マウスとキーボード)はWindows、MacOSXどちらでも認識され動作しました。
2008.08.24 22:00 | URL | #j7sy4omY [edit]
もあ says...""
情報ありがとうございます。
今度試してみます。
2008.08.25 06:34 | URL | #IRbY6ELI [edit]
Ryuta Matsuno says..."リンクが切れています。"
プロジェクトファイルのリンクが切れてるのダウンロードできません。
現在PIC18F4550を使ったUSB HIDデバイスの製作を考えていて、ぜひ参考にしたいと思っています。
再リンク等お願いできないでしょうか?
2013.06.18 16:14 | URL | #afXvPe0k [edit]
arms22 says..."Re: リンクが切れています。"
すみません、元データが消えて、
もう手元にありません。。
2013.06.19 00:13 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。