検索
連載

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

マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「入力ポートが足りないときに、スイッチ入力数を増やす裏ワザ」についてです。

Share
Tweet
LINE
Hatena

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

 プルアップ抵抗付き入力ポートとプルアップ/プルダウン抵抗なしオープンドレイン出力ポートを使用した構成のキーマトリクス方式では、マトリクスの列ごとに対応する出力ポートを順番に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.

ページトップに戻る