こちらの記事を参考に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.zipHID Keybord
http://xfind.hp.infoseek.co.jp/electric/hid/HIDKeybord.zip