一般にマイコンでキー入力を行なうときにはポートを使用します。しかし、使えるポートの数が少ない場合には、キー入力のためだけにポートを何本も使うことはできません。
そこで、考えられるのがアナログ入力を用いたキー入力です。下図にアナログ入力を用いて4個のキー入力を行なう例を示します。
[考え方]
SW1〜SW4のどのスイッチが押されるかで、抵抗分割されてアナログ入力端子(ANIn)に加わる電圧が異なります。その電圧をA/D変換することでどのキーが押されたかを判定できます。
[抵抗値の設定]
それでは使用する抵抗値はどのようにすればよいのでしょうか。このときに第1に決める必要があるのが、「どのような電圧を基準として入力を判定するか」です。例えば、簡単のために、0〜0.8V
DDを、0.2V
DD刻みに分割する場合を考えます。このとき、入力電圧と押されたスイッチの関係は以下のようになります。
| 0.8VDD以上 | | どれも押されていない |
| 0.6VDD〜0.8VDD | | SW4が押された |
| 0.4VDD〜0.6VDD | | SW3が押された |
| 0.2VDD〜0.4VDD | | SW2が押された |
| 0 〜0.2VDD | | SW1が押された |
そこで、この判定値のできるだけ中央になるように0.1V
DDのマージンをもたせて、抵抗値を決めていきます。その際にR1を基準(=100)にして考えます。
まず、SW2が押されたときに0.3V
DDになるようにR2を決めるとR2=R1*3/7となるので、抵抗のE24系列で近い値は43となります。次にSW3が押されたときに0.5V
DDに近くなるR3を決めると、E24系列では56が近い値となります。同様にして求めていくと、R4は0.7V
DDから130、R5は0.9V
DDから620となります。
| | R1を元に求める |
| R1 | 100 |
| R2 | 43 |
| R3 | 56 |
| R4 | 130 |
| R5 | 620 |
コーヒーブレイク
抵抗の値は通常は切りの良い値ではなく、中途半端と思われる値になっています。これは、1〜10までを等比級数的に分割した値となっているためです。分割の仕方として一般的なのは12分割したものがE12系列、24分割したものがE24系列と呼ばれています。E24系列では1.0、1.1、1.2、1.3、1.5、1.6、1.8、2.0、2.2、2.4、2.7、3.0、3.3、3.6、3.9、4.3、4.7、5.1、5.6、6.2、6.8、7.5、8.2、9.1の並びとなります。これらの中、太字で示したものはE12系列にも存在する抵抗値の並びです。
|
抵抗の比率は以上で決まります。次は絶対値を決定します。その際には、A/Dの変換精度をよくするには、できるだけ小さな値にする必要があります。また、流れる電流をできるだけ少なくするには大きな値にする必要があります。このような使い方では、A/Dの変換精度はそれほど必要ありませんので、電流を優先して値をきめることになります。
R1を元に求めた結果にそのままkΩを付けた場合には合計で約1MΩ、となり、待機時(スイッチが押されていない状態)に流れる電流は5V動作でも5μA程度となります。
以上の例では間隔をできるだけ広くとるために、20%刻みに設定しましたが、待機時の電流をできるだけ小さくするにはR5をできるだけ大きくする(押されていないときの電圧を高くする)ことになります。例えば、以下のように設定することを考えます。
| どれも押されていない | | 0.95VDD |
| SW4が押されたとき | | 0.3VDD |
| SW3が押されたとき | | 0.2VDD |
| SW2が押されたとき | | 0.1VDD |
| SW1が押されたとき | | 0 |
ここで、R1を100kΩとした場合には、R2は11kΩ、R3は15kΩ、R4は16kΩ、R5は1.8MΩとなります。合計では約2MΩとなり、待機電流を約半分に改善できます。
このハードの制御プログラムについては「
A/Dの簡単な使い方」を参照ください。
これまで説明した回路はキーの優先度が決まっており、二重押しがあった場合でも必ず優先キーとして処理できるものです。(優先度はSW1>SW2>SW3>SW4となります。)
二重押しがないような場合には以下の図に示すような回路も考えられます。この回路では、スイッチが同時には1つしか押されない場合には抵抗の値は独立に設定できるので計算は楽です。また、スイッチが全く押されていない場合には電流が流れないので、その点でのメリットもあります。
(2006/03)