試用 HR8201 USB鍵盤模組

之前經常使用不同 微控制器 改裝其他裝置成能夠發送 USB鍵盤訊號
在下發現一款看似操作簡單的 USB鍵盤模組,嘗試了解運作原理及測試自製鍵盤的可行性

外觀

HR8201鍵盤模組 的 正面

HR8201鍵盤模組 的 背面

HR8201鍵盤模組 提供顯示 Num Lock Caps Lock Scroll Lock 狀態 的 LED
亮著即啟用設定

而且 HR8201鍵盤模組 是能夠即時回應電腦的 Num Lock 、 Caps Lock 及 Scroll Lock 狀態

HR8201 能夠將訊號 轉換成 USB鍵盤按鍵訊號

操作

HR8201模組 有 兩組引腳,分別是 C0 至 C19 及 R0 至 R7
可以將 R 當作 列 (Row), C 當作 欄 (Column), 當 R 及 C 連接時,便會發送 對應按鍵的USB訊號
能以矩陣的形式排列按鈕連接 R 及 C 來發送 USB訊號

雖然網上有一些對照表,但有一些內容比較含糊,因此在下同樣親自測試效果
並重新製作對照表,方便理解

R0R1R2R3R4R5R6R7
C0PausePrevStopPlayRightCtrlNextLeftCtrlF5
C1QTabAEscZNonConv`1
C2WCapsLockS<X \ ConvF12
C3EF3DF4CKanaModeF23
C4RTFGVB54
C5UYJHMN67
C6I]KF6,IntlRo=8
C7OF7LLeftCtrl O.MenuF89
C8741NumLockArrowDownDeletePower
C9IntlYenBackSpace\F11EnterF12F9F10
C10ScrollLockLeftAlt F4Vol-LeftAltVol+RightAltMutePrintScreen
C11P[;'\/-0
C12ScreenLockLeftMetaLeftCtrl CRecRewFFEjectF10
C13Lang2LeftCtrl VRightMeta00000LeftCtrl SF2Lang1
C14ControlPanelEmailHomeBackwardForwardCancelRefreshBookmark
C15UserHomeCalcu-latorArrowUpArrowDownArrowLeftArrowRightWebBrowser
C16WakeUpLeftShiftRightShiftSystemFindLeftAlt TabLeftCtrl PF1Fn
C17+,EntArrowUpLeftCtrl XArrowLeftHomeEnd
C18963.*-PageUpPageDown
C198520/ArrowRightInsertSleep

在下將不同效果(在下判斷)的以不同顏色區分,方便檢視:

  • 控制字元
  • 標點符號
  • 數字
  • 英文字母
  • 修飾鍵
  • 數字鍵盤字元
  • 功能字元
  • Fn鍵
  • 多媒體功能
  • 網頁瀏覽器功能
  • 系統功能
  • 保留功能

補充資料

測試後發現有一些重覆功能的按鍵和組合鍵操作
基本上,重覆功能的按鍵不影響操作,但組合鍵的操作在不同作業系統或硬件並不一致或有效
例如,R3,C7 的 Ctrl O 在一般 *nix 和 Windows 中可以開啟檔案,但在 Mac OS 上卻無法使用
此外, 多媒體功能 系統功能 網頁瀏覽器功能 在不同作業系統或硬件未必有相應的實作
在下發現 多媒體功能 及 網頁瀏覽器功能 在 Mac OS 上完全無法使用,而 系統功能 僅部分有效

在下主要在 Linux 上進行測試,除了 多媒體功能 的 Rec Rew FF 外,基本上所有功能都能正常操作
包括 保留用途 的 Non-Conv Conv Kana Mode
(但只是能夠偵測對應的 USB訊號 ,並非有實際操作效果,只是 Linux 可以任意修改按鍵映射,令這些按鍵能設定成其他功能)
不過, R7,C15 的訊號在 Linux 、 Windows 和 Mac OS 中完全無法測試到功能

另外,在下測試 Num Lock 、 Caps Lock 及 Scroll Lock 時發現只有 Windows 能夠切換 3種Lock 的狀態
Linux 無法切換 Scroll Lock 的狀態, Scroll Lock 的功能則變成無效果
而 Mac OS 則只能切換 Caps Lock 的狀態, Num Lock 的功能變成無效果, Scroll Lock 的功能則變成降低熒幕亮度

HR8201引腳

在下以為 HR8201 是一款常見的 USB鍵盤訊號晶片,不過在下卻找不到相關資料,因此在下嘗試查找引腳的功能

HR8201123456789101112131415161718192021222324252627282930313233343536373839404142434445464748VBUSUNKNOWND-D+UNKNOWNUNKNOWNGNDUNKNOWNUNKNOWNUNKNOWNUNKNOWNNUM LEDCAPS LEDSCROLL LEDC0C1C2C3C4C5C6C7C8C9UNKNOWNUNKNOWNC19C18C17C16C15C14C13C12C11C10UNKNOWNUNKNOWNUNKNOWNUNKNOWNR7R6R5R4R3R2R1R0
鬼鍵問題

在下發現這款 HR8201模組 當連接的線路有重疊時,會出現按鍵操作不正常
在網上尋找資料時指這種情況稱為 鬼鍵 (Ghosting) ,而且找到的資料主要是與電競相關的內容

R0R1C0C1

由於電腦鍵盤的按鍵數量接近100個,製作及使用一款超過 100支 GPIO引腳的晶片將會非常昂貴
晶片的體積也會增加,且引腳數量多會使手焊的難度提高
因此,通常會將按鈕設計成矩陣排列,並運用 多路復用技術 (Multiplexing) 以節省 GPIO引腳 使用數量
以 HR8201 為例,R 和 C 引腳總共 28支 GPIO引腳 就能發送出 160個USB訊號

R0R1C0C1

模擬 R0,C0 按鈕被按下的情況
只有一個訊號不會有鬼鍵問題

R0R1C0C1

模擬 R0,C0 和 R1,C0 按鈕被按下的情況
只有一條共通的發送線路,不會出現鬼鍵問題

R0R1C0C1

模擬 R0,C0 及 R1,C0 按鈕 按下的情況
只有一條共通的接收線路,同樣不會有鬼鍵問題

R0R1C0C1

模擬 R0,C0 和 R1,C1 按鈕被按下的情況
由於發送和接收的線路都是分開的,因此同樣不會出現鬼鍵問題

R0R1C0C1

模擬 R0,C1 和 R1,C0 按鈕被按下的情況
由於發送和接收的線路都是分開的,因此同樣不會出現鬼鍵問題

R0R1C0C1

模擬 R0,C0 、 R0,C1 和 R1,C0 按鈕被按下的情況
通常當同時 按下超過3個按鈕 ,而且 這3個按鈕 都在同一組矩陣中 ,就會出現鬼鍵問題
在模擬中,雖然 R1,C1 按鈕並未被按下,但按下 這3個按鈕 會使 R1,C1 的線路接通,導致系統接收到來自 R1,C1 的訊號
這種情況下,即使未按下 R1,C1 按鈕,系統會認為 R1,C1 按鈕被按下,這就是所謂的 鬼鍵

R0R1C0C1

要解決鬼鍵問題,需要在每個按鈕的前面或後面加上 二極體 (Diode) 以防止訊號逆流
雖然 二極體 不是很貴的電子零件,但需要再次設計電路板線路,還要焊接與按鈕數量相同 的 二極體
因此這類 防鬼鍵 (Anti-Ghosting) 鍵盤會比較昂貴

總結

HR8201模組 並不是特別裝置,使用方法亦很簡單,只需要使用跳線將 R 及 C 連接便可以操作
但在下卻無法在網上找到規格文件,另外在下亦找不到單獨售賣的 HR8201晶片,只有 HR8201模組
不過 HR8201模組 已經將 R 及 C 引腳保留,而且還提供 USB 連接,讓使用者自行設計自己的鍵盤,都算方便

參考資料