Previous Post | Top | Next Post |
TOC
cgg56の反省
ARM系のMCU使用の練習にSTM32F411CE (1)で 作ったcgg56は結局 JoyStick は動きましたが、それほど操作性はよく ありませんでした。
横に押すと、横にキーボード自体が動いてしまうという問題を抱えていました。
一体型はcgc56がすでにあり、スプリットキーボードを試したかったので、 こちらのcgg56は改造して再利用することにしました。
分割キーボードの作成
改造コンセプト
cgg56をノコギリで2つに切り、ポインティング部品無しで構成する 分割キーボードに改造をすることにしました。
ポインティングデバイスを除いたスペースには、キースイッチを追加します。
切り離して短くなったMCUボード無しの側は、ホームセンターで5mm角の アクリル棒で追加購入しセメダインで接着延長して対象に仕上げ、追加 のMCUボードを取り付けました。左右接続は、余っていたUSB用のケーブルを 両端切りコネクター無しで直結して対応します。できた物はcgs58と名付けます。
PIN接続 (cgs58)
canterを参考にピン配置を決めました。
ところで、(R0, C0)はキーボードをキー面上から見て左上です。
以下の図もキーボードをキー面上から見て(TOP VIEW)ですので、実際の配線では 左右が逆になります。
C6xとC7xは、C6とC7の内側のMCUボード横の穴にいれたキー向けの追加のカラムです。
LTは左手側、RTは右手側です。
Blackpill (TOP VIEW)
LT RT RT LT
USB-C
+---+-----+---+
R0 R0 ------- B12 |* | | *|5V -----
R1 R1 ------- B13 |* | | *|GND -----------------+
R2 R2 ------- B14 |* | | *|3V3 z 10 K-ohm
R3 R3 ------- B15 |* +-----+ *|B10 Open --+
C0 ------- A8 |* B N @|B2 ------ *** BOOT1
[USB] ------- A9 |* O R @|B1 ------ XX
[USB] ------- A10 |* O S @|B0 ------ XX
[USB] ------- A11 |* T T *|A7 ------
[USB] ------- A12 |* 0 *|A6 ------ C7x
C3 ------- A15 |* *|A5 ------ C11
C2 ------- B3 |* *|A4 ------ C10
C5 ------- B4 |* *|A3 ------ C7
C6 ------- B5 |* *|A2 ------ C8
TX==\ /=TX ------- B6 |* *|A1 ------ C9
RX==/ \=RX ------- B7 |* *|A0 ------ *** USR
C1 ------- B8 |* K *|R ------ *** NRST (/RST, ~RST)
C4 ------- B9 |* E *|C15 ----- C12
**==5V==** ------- 5V |* Y *|C14 ----- C13 C6x
**==GND=** ------- GND |* *|C13 ------*** BLUE LED
3V3 |* @ @ @ @ *|VB
+-------------+
^ ^ ^ ^
| | | |
3V3 ---------------+ | | |
SWDIO -----------PA13--+ | |
SWSCK -----------PA14----+ |
GND ---------------------+
テスト用ファームウエアーで左右別々に配線と動作確認
実際には、連結以外の配線をして、qmkを書き込み配線確認をします。
- cgh29l
- cgh29r
- single key column on physical left is logically placed right most column for ease of programming
動作確認OK
左右検出(Handedness by Pin)法
今回は簡単に、使ってないB10ピンを使い、アクセスが良かった左キーボード側を 10 K-ohm 抵抗でGNDして区別する。 使う抵抗値は、未使用ピンはハイインピーダンスの入力なので、内部回路がP-UP/P-DNの際に使う 50K-ohm位が良い気がするが、手元部品の都合で10 K-ohmとした。
- https://docs.qmk.fm/#/config_options?id=setting-handedness
- https://www.reddit.com/r/ErgoMechKeyboards/comments/qead6j/help_qmk_handedness_using_a_high_pin_will_this/ (ここは5K-ohm)
- https://github.com/qmk/qmk_firmware/blob/master/keyboards/handwired/dactyl_manuform/6x6/blackpill_f411/config.h (ここになぜか68K-ohm とある)
- https://www.st.com/content/ccc/resource/technical/document/datasheet/59/f6/fa/84/20/4e/4c/59/CD00191185.pdf/files/CD00191185.pdf/jcr:content/translations/en.CD00191185.pdf (internal ~ 40K-ohm -> これ以下の抵抗値なら充分。間違ってピンが出力モードになっても、5K-ohm以上あれば1 mA以下のドレインなので大丈夫。)
抵抗を普通と逆の左キーボード側につけたので、否定ロジックになるSPLIT_HAND_PIN_LOW_IS_LEFTを指定する。
(ピン数が足りないならソフト的対応も可能だが、それは後日の機会に。)
フルデュプレクスでいく。参考となるのは:
- https://github.com/qmk/qmk_firmware/tree/master/keyboards/handwired/dactyl_manuform/6x6/blackpill_f411
- https://github.com/qmk/qmk_firmware/blob/master/keyboards/mlego/m60_split/rev2/config.h
- https://github.com/qmk/qmk_firmware/blob/master/docs/serial_driver.md#choosing-a-driver-subsystem
テスト用ファームウエアーで分割キーボードの配線と動作確認
左右のキーボードを4線で接続しました。電源(+5V)赤、電源(GND)黒、TXとRXはクロス接続で白・緑を用い直結です。
以下の試験ファームウエアーを入れたら、一発で1つのキー以外全て順調な稼働が確認できました。
- cgs58 keymap=
default
動きがちょっと悪かった1つのキーの原因は、ホットメルト接着剤がはみ出してキーがしっかりボトムしきれない物理的問題でした。
また、配線まわりのホットメルトがはみ出して裏板がしっくりしない問題解決策でニッパーで切る際に誤って配線を切って気づかずにいました。 後からある縦一列が無反応となっているのに気づき直しました。
LED問題
cgc56では8つもあったのですが、gcs58ではキーボードの状態表示に使えるLEDは左右1つづつです。
単純なアプローチではこれらは同じピンなので同時点滅しかしません。
その解決策を書くのに左右どちらかを確認する関数をさがしていたら、quantum/split_common/split_util.c
中にis_keyboard_left()
を見つけました。
分割キーボードスレーブ側のMCUに仕事をさせるのにちょっと戸惑いましたが、副産物でより良いカスタマイゼーション法が分かり、cgc56のコードも書き直ました。
Previous Post | Top | Next Post |