Compare commits

...
Author SHA1 Message Date
ewdernaandClaude Opus 5.5 3bd5ede630 provisional: ELC Editorのピン選択の領域と「線」を合意事項に加える
なぞる操作で使うピンを、端子ごとの順序付きの線の一覧として並べ、なぞると次の線を割り当てる。
足りないときはピン未指定の線を足し、空きピンを自動では選ばない(出ていないピンを割り当てる恐れがあるため)。
線はエディタの概念でELCには持たず、ピン未指定の線とキーの対応はエディタの状態として保存する。
ピンの使用状況を行列で見せるインジケータは、後回しにできるものとして要検討に置く。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WRs1RUoV3TBdtpkK7FrRTT
2026-11-10 08:11:38 +09:00
ewdernaandClaude Opus 5.5 d5c426916d provisional: ELC Editorの二乗マトリクス・direct・muxの操作を合意事項に移す
二乗マトリクスをマトリクスの一般形とみなし、ELCのデータは変えない(キーは順序付きの組をダイオードの向きで持つ)。
倍・二乗マトリクスはエディタで区別せず両方向モードにまとめ、自動反転は既定の向きの(アノード, カソード)が使われているときに限る。
なぞる操作は方式によらず共通にし、書く端子・ピンの付け方(1本/順に割り当て)・既定の向き・両方向モードだけを切り替える。
端子aとbが同じピンのキーは方式によらず警告する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WRs1RUoV3TBdtpkK7FrRTT
2026-11-10 08:00:55 +09:00
ewdernaandClaude Opus 5.5 cafd4dd2c4 journal: 二乗マトリクスの出典を正式タイトルと参照先に分けて書く
略記していたタイトルを各記事の正式タイトルに直し、著者・掲載先・日付と URL を分けた。
ikeji 2019 の記事名は「キーボードの回路」ではなく「キーボードのマトリクス方式の分類」だった。

Journal: journal/2026-10-29-square-matrix.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WRs1RXxQe5ZgZFoSsXppV5
2026-10-29 08:54:33 +09:00
2 changed files with 67 additions and 29 deletions
+15 -8
View File
@@ -71,14 +71,21 @@
## 出典
- ikeji 2019 キーボードの回路: <https://blog.ikejima.org/make/keyboard/2019/12/14/keyboard-circuit.html>
(二乗マトリクスの初出。ゴーストはダイオード2つ分なので部品の組み合わせに注意、1キー2ダイオードが要るかも、と書いている)
- ikeji 2022 変則マトリクスキーボード設計: <https://blog.ikejima.org/make/keyboard/2022/12/07/atypical-matrix-design.html>
- gachiham QMK 0.19.2で改良二乗マトリクス: <https://gachiham.hatenablog.com/entry/2022/12/17/000000>
(9ピン72キーから63キー。rows/colsに同じピンを並べ、MATRIX_MASKEDを使う)
- Cheena でかいキーボード設計法: <https://note.com/cheena/n/n846846c3efce>(低電力改良二乗マトリクス)
- ZMK kscan: <https://zmk.dev/docs/config/kscan>
- ZMK ドライバ: <https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/module/drivers/kscan/kscan_gpio_charlieplex.c>
- ikeji 2019: ikeji「キーボードのマトリクス方式の分類」ikejiのblog、2019-12-14
- 参照先: <https://blog.ikejima.org/make/keyboard/2019/12/14/keyboard-circuit.html>
- 二乗マトリクスの初出。ゴーストはダイオード2つ分なので部品の組み合わせに注意、1キー2ダイオードが要るかも、と書いている。
- ikeji 2022: ikeji「変則マトリクスキーボード設計」ikejiのblog、2022-12-07
- 参照先: <https://blog.ikejima.org/make/keyboard/2022/12/07/atypical-matrix-design.html>
- gachiham: gachiham「QMK 0.19.2で改良二乗マトリクスのキーボードファームウェアを作っていく話」gachiham's blog、2022-12-17
- 参照先: <https://gachiham.hatenablog.com/entry/2022/12/17/000000>
- 9ピン72キーから63キー。rows/colsに同じピンを並べ、MATRIX_MASKEDを使う。
- Cheena: Cheena「自作キーボード初心者のためのでかいキーボード設計法」note、2025-05-26(2025-09 追記あり)
- 参照先: <https://note.com/cheena/n/n846846c3efce>
- 低電力改良二乗マトリクス。
- ZMK kscan: 「Keyboard Scan Configuration」ZMK Firmware ドキュメント
- 参照先: <https://zmk.dev/docs/config/kscan>
- ZMK ドライバ: zmkfirmware/zmk のソース `app/module/drivers/kscan/kscan_gpio_charlieplex.c`(main ブランチ)
- 参照先: <https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/module/drivers/kscan/kscan_gpio_charlieplex.c>
## 捨てた記述
+52 -21
View File
@@ -8,35 +8,67 @@
### 一括配線
- キーの上を順になぞって配線する。ピンの指定は、なぞる前でも後でもできる。
- 通常のマトリクスは、rowだけ・colだけを分けてなぞれるようにする(rowモード / colモード)。
- なぞる操作は、配線の方式(通常・倍・二乗マトリクス、direct、mux経由)によらず共通にする。方式で変わるのは次の設定だけ。
- どの端子に書くか(接点キーは a / b、アナログキーは out / vcc / gnd)。
通常のマトリクスでrowだけ・colだけを分けてなぞるのは、端子aと端子bを分けてなぞることにあたる。
- 線(下記「ピン選択の領域」)の進め方。なぞり1回で次の線へ進むか、キー1つごとに次の線へ進むか。
前者はマトリクスでrowやcolを続けてなぞるとき、後者はキーごとに別のピンになるdirectやアナログmuxの `out` に使う。
- 既定の向き(`a-to-b` / なし)。directなどダイオードを付けない配線では「なし」にする。
- 両方向モード(下記)を使うか。
- directでは、電源レール側の端子は全キーをなぞって `GND` などを指定する。マイコン側はキー1つごとに次の線へ進める。
- mux・シフトレジスタ経由でも操作は変わらない。指定するピンが提供者の論理ピンになるだけ。
提供者が使っている上位ピンを候補から外すか警告するかは、ピン名の候補の一覧と一緒に考える(要検討)。
- 編集中は、片方の端子だけ配線した状態を保存できる。ELCの端子を省略可能にし、片側だけのキーは検証で拾う。
ELCの保存形式の変更になるので、本決定は別途行う。
- 倍マトリクスでは、同じrow/colの組が編集中に重なってよい。ダイオードの向きで区別するので衝突にはならない(T-25)。
ELCの保存形式の変更になるので、本決定は別途行う。ピン未指定の線(下記)の扱いも同じ決定に含める。
- 両方向モードでは、同じピンの組が編集中に重なってよい。ダイオードの向きで区別するので衝突にはならない(T-25)。
重なった場合も保存は止めない(T-16)。
- 端子aとbが同じピンのキー(二乗マトリクスの対角)は、方式によらず誤りとして検証で警告する。保存は止めない(T-16)。
同じピンをrow側とcol側の両方でなぞると起こるので、なぞった時点でも知らせる。
### 倍マトリクス
### ピン選択の領域と「線」
- 倍マトリクスモードは配線補助の設定であり、ボードの属性ではない。ELCには保存しない(ELCはトポロジを区分として持たない)。
- なぞる操作で使うピンを並べる領域を設ける。端子ごとに、順序付きの線の一覧を持つ。
- 通常・倍マトリクスでは端子a用と端子b用の2本。二乗マトリクスでは両方に同じ並びを置く(揃える操作を用意する)。
- directではマイコン側の1本だけ。
- なぞると、一覧の次の線がキーの端子に割り当てられる。並びはドラッグで並べ替える。
- 線が足りなくなったら、一覧を自動で拡張する。足すのはピン未指定の線であり、空いているピンを自動では選ばない。
外に出ていないピンを割り当てる恐れがあり、候補の一覧を「今使えるピン」と誤解させる問題(要検討)を強めるため。
- 線はエディタの概念で、ELCには持たない(ELCの端子が持つのは `PinRef` だけ)。
- 線にピンを指定した時点で、その線に属するキーの端子にピンをELCへ書く。
- ピン未指定の線と、それに属するキーの対応は、プロジェクト内のエディタの状態として保存する。
- 並びはGeneratorの `rowPins`/`colPins` を作るときの初期値に使える。両方向モードと同じく、常には連動させない。
### 両方向モード(倍・二乗マトリクス)
- 二乗マトリクスをマトリクスの一般形とし、通常・倍マトリクスは使うピンの組を限ったものとみなす。
- ELCのデータの持ち方は変えない。接点キーは端子のピンとダイオードの向き、つまり (アノード側のピン, カソード側のピン) の
順序付きの組を持つ。二乗マトリクスのキー (駆動, 受信) はこれでそのまま表せる。
- 倍マトリクスと二乗マトリクスはエディタで区別せず、1つの両方向モードにする。
違いはピンをrowとcolの組に分けるかどうかで、Generatorの `rowPins`/`colPins` の決め方(二乗なら同じ並び)にあたる。
- 両方向モードは配線補助の設定であり、ボードの属性ではない。ELCには保存しない(ELCはトポロジを区分として持たない)。
- 途中保存したプロジェクトで設定を復元できるよう、プロジェクト内のエディタの状態として保存する。
- Generatorの出力設定を作るときの初期値に使える。常には連動させない(走査方式を決めるのは出力設定)。
倍マトリクスの出力はGeneratorが未対応(T-19)なので、効くのは対応後。
- rowモード/colモードのどちらで作業中かは保存しない。
- エディタはrow/colやCOL2ROWの概念を持たない。順/逆の解釈はGeneratorが行う。エディタ内の規約は次の2つだけ。
- rowモードでなぞると端子a、colモードでなぞると端子bに書く。
- なぞったときの既定の向きは `a-to-b`。
- 倍マトリクスモードでなぞったとき、同じピンの組を持つキーが既にあれば、新しいキーの向きを反転する。
倍か二乗か(`rowPins`/`colPins` を分けるか同じにするか)は出力設定で選ばせる。
倍・二乗マトリクスの出力はGeneratorが未対応(T-19)なので、効くのは対応後。
- どの端子に書いているかは保存しない。
- エディタはrow/colやCOL2ROWの概念を持たない。順/逆の解釈はGeneratorが行う。なぞったときの既定の向きは `a-to-b`。
- 両方向モードでなぞったとき、新しいキーを既定の向きにした (アノード, カソード) の組を、既にある他のキーが使っていれば、
新しいキーの向きを反転する。
- 順序のない組で判定しない。二乗マトリクスを回路図の格子どおりになぞると、(p, q) と (q, p) は既定の向きのまま別の組になる。
倍マトリクスでは端子aが常に同じ側のピンになるので、どちらで判定しても結果は同じ。
- 排他なキー(レイアウトバリアント)との重なりは数えない。排他キーは同じ組を同じ向きで共有するのが正しい。
- 判定は両端子が揃った時点で行う。rowモードとcolモードに分けてなぞる場合は、後から付いた端子の時点。
- 判定は両端子が揃った時点で行う。端子aとbに分けてなぞる場合は、後から付いた端子の時点。
- 配線し直すキー自身の旧配線は数えない。
- 両方の向きが既に埋まっている場合は反転せず、衝突として警告する。なぞる操作は止めない(T-16)。
- 反転した向きも既に使われている場合は反転せず、衝突として警告する。なぞる操作は止めない(T-16)。
- 通常のマトリクスでは両方向モードを切っておく。既定の向きでの重なりは配線ミスであり、自動反転すると見えなくなる。
- モードの切り替えでは既存の配線を書き換えない。モードはこれからなぞる操作の補助だけを決める。
- 切り替えた時点では「どちらが二個目か」を決める順序がない(なぞった順はELCに残らない)。
- 既存の重なりの振り分けは、切り替えとは別の一回限りのコマンドにする。
- 倍から通常へ戻しても配線は変えない。向きの不揃いは検証で拾う。
- 両方向モードを切っても配線は変えない。向きの不揃いは検証で拾う。
- 向きを変える操作を2つ持つ。どちらも、選択中のキーの向きが混ざっていても、相方を選んでいてもいなくてもよい。
- 相方と交換: 選んだキーの(順序のない)ピンの組を重複なく集め、その組を持つ全キーの向きを反転する。
組ごとに1回だけ反転するので、相方を同時に選んでいても二重に反転しない。排他キーも一緒に反転する。
相方のいないキーは単に反転する。
相方のいないキーは単に反転する。両方向とも埋まっている組では、キーと向きの割り当てが入れ替わるだけで衝突しない。
- このキーだけ反転: 選んだキーだけを反転する。同じ向きで衝突している組は、交換では解消できないため。
- 向きは三角形のオーバーレイで見せる。ダイオード記号ではないのでカソードの棒は付けず、`a→b` の向きだけを表す。
相方のいるキーといないキーの区別も見えるようにする(塗り/白抜きなど)。
@@ -54,15 +86,13 @@
## 要検討
- 二乗マトリクス(同じピンがrowにもcolにも現れ、向きはダイオードだけで区別する)の操作。通常のマトリクスと同じ操作で足りるか。
row/colで表せるかの議論は後で行う。Generatorのプレビューは今のところ「未対応」になる(T-19)。
倍マトリクスの操作(自動反転・交換)が使えそうだが、いったん別に検討する。統合は両方の検討後に、矛盾がないかを確認して行う。
- directの操作。row/colの指定がなく、片方の端子は電源レールになる。
- mux・シフトレジスタを使う場合の操作。rowかcolの一方を親の提供者の論理ピンにする形になるか。
マトリクスとの階層化はモデル上は表せるが、デジタル側の提供者の記述は未定義。
- ボードを提供者にしたときの形。ボードのピン名とMCUのピンの対応、外に出ていないピンの扱い、分割キーボードでの使い方。
- 対応している提供者を図付きで見せる。ボードのピン配置図と一緒に考える。
- ピン名の候補の一覧が「今使えるピン」と誤解される問題。ダイアログに分けるなど。ボードを提供者にすれば、外に出ていないピンは候補から消える。
- ピンの使用状況を行列で見せるインジケータ(後回しにできる)。両方の軸に使っている全ピンを同じ並びで置き、
キーを (アノード, カソード) のセルに描く。通常のマトリクスは片側の矩形、倍は両側、二乗は対角以外に色が付き得る。
同じ向きの重なり(T-25)、空いている組、使われていないピンが見える。排他キーは同じセルを共有するので件数を添える。
セルとレイアウト上のキーを相互に強調する。軸はピン選択の領域の並びを使う想定で、領域ができてから載せる。
- GPIOに直結したLED(インジケータなど)。仕様にないので `backlog/README.md` のELC-P-4とした。
## ELC Editorの範囲外
@@ -70,6 +100,7 @@
- Generatorのプレビューが倍マトリクスを「未対応」にできない。T-19の検査は両端子が `rowPins`/`colPins` に分かれているかだけを見て、
向きが揃っているかを見ない。倍マトリクスの配線は検査を通り、同じ(row, col)を持つキーが2つある設定を出力してしまう。
単純なマトリクスに限る(ELC-P-3)なら、向きが揃っていることも検査条件に要る。
二乗マトリクスも、`rowPins` と `colPins` に同じ並びを指定すれば同じ検査を通ってしまう。
## モックの実装上の問題