自製USB HID搖桿

Oct 17, 2007 1 分鐘 494 字 #USB

繼實做USB鍵盤之後,今天我們繼續來改寫程式變成USB HID搖桿


上次連結

AVR USB正面

這種複雜度的電路之前看到很多談到wii改機的部落格都說就算不是讀電子相關科系的人都可以做。

AVR USB反面

今天我們還是一樣使用Atmel的AVR Tiny45配上EasyLogger的範例來改。不過我更簡化了一點電路,整個做好的成品就只有上面的照片那樣而已。詳細電路圖和相關開發工具請參考上一次的介紹

AVR USB電路

跟現實生活一樣位處越高層的長官要懂的東西越少以免大腦爆炸,我們如果只是要實做出一個USB搖桿就不用管太多細節。以後我們慢慢往下層走時會講到越來越多的細節。今天要修改的部份還是如第一次所說,使用HID descriptor tool建立如下的表格。

joystick HID表格

工具自動產生的程式碼就像下面那樣。有一點要特別注意:所有REPORT_SIZE乘上REPORT_COUNT的總和一定要是8的倍數,不然會因為組不成完整的Byte而讓PC端發生錯誤。

PROGMEM char usbHidReportDescriptor[USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH] = {

0x05, 0x01,      // USAGE_PAGE (Generic Desktop)
0x15, 0x00,      // LOGICAL_MINIMUM (0)
0x09, 0x04,      // USAGE (Joystick)
0xa1, 0x01,      // COLLECTION (Application)
0x05, 0x09,      //   USAGE_PAGE (Button)
0x19, 0x01,      //   USAGE_MINIMUM (Button 1)
0x29, 0x08,      //   USAGE_MAXIMUM (Button 8)
0x15, 0x00,      //   LOGICAL_MINIMUM (0)
0x25, 0x01,      //   LOGICAL_MAXIMUM (1)
0x75, 0x01,      //   REPORT_SIZE (1)
0x95, 0x08,      //   REPORT_COUNT (8)
0x55, 0x00,      //   UNIT_EXPONENT (0)
0x65, 0x00,      //   UNIT (None)
0x81, 0x02,      //   INPUT (Data,Var,Abs)
0xc0             // END_COLLECTION
};
//
//

下面的影片是從windows控制台截取來的

今天的完整程式在這

`