Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Docs] Japanese translation of docs/how_a_matrix_works.md #9682

Merged
merged 3 commits into from
Jul 29, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions docs/ja/how_a_matrix_works.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# マトリックスがどのように動作するか
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

<!---
original document: 0.9.32:docs/how_a_matrix_works.md
git diff 0.9.32 HEAD -- docs/how_a_matrix_works.md | cat
-->

キーボードスイッチのマトリックスは行と列で配置されます。マトリックス回路がなければ、各スイッチはコントローラに直接配線する必要があります。
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

回路が行と列に配置されている場合、キーが押されると、列ワイヤが行ワイヤと接触し、回路を完成します。キーボードコントローラはこの閉回路を検知し、キー押下として登録します。
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

マイクロコントローラはファームウェアを介してセットアップされ、論理 1 を一度に1つずつ列に送信し、行から一度に全てを読み取ります - このプロセスはマトリックススキャンと呼ばれます。マトリックスはデフォルトでは電流の通過を許可しない一連の開いたスイッチです - ファームウェアはキーが押されていないものとしてこれを読み取ります。1つのキーを押すとすぐに、キースイッチが接続されている列から来ていた論理 1 がスイッチを通過して対応する行に渡されます - 以下の 2x2 の例を調べてください:
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

Column 0 being scanned Column 1 being scanned
x x
col0 col1 col0 col1
| | | |
row0 ---(key0)---(key1) row0 ---(key0)---(key1)
| | | |
row1 ---(key2)---(key3) row1 ---(key2)---(key3)

`x` は関連付けられた列と行の値が1であるか、HIGH であることを表します。ここでは、キーが押されていないことが分かります。そのため `x` を取得する行はありません。1つのキースイッチでは、接続先の一方がその行に接続され、もう一方がその列に接続されていることに注意してください。
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

`key0` を押すと、`col0` は `row0` に接続されるため、ファームウェアがその行に対して受け取る値は `0b01` です (ここで `0b` はこれがビット値であることを意味します。つまり次の数字は全てビット (0または1)であり、その列のキーを表します)。この表記を使用して、キースイッチが押されたことを示し、列と行が接続されていることを示します:
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

Column 0 being scanned Column 1 being scanned
x x
col0 col1 col0 col1
| | | |
x row0 ---(-+-0)---(key1) row0 ---(-+-0)---(key1)
| | | |
row1 ---(key2)---(key3) row1 ---(key2)---(key3)

`row0` には `x` があるため、値が1であることがわかります。全体として、`key0` が押された時にファームウェアが受信するデータは、

col0: 0b01
col1: 0b00
│└row0
└row1

一度に複数のキーを押し始めると問題が発生します。マトリックスをもう一度見ると、かなり明白になっているはずです:

Column 0 being scanned Column 1 being scanned
x x
col0 col1 col0 col1
| | | |
x row0 ---(-+-0)---(-+-1) x row0 ---(-+-0)---(-+-1)
| | | |
x row1 ---(key2)---(-+-3) x row1 ---(key2)---(-+-3)

Remember that this ^ is still connected to row1

これから取得されるデータは以下の通りです:

col0: 0b11
col1: 0b11
│└row0
└row1

4つ全てではなく、3つのキーしか押されていないため、これは正確ではありません。この挙動はゴーストと呼ばれ、このような奇妙なシナリオでのみ発生しますが、より大きなキーボードではより一般的です。これを回避する方法は、キースイッチの後に、列に接続する前にダイオードを配置することです。ダイオードは、電流が一方向にのみ流れるようにします。これにより、前の例で他の列と行がアクティブにならないようにします。このようなダイオードマトリックスを表します;
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

Column 0 being scanned Column 1 being scanned
x x
col0 col1 col0 col1
│ │ | │
(key0) (key1) (key0) (key1)
! │ ! │ ! | ! │
row0 ─────┴────────┘ │ row0 ─────┴────────┘ │
│ │ | │
(key2) (key3) (key2) (key3)
! ! ! !
row1 ─────┴────────┘ row1 ─────┴────────┘

実際の用途では、ダイオードの黒い線が行に面して配置され、キースイッチから離れます - この場合の `!` はダイオードで、ギャップは黒い線を表します。これを覚える良い方法は、以下のシンボルを考えることです: `>|`
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

次に、3つのキーを押して、ゴーストシナリオとなるものを呼び出します:
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

Column 0 being scanned Column 1 being scanned
x x
col0 col1 col0 col1
│ │ │ │
(┌─┤0) (┌─┤1) (┌─┤0) (┌─┤1)
! │ ! │ ! │ ! │
x row0 ─────┴────────┘ │ x row0 ─────┴────────┘ │
│ │ │ │
(key2) (┌─┘3) (key2) (┌─┘3)
! ! ! !
row1 ─────┴────────┘ x row1 ─────┴────────┘

物事が本来の通りに起こります!これにより、以下のデータが取得されます:
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

col0: 0b01
col1: 0b11
│└row0
└row1

ファームウェアはこの正しいデータを使って、実行すべきこと、最終的には OS に送信する必要のある信号を検出できます。
umi-umi marked this conversation as resolved.
Show resolved Hide resolved

参考文献:
- [Wikipedia の記事](https://en.wikipedia.org/wiki/Keyboard_matrix_circuit)
- [Deskthority の記事](https://deskthority.net/wiki/Keyboard_matrix)
- [Dave Dribin によるキーボードマトリックスヘルプ (2000)](https://www.dribin.org/dave/keyboard/one_html/)
umi-umi marked this conversation as resolved.
Show resolved Hide resolved
- [PCBheaven によるキーマトリックスの仕組み](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (アニメーションの例)
umi-umi marked this conversation as resolved.
Show resolved Hide resolved
- [キーボードの仕組み - QMK ドキュメント](ja/how_keyboards_work.md)
umi-umi marked this conversation as resolved.
Show resolved Hide resolved