STM32F411CE (4)

Date: 2022/09/01 (initial publish), 2022/09/11 (last update)

Source: jp/note-00054.md

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を書き込み配線確認をします。

動作確認OK

左右検出(Handedness by Pin)法

今回は簡単に、使ってないB10ピンを使い、アクセスが良かった左キーボード側を 10 K-ohm 抵抗でGNDして区別する。 使う抵抗値は、未使用ピンはハイインピーダンスの入力なので、内部回路がP-UP/P-DNの際に使う 50K-ohm位が良い気がするが、手元部品の都合で10 K-ohmとした。

抵抗を普通と逆の左キーボード側につけたので、否定ロジックになるSPLIT_HAND_PIN_LOW_IS_LEFTを指定する。

(ピン数が足りないならソフト的対応も可能だが、それは後日の機会に。)

フルデュプレクスでいく。参考となるのは:

テスト用ファームウエアーで分割キーボードの配線と動作確認

左右のキーボードを4線で接続しました。電源(+5V)赤、電源(GND)黒、TXとRXはクロス接続で白・緑を用い直結です。

以下の試験ファームウエアーを入れたら、一発で1つのキー以外全て順調な稼働が確認できました。

動きがちょっと悪かった1つのキーの原因は、ホットメルト接着剤がはみ出してキーがしっかりボトムしきれない物理的問題でした。

また、配線まわりのホットメルトがはみ出して裏板がしっくりしない問題解決策でニッパーで切る際に誤って配線を切って気づかずにいました。 後からある縦一列が無反応となっているのに気づき直しました。

LED問題

cgc56では8つもあったのですが、gcs58ではキーボードの状態表示に使えるLEDは左右1つづつです。

単純なアプローチではこれらは同じピンなので同時点滅しかしません。

その解決策を書くのに左右どちらかを確認する関数をさがしていたら、quantum/split_common/split_util.c中にis_keyboard_left()を見つけました。

分割キーボードスレーブ側のMCUに仕事をさせるのにちょっと戸惑いましたが、副産物でより良いカスタマイゼーション法が分かり、cgc56のコードも書き直ました。

Previous Post Top Next Post