メディア
連載
» 2022年05月10日 10時00分 公開

入力ポートが足りないときに、スイッチ入力数を増やす裏ワザQ&Aで学ぶマイコン講座(71)(2/3 ページ)

[小谷豊(STマイクロエレクトロニクス),EDN Japan]

キーマトリクス方式におけるキー判別方法

 プルアップ抵抗付き入力ポートとプルアップ/プルダウン抵抗なしオープンドレイン出力ポートを使用した構成のキーマトリクス方式では、マトリクスの列ごとに対応する出力ポートを順番にLOW出力にします。LOW出力に設定された列の中のスイッチが押されたときに、対応するスイッチの入力ポートはLOWになります。また、スイッチが押されていない状態では、入力ポートはHIGHになります。

 例えば、STM32G0マイコンを使用し、出力ポートにPB0〜PB3、入力ポートにPB4〜PB7を使用する場合を考えてみます。列AのスイッチS1が押されたかどうかを調べるには、列Aに接続されている出力ポートPB0をLOW出力、列B〜Dに接続されている出力ポートPB1〜PB3をハイインピーダンス状態にし、スイッチS1につながっている入力ポートPB4〜PB7の状態を調べます(図2

図2:キーマトリクス方式でのキー判別方法[クリックで拡大]

 この時、入力ポートの状態がLOWであれば、スイッチは押されている状態になります。また、入力ポートの状態がHIGHであれば、スイッチは押されていない状態になります。

 実際の回路の動作の様子を回路シミュレーターで確認してみます。

 スイッチS1のみ押されている状態では、図2内赤矢印線のように電流が流れ、入力ポートPB4の電圧が0Vに引っ張られるため、入力ポートPB4の電圧が約0V、その他の入力ポートPB5〜PB7の電圧は約3.3Vになり、PB4はLOW入力、PB5〜PB7はHIGH入力となります。

スイッチの同時押し

 スイッチの同時押しは、本構成では最大2つまで可能です。3つ以上同時に押す場合、うまく認識できない可能性があります。

 例えば、列Aのスイッチを1つ(S1)と列Bのスイッチが2つ(S5、S6)、合計3つのスイッチが同時押しされた場合を考えてみましょう。列AのスイッチS1が押されたかどうかを調べる場合、先ほどと同様に、列Aに接続されている出力ポートPB0をLOW出力、列B〜Dに接続されている出力ポートPB1〜PB3をハイインピーダンス状態にし、スイッチS1につながっている入力ポートPB4〜PB7の状態を調べます(図3

図3:スイッチ3つ同時押しの例[クリックで拡大]

 実際の回路の動作の様子を回路シミュレーターで確認してみます。

この状態では、図3内赤矢印線のように電流が流れ、入力ポートPB4とPB5の電圧が0Vに引っ張られるため、入力ポートPB4とPB5の電圧が約0V、その他の入力ポートPB6〜PB7の電圧は約3.3Vになり、PB4とPB5はLOW入力、PB5〜PB7はHIGH入力となります。

 結果は、スイッチS2は押されていないにもかかわらず、スイッチS2が押されていると誤判定されます。

 しかし、用途によっては、2つまでの同時押しで十分な場合もあります。キーパッドなどで、シフトキーと他のキーとの同時押しを使って、スイッチに割り当てる機能数を増やすといった用途の場合、2つまでの同時押しで十分なため、このような用途では本構成が便利です。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.