RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

將任何視頻游戲控制器變成USB鼠標(biāo)

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-03-06 15:21 ? 次閱讀

隨著最新和最偉大的游戲系統(tǒng)每隔幾年首次亮相,我的舊視頻游戲控制器庫存也以同樣的速度增長。許多較舊的游戲機(jī)都設(shè)計(jì)有非標(biāo)準(zhǔn)的專有連接器??杀氖?,這意味著,即使它們?nèi)匀还δ荦R全,我的大多數(shù)舊游戲控制器也注定要在架子上積聚灰塵。然而,只需稍加修改,這些控制器就可以被賦予新的生命,并重新用作與現(xiàn)代計(jì)算機(jī)的漂亮接口。用舊組件和備件制造USB鼠標(biāo)或鍵盤的專業(yè)知識既有趣又信息豐富,可以通過用戶控制輸入向任何嵌入式系統(tǒng)添加功能。

檢查舊控制器

制作USB鼠標(biāo)的基本要求很簡單。鼠標(biāo)需要兩個用于左鍵和右鍵單擊的按鈕,以及控制水平和垂直移動的方法。

這些基本標(biāo)準(zhǔn)以各種方式實(shí)施,具有不同的組成部分和復(fù)雜性。1980 年代和 1990 年代初的游戲手柄使用連接到 8 位或 16 位閂鎖的簡單按鈕。每隔幾毫秒鎖定一次數(shù)據(jù),游戲機(jī)可以輕松地打卡并解釋按下了哪些按鈕。后來的控制器集成了模數(shù)轉(zhuǎn)換器ADC),以檢測操縱桿從其靜止位置移動的距離,從而允許不同的移動速度,而不是簡單按鈕的“開關(guān)”控制。更現(xiàn)代的控制器甚至集成了一個加速度計(jì),通過身體運(yùn)動為用戶提供了更多種類的控制。無論使用哪種控制器,互聯(lián)網(wǎng)上都應(yīng)該有大量關(guān)于其數(shù)據(jù)如何編碼的信息。掌握游戲控制器如何收集和存儲輸入后,下一步就是格式化 USB 的數(shù)據(jù)。

制作鼠標(biāo)

USB是一種極其通用的協(xié)議,主機(jī)系統(tǒng)必須準(zhǔn)備好接受來自所連接設(shè)備的各種數(shù)據(jù)包。首次連接終端設(shè)備時,它必須在稱為“枚舉”的過程中向主機(jī)描述其標(biāo)識、功能和預(yù)期數(shù)據(jù)格式。幸運(yùn)的是,大多數(shù)主機(jī)系統(tǒng)都有常用設(shè)備類(想想閃存驅(qū)動器、鍵盤、打印機(jī)等)的內(nèi)置驅(qū)動程序。如果終端設(shè)備枚舉某個類,則主機(jī)無需任何其他軟件即可使用該設(shè)備。鼠標(biāo)屬于人體學(xué)接口設(shè)備 (HID) 類,因此在此類下枚舉將使鼠標(biāo)即插即用。

當(dāng)設(shè)備首次連接到 USB 端口時,主機(jī)會發(fā)送 SETUP 數(shù)據(jù),以便設(shè)備有機(jī)會枚舉。終端設(shè)備必須解碼 SETUP 數(shù)據(jù)包并發(fā)送設(shè)備描述符,然后發(fā)送其配置、接口、類、端點(diǎn)和報告描述符。描述符是包含有關(guān)設(shè)備操作的詳細(xì)信息的表數(shù)據(jù)。從設(shè)備制造商、數(shù)據(jù)緩沖區(qū)大小和通信速度到功耗和數(shù)據(jù)格式,在枚舉期間,各種描述符中都會報告所有內(nèi)容。

報告描述符控制計(jì)算機(jī)如何接收和解釋通過 USB 發(fā)送的數(shù)據(jù)。我們可以根據(jù) HID 類中預(yù)定義的用法來識別鼠標(biāo)的左鍵和右鍵功能??刂破髦械膬蓚€按鈕對應(yīng)于兩個輸入,每個輸入的位大小為 1,每個輸入的邏輯值為 0 或 1。

USAGE_PAGE(按鈕)
USAGE_MINIMUM(按鈕 1)
USAGE_MAXIMUM(按鈕 2)
LOGICAL_MINIMUM (0)
LOGICAL_MAXIMUM (1)
REPORT_COUNT (2)
REPORT_SIZE (1)
輸入(數(shù)據(jù)、變量、絕對值)

由于我們只使用數(shù)據(jù)字節(jié)的 2 位,因此我們需要另一個 6 位的報告大小,計(jì)算機(jī)將其解釋為常量。請注意,我們不包括后一位的任何用法。

REPORT_COUNT(1)
REPORT_SIZE(6)
輸入(中碳納米、變量、絕對值)

我們發(fā)送的接下來的 2 個字節(jié)分別對應(yīng)于 x 軸和 y 軸數(shù)據(jù)。每個方向的數(shù)據(jù)都有自己的 8 位報告大小,對于 127 位有符號整數(shù),邏輯值可以在 -127 到 8 的范圍內(nèi)。

USAGE_PAGE(通用桌面)
用法 (X)
用法(Y)
LOGICAL_MINIMUM (-127)
LOGICAL_MAXIMUM (127)
REPORT_SIZE (8)
REPORT_COUNT (2)
輸入(數(shù)據(jù)、變量、相關(guān))

由于上述報告描述符的每一行在 HID 使用情況表中都有一個預(yù)定義的值。1以下數(shù)組表示鼠標(biāo)示例的總報告描述符。

unsigned char RepD[]=   // Report descriptor
{
0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
0x09, 0x02,                    // USAGE (Mouse)
0xA1, 0x01,                    // COLLECTION (Application)
0x09, 0x01,                    //   USAGE (Pointer)
0xA1, 0x00,                    //   COLLECTION (Physical)
0x05, 0x09,                    //     USAGE_PAGE (Button)
0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
0x29, 0x02,                    //     USAGE_MAXIMUM (Button 2)
0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
0x95, 0x02,                    //     REPORT_COUNT (2)
0x75, 0x01,                    //     REPORT_SIZE (1)
0x81, 0x02,                    //     INPUT (Data,Var,Abs)
0x95, 0x01,                    //     REPORT_COUNT (1)
0x75, 0x06,                    //     REPORT_SIZE (6)
0x81, 0x01,                    //     INPUT (Cnst,Var,Abs)
0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
0x09, 0x30,                    //     USAGE (X)
0x09, 0x31,                    //     USAGE (Y)
0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
0x25, 0x7F,                    //     LOGICAL_MAXIMUM (127)
0x75, 0x08,                    //     REPORT_SIZE (8)
0x95, 0x02,                    //     REPORT_COUNT (2)
0x81, 0x06,                    //     INPUT (Data,Var,Rel)
0xC0,                          //   END_COLLECTION
0xC0                           // END_COLLECTION
};

所以現(xiàn)在你要問,從這份報告描述符解釋中實(shí)際得出的是什么?通過使用上面的報告描述符,我們需要做的就是將來自游戲控制器的數(shù)據(jù)格式化為以下格式(表 1),主機(jī)系統(tǒng)將能夠正確理解輸入。

表 1.USB 鼠標(biāo)數(shù)據(jù)格式

7 6 5 4 3 2 1 0
字節(jié) 0 0 0 0 0 0 0 右鍵單擊 左鍵點(diǎn)擊
字節(jié) 1 X 軸位移(帶符號)
字節(jié) 2 Y 軸位移(帶符號)

請務(wù)必注意,方向數(shù)據(jù)既有符號又相對于光標(biāo)的當(dāng)前位置。如果發(fā)送 -1 作為 x 軸位移,光標(biāo)將向左移動一個像素。x 軸位移字節(jié)中的 +1 將光標(biāo)向右移動一個像素。這同樣適用于 y 軸,負(fù)值向上移動光標(biāo),正值向下移動光標(biāo)。

現(xiàn)在可以顯示創(chuàng)建USB接口的兩種不同方法??梢允褂脙?nèi)置USB串行接口引擎的MAXQ612或MAXQ622 16位微控制器,也可以使用帶有MAX3420E或MAX3421E USB外設(shè)控制器的微控制器。圖 1 顯示了第一個實(shí)現(xiàn)。我選擇的游戲控制器有一個方便的I2C 接口。使用MAXQ622用作I2C主接口與游戲控制器通信,將數(shù)據(jù)解析成上面表1所示的格式并處理USB事務(wù)。現(xiàn)在可以實(shí)現(xiàn)單芯片鼠標(biāo)解決方案。

pYYBAGQFlIaAa9p_AAAVNniPAMg312.png

圖1.單芯片 USB 鼠標(biāo)的示意圖。本設(shè)計(jì)采用MAXQ622微控制器和MAXQ622評估(EV)板。

除外部旁路電容器外,I 上的上拉電阻2C線和晶體振蕩器,此示例設(shè)計(jì)不需要額外的元件。圖2所示為更通用的解決方案,使用MAX3420E USB外設(shè)控制器和配備I2C 和 SPI 函數(shù)。

poYBAGQFlIeAfN7zAAAodSa2EMQ866.png

圖2.USB鼠標(biāo)示意圖,現(xiàn)在使用MAX3420E USB外設(shè)控制器和MAX3420E評估板。而任何具有I2可以使用C和SPI功能,在這種情況下,我們繼續(xù)使用MAXQ622。

MAX3420EEVKIT-2為所有接口引腳提供接頭,包括用于SPI通信的MOSI、MISO、#SS和SCLK引腳,以及用于微控制器信號中斷的INT引腳。MAX3420EEVKIT-2具有板載Atmel ATtiny2313微控制器,通過定制固件,可實(shí)現(xiàn)位砰砰?2C 總線直接連接到游戲控制器。在本例中,MAXQ622評估板具有2C和SPI外設(shè)被用作通用微控制器。

結(jié)論

現(xiàn)在您知道如何使用舊的視頻游戲控制器和任何具有正確接口的微控制器來實(shí)現(xiàn)USB鼠標(biāo)。該過程就像連接幾個跳線并下載固件一樣簡單。

此處提供的代碼具有多個函數(shù)。它持續(xù)監(jiān)控 USB 總線是否有來自主機(jī)的任何活動或傳入請求;它定期輪詢游戲控制器以獲取新數(shù)據(jù),將此數(shù)據(jù)發(fā)送到主機(jī),并閃爍 LED 作為狀態(tài)/時間指示器。這兩種實(shí)現(xiàn)都具備識別 USB 總線重置和 USB 總線掛起事件的能力。兩者都執(zhí)行主機(jī)的遠(yuǎn)程喚醒,并適當(dāng)?shù)仨憫?yīng)所有主機(jī) CONTROL 傳輸。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16332

    瀏覽量

    177803
  • usb
    usb
    +關(guān)注

    關(guān)注

    60

    文章

    7936

    瀏覽量

    264461
  • adc
    adc
    +關(guān)注

    關(guān)注

    98

    文章

    6495

    瀏覽量

    544460
收藏 人收藏

    評論

    相關(guān)推薦

    用Cypress semiconductor CY7C63000 USB控制器設(shè)計(jì)低成本USB鼠標(biāo)

    本應(yīng)用指南描述了如何用Cypress semiconductor 的單芯片CY7C63000 USB控制器快速設(shè)計(jì)經(jīng)濟(jì)合算的USB光機(jī)械鼠標(biāo)。
    發(fā)表于 09-23 10:12

    【教學(xué)視頻】制作掃雷游戲鼠標(biāo)操作界面部分)

    `【教學(xué)視頻03004】制作掃雷游戲鼠標(biāo)操作界面部分)通過本節(jié)掃雷游戲學(xué)習(xí)獲取鼠標(biāo)信息的使用,教學(xué)視頻
    發(fā)表于 05-01 03:41

    是否有任何軟件庫允許使用STM8微控制器構(gòu)建USB硬件而無需任何額外芯片?

    你好, 是否有任何軟件庫允許使用STM8微控制器構(gòu)建USB硬件而無需任何額外芯片? 我正在尋找它,但到目前為止我還沒有找到任何東西。這樣
    發(fā)表于 12-28 16:07

    項(xiàng)目:重力感應(yīng)游戲控制器 開發(fā)平臺:STM32+MPU9250

    USB鍵盤和USB鼠標(biāo)、2個游戲Pad,配置方法和測試工程源碼點(diǎn)我?;蛘摺跋嚓P(guān)文件”直接下載如下圖,可看到USB枚舉成功為鍵盤、
    發(fā)表于 01-14 21:59

    使用arduino pro micro制作一個游戲控制器

    的arduino板上傳代碼后,請將 USB 電纜連接到 PC,連接后打開您喜歡的任何游戲,我在這里使用鐵拳,您可以開始玩了。所以玩得開心制作自己的 DIY 游戲
    發(fā)表于 09-01 06:38

    如何氣體放電游戲桿、氣體放電鼠標(biāo)和氣體放電鍵盤整合到一個USB設(shè)備中

    : NuTiny-EVB-NUC240 V1.2 USB 復(fù)合設(shè)備是一個輔助多個設(shè)備級的外圍設(shè)備, 同時支持多個設(shè)備級。 為了支持游戲控制器, 此示例代碼包含一個 USB 設(shè)備中的 H
    發(fā)表于 08-23 07:18

    鼠標(biāo)控制器參考設(shè)計(jì)

    鼠標(biāo)控制器參考設(shè)計(jì)
    發(fā)表于 08-03 09:16 ?38次下載
    <b class='flag-5'>鼠標(biāo)</b><b class='flag-5'>控制器</b>參考設(shè)計(jì)

    游戲控制器購買指南

    游戲控制器購買指南游戲控制器簡介 您可以用電腦鍵盤和鼠標(biāo)來玩絕大多數(shù)的電腦游戲,包括街機(jī)
    發(fā)表于 07-28 09:35 ?698次閱讀

    有線USB光學(xué)游戲鼠標(biāo)電路圖(A5020方案)

    下圖為有線USB光學(xué)游戲鼠標(biāo)電路圖: 圖 有線USB光學(xué)游戲鼠標(biāo)電路圖
    發(fā)表于 05-28 15:05 ?7332次閱讀
    有線<b class='flag-5'>USB</b>光學(xué)<b class='flag-5'>游戲</b><b class='flag-5'>鼠標(biāo)</b>電路圖(A5020方案)

    慣性傳感決定未來游戲控制器的工作方式

    游戲控制器是一種用來控制視頻游戲的設(shè)備。例如:游戲桿、鼠標(biāo)
    發(fā)表于 09-18 10:41 ?3次下載
    慣性傳感<b class='flag-5'>器</b>決定未來<b class='flag-5'>游戲</b><b class='flag-5'>控制器</b>的工作方式

    如何使用樹莓派任何PC游戲流式傳輸?shù)诫娨?/a>

    現(xiàn)在您應(yīng)該可以在電視上啟動任何游戲了。您的PC并將其通過Raspberry Pi傳輸?shù)诫娨?。確保必要時連接了游戲控制器-首選USB設(shè)備。請記
    的頭像 發(fā)表于 11-29 17:48 ?6781次閱讀
    如何使用樹莓派<b class='flag-5'>將</b><b class='flag-5'>任何</b>PC<b class='flag-5'>游戲</b>流式傳輸?shù)诫娨? />    </a>
</div>                            <div   id=

    使用Arduino Leonardo操縱桿作為游戲控制器的方式

    操縱桿作為游戲控制器進(jìn)行接口。Arduino Leonardo 比 Uno 的優(yōu)勢在于我們可以在其上安裝 USB 驅(qū)動程序,并且在連接時可以被計(jì)算機(jī)檢測為
    的頭像 發(fā)表于 09-01 16:17 ?7285次閱讀
    使用Arduino Leonardo<b class='flag-5'>將</b>操縱桿作為<b class='flag-5'>游戲</b><b class='flag-5'>控制器</b>的方式

    任何視頻游戲控制器變成 USB 鼠標(biāo)

    發(fā)表于 11-16 23:29 ?0次下載
    <b class='flag-5'>將</b><b class='flag-5'>任何</b><b class='flag-5'>視頻</b><b class='flag-5'>游戲</b><b class='flag-5'>控制器</b><b class='flag-5'>變成</b> <b class='flag-5'>USB</b> <b class='flag-5'>鼠標(biāo)</b>

    任何視頻游戲控制器變成USB鼠標(biāo)

    制作USB鼠標(biāo)的基本要求很簡單。鼠標(biāo)需要兩個用于左鍵和右鍵單擊的按鈕,以及控制水平和垂直移動的方法。
    的頭像 發(fā)表于 01-09 14:49 ?758次閱讀
    <b class='flag-5'>將</b><b class='flag-5'>任何</b><b class='flag-5'>視頻</b><b class='flag-5'>游戲</b><b class='flag-5'>控制器</b><b class='flag-5'>變成</b><b class='flag-5'>USB</b><b class='flag-5'>鼠標(biāo)</b>

    家用游戲機(jī)的控制器接口類型

    家用游戲機(jī)的控制器接口類型是游戲機(jī)和手柄之間進(jìn)行連接和通信的關(guān)鍵部分。它決定了用戶如何與游戲機(jī)進(jìn)行交互,并直接影響到游戲體驗(yàn)的質(zhì)量和多樣性。
    的頭像 發(fā)表于 01-04 11:23 ?1429次閱讀
    RM新时代网站-首页