ELC: ELCレイヤーの初版。ピン提供者による配線表現

muxを「ピンを増やす装置」として抽象化し、提供者が提供する論理ピンを
キーの端子が指す形にした。直結もmux経由も同じ形になり、多段muxは
入れ子で表せる。

配線方式(マトリクス / direct / charlieplexing)は列挙せず、端子の
接続先の組み合わせとして表す。row / col は正本に含めない。

射程は配線のみとし、センサの品種・出力特性・キャリブレーションは
持たない。PCB設計の手前までというPHYの線に揃えた。

Journal: journal/2026-09-20-elc-pin-provider.md
Journal: journal/2026-09-20-elc-scope.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-20 20:24:56 +09:00
co-authored by Claude Opus 5
parent eb96ff02d8
commit 5bba75d1e8
3 changed files with 232 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
# muxをどう表現するか / 配線方式を列挙しない
## 結論
muxを「ピンを増やす装置」= ピン提供者として抽象化する。
キーの端子は、提供者が提供する論理ピンを指す。直結とmux経由が同じ形になる。
配線方式(マトリクス / direct / charlieplexing)は列挙しない。端子の接続先の組み合わせとして表れる。
row / col は正本に含めず、QMK等への出力時に割り当てる派生情報にする。
## 案の比較
| 案 | mux経由のキーの書き方 | 判定 |
| --- | --- | --- |
| ピン提供者 | `"out": "mux0.5"`、mux0が select と common を宣言 | 採用 |
| 展開アドレス | `{ "adc": "A0", "ch": 5 }`、選択ピンはボード共通設定 | 多段muxで破綻する |
| ネットリスト | 部品と結線をそのまま持つ | 回路図エディタの領分。走査手順を導出できない |
## muxの実際
アナログmux(74HC4051=8ch / CD74HC4067=16ch)は、選択ピンで指定した1チャンネルだけを
共通ピンに導通させるアナログスイッチ。HE/光学がこれを使うのは、センサ出力がアナログで
ADCピンが足りないため。
実例(Charading/qmk-he、Pro Micro): `S0-S3 -> Pin2,3,4,5`、共通(Z) -> `A0`。
ファームは選択ピンに 5 を出力して A0 をADC読みすると、チャンネル5のセンサが読める。
つまりmuxは「1本のADCピンを16本に増やす装置」。この見方がそのまま表現になる。
出典:
- https://github.com/Charading/qmk-he
- https://github.com/jhonney13/hall-effect-keyboard
## ピン提供者にすると付いてくるもの
- 多段muxが入れ子で書ける。`mux1.common = "mux0.3"` と書くだけで専用の仕組みが要らない
- シフトレジスタ・GPIOエキスパンダ・デマルチプレクサが同じ枠に入る。種別が違うだけ
- 分割キーボードの右手側マイコンが、単に別の提供者になる
- `matrix.type` のenumが不要になる
## row / col を正本にしない理由
ELCが扱う範囲を全トポロジ(接点マトリクス / direct / charlieplexing / アナログ / 光学、
いずれもmuxを挟む場合を含む)とした時点で、row / col は普遍的な軸でなくなる。
directに行と列はなく、charlieplexingでは便宜的な表記にすぎず、アナログでは経路が
(mux, チャンネル) になる。全部を一つの座標で表すと、方式ごとに意味の違う数値になる。
## 却下: 旧スキーマの `matrix.type` enum
`phase1-json-schema.md` のELCスキーマは `standard / charlieplexing / direct` の3値を持ち、
`matrix.dimensions{rows, cols}` を必須にしていた。アナログ・光学・ホールを受けられず、
IDX側にも `matrix{row, col}` があって二重になっていた。ピン提供者の形にすると両方消える。
+34
View File
@@ -0,0 +1,34 @@
# ELCの射程をどこで切るか
## 結論
配線だけ。「マイコンのピンと各キーの端子がどう対応するか」で切る。
センサの品種・出力特性・キャリブレーション値は持たない。
代償として、ELCだけではファームウェア生成が完結しない。アナログ値を押下深さに変換する部分の
置き場は未定のまま残す。必要になった時点で層を決める。
## 案の比較
| 案 | 内容 | 判定 |
| --- | --- | --- |
| 配線のみ | 端子とピンの対応、ダイオードの向き、LEDの番号 | 採用 |
| 配線 + センサ特性 | 加えてセンサ品番と出力カーブ | PCB設計ツール側の情報 |
| 配線 + センサ特性 + キャリブレーション | 加えてキーごとの実測最小/最大 | 設計データではない |
## 根拠
PHYで既に「スイッチの品種もソケット方式も持たない。どのフットプリントを使うかはPCB設計ツール側の
選択であり、Beyond KLEはその手前までを扱う」と決めている。HEセンサの品番はそのPCB設計ツール側に落ちる。
同じ線を引き直さずに済む。
キャリブレーションは性質が違う。HEセンサ(ラチオメトリックなホールIC)は磁束密度に対しては
比例した電圧を出すが、磁石とセンサの距離から磁束密度への関係が急峻な非線形で、
さらに磁石の強さと実装のばらつきが乗る。押下0%と100%の生値はボードごと・キーごとに違うため、
実機で最小/最大を取る必要がある。これは製造後の実測値であって、設計データではない。
## 捨てた仮説
「detect が analog なら出力の向き(磁石が近いと電圧が上がるか下がるか)くらいは設計時に決まるので
ELCが持ってよい」— センサ品番が決まれば決まる値であり、品番を持たないと決めた以上これも持てない。
向きが必要になるのは生値の解釈の段階で、そこはELCの外。