近期計畫:來一把手工鍵盤

之前因為受邀參加了鍵人谷的聚會

https://www.facebook.com/groups/1111882339005914

會議中其實是想要弄 OpenSource 的鍵盤,而先用了 Ergodox 這個專案的東西就是
自己也想弄一套,剛好在聚會中有看到 Arduino 弄的鍵盤 … 所以想來弄一把看看

剛好之前有玩卡式爐機殼時研究過兩個晶片:MAX7219 和 HT16K33,其中 HT16K33 有趣的地方是,它是 LED 矩陣控制晶片(最大 8x16 個 LED),但同時也有 key scan 的功能(最大 3 x 13 = 39 key),會中看到的 Arduino 鍵盤每個鍵都需要焊個二極體讓其 row / column 不衝突,所以會增加極高的二極體焊接成本(Arduino 那把用的是 MCP23018,其作用單純擴增 GPIO 一樣走 I2C … 且用了兩個 Arduino … 成本啊||| ),而用 HT16K33 就不用每個鍵都要額外的二極體,單純 key scan 需要時間罷了,也就是掃描延遲 … 天下沒有白吃的午餐的啊(當然換類似的晶片也行 … ) …

anyway 目前自己和朋友討論後的預劃架構會是

Beetle Leonardo MCU x 1 (atmega32u4 當主控超小超可愛)
HT16K33 x 2(左右手各 39 鍵)
3.5mm 4pin 公對公線 x 2(I2C 連接線)
鍵帽
標準鍵軸
3D 列印底座底板
M3 銅柱(改銅柱為支撐腳就可以拿來調整鍵盤高度,且 M3 較好入手)

其中雷切板材 vs 3D 列印哪個最佳首選,在心中掙扎兩天,兩個都可以弄出來,但最後考量點在於雷切在走線與焊接部分完敗給 3D 列印,畢竟這個是薄殼的作品,所以此處選 3D 列印應該是最佳解就是了 …

其餘的,以 latency 而言,應該會和原本的純 GPIO 晶片差 1ms ~ 10ms 左右唄,我是認為應該還在可以接受的範圍才是,要先實測才是,一把材料費應該 1.5k 內全打死,包括鍵帽和鍵軸還包運費(這次先買三把的料來測試),目前還沒估算 3D 列印的部分(自己已經有一台且塵封已久哈哈),而 Arduino 的部分,因為 code 和前一版差異過大,畢竟從 MCP23018 換成了 HT16K33,所以也只能拿來參考就是了

記得以前玩 Arduino 的 midi adapter 實作時,因為追求的是最低最低最低的 latency,這樣省下來的才能玩各種花樣(需求比鍵盤高太多了,因為在做音樂哩),所以當時看到最強的解法莫過於把 USB driver 直接寫在 Arduino UNO 的 ATmega16U2 上 … 這邊解釋一下,原廠 Arduino UNO 或一些官方板,USB driver 是寫在 ATmega16U2 這個前置晶片上,該晶片基本上可以模擬出任何 USB 設備,且還不用到主晶片 ATmega328 那邊就可以完成所有加解碼的動作,缺點是重新刷 code 要跑後面的 6pin 或是刷回來才行哈哈(因為你把原生的 USB driver 寫成別的了 …),而很多副廠便宜的板就是省掉這晶片改用別的,也就不能這樣玩就是

所以如果先做完所有最佳化這邊還是會慢的話(Arduino 還可以調高 I2C 的頻率先),想嘗試的應該不是換掉 HT16K33 而是用一樣的解法唄,類似剛剛說的雙晶片支援有的沒的,或是更單純的拋棄 Arduino 改用 STM32(同成本 100 倍效能,難寫 100 倍哈哈),當然詳細要實測才知道就是,進度目前大概就到這邊,要先等料到才行 : )

話說這話題 … Ducky 之類的專用鍵盤晶片應該都無法,主要是拆成兩半後走線的問題 … 所以此題 pass 先 … 而最原先的 Ergodox 用的 Teensy2.0 主晶片 + MCP23018 … Teensy2.0 其實就是 atmega32u4 … 所以總而言之 … 我是認為沒啥差啦哈哈,先醬

這篇走到了後面 … 失敗 …

因為有個最根本的問題,從晶片端製作 n key rollover 根本不可能,原因如圖

ht16k33_n_key

簡單的來說這是無解的,除非在每個鍵上面都焊上一個二極體才行

所以這個計畫到此失敗,但並不代表 HT16K33 不行,基本上 HT16K33 研究到後面能做到 non-blocking 還是能稱讚的,單純每個 key 都要焊上二極體和 XY 兩條線太囉唆了,所以回歸到另外一需求身上:建立一個小的 PCB 板,看是否支援熱插拔,因為有二極體所以需要標注方向性,這樣就可以單獨焊二極體和 XY,還能做比較大比較好焊的焊點就是 … 這是目前的想法

anyway 此專案持續進行中,目前還在設計小 PCB 板就是 : )