PICで気圧、温度、湿度計 by 24FJ64GA002
たかが押しボタン、されど押しボタン
パソコンの入力装置の最も一般的なものと云えば、押しボタンスイッチです。押していない時と、押している時の2つの状態しか無いのですが、この2つの状態を的確にパソコンで判断する事は、実は大変厄介な事なのです。 3. 人が日常的に「押しボタンスイッチを押した」、「押しボタンスイッチから手を離した」と感じている時間感覚と、パソコンが入力を「0」や「1」と判断する為の処理時間の間に、あまりにもスケールの違いがある。 たとえば、押しボタンで押した回数を「正しくカウント」しなくてはならない様な場合や、一回づつ押した毎に別の動作に切り替わる様な場合には、この時にノイズやチャタリングと云う比較的高速で不規則な現象を除去しながら、動作時間が比較的ゆっくりで連続操作時間間隔の不規則な人間が「押した」、「離した」という動作を検出して1回、2回と間違える事無くカウントすると云う、2つの問題を同時に処理しなければならないからです。 ディップスイッチや、トグルスイッチ等の様な一定の状態をキープする様な目的で使用する入力機器は、途中がどうであれ、最終的な動作の切替えが目的であり、変化の正確な回数をカウントするという使い方は普通はしません。 時計等の日時の設定をする方法を思い浮かべて下さい。 モード変更ボタンか何かで、時刻の設定モードにします。そして、目的の時間に設定するのですが、押しボタンを1回押せば、数字は正確に+1、あるいは-1され、長押しすると連続的に変化したり、さらに長押しを続けていると、増減のリピート時間が加速したりします。そして、目的の時間に合わせたら、設定ボタンを押して時刻をセットします。複数のボタンを同時に押した場合は、特殊な使い方を除いて、通常は思わぬ動作をしない様に、複数ボタンの同時押し操作が無効になる様になっています。 この中で、一番重要なのは「1回押した事を、1回と検出する」部分なのです。 この「1回押した」という非常に曖昧な動作は、高速に動作しているパソコンに取ってはものすごく長い時間の現象を検出して認識しなければならないのです。 しかも、押すタイミングは人によって異なり、高橋名人(かつてのゲーム機ファミコンの名人で現在はナムコの社員)は、特技としてゲーム機のコントローラのボタンを1秒間に16回押すという16連打があり、日本で初めて『チャンピオンシップロードランナー』を全面クリアした実績を持っています。私にはとてもこんな連打は出来ません。1秒間に4〜5回が限度です。 ゆっくり押す人は1秒間に1回なんて事も有りますね。 それでも、1回は1回でなくてはなりません。 1回が2回になったり、時々カウントできなかったりすれば、「この装置は故障している!」とクレームをつけられてしまいます。 例え遊び半分にいろいろなボタンを同時に押されても、突然異常な動作をしたり、操作不能な状態になって電源を抜かなければいけない様な状態に陥ったリすれば、「これは危険だ!」とか、「こんなの使い物にならない!」という評価が下されるわけです。 また、押しボタンを押している間、パソコンが押しボタンの処理に集中してしまい、平行して処理しなければならない動作が中断してしまってもいけません。 例えば、7SegのLED表示をPICでダイナミック点灯するには、回路の部品点数や表示の為の制御用I/O数をなるべく減らす為に、LEDの各桁を1つ1つ順番に切換えながら全体を60Hz(1/60sec=17msec周期)位で順次点灯させて、その残像効果であたかも全ての桁が同時に点灯している様に見せています。この時、その時刻を合わせようとして、押しボタンを押している間中LEDのダイナミック点灯表示処理が止まって、表示が1桁だけになってしまったり、消えてしまっては困ります。 つまり、単にスイッチの処理に集中して良い場合と、周期的なサイクル処理に紛れ込んで処理しなくてはならない場合と、あるいはタイマー等の定期的な割り込み処理でスイッチ処理をすれば良い場合、割り込み処理が許されない場合等様々であり、それぞれの場合に合致した処理の方法を考える必要があるのです。 |
では、Air3-24GSについては、押しボタン処理はどうする場良いのでしょうか? Air3-24GSでは、 1.気圧センサーを0.56sec毎の自動計測モードにして使用している。 2.気圧センサーの計測開始から計測完了までの空き時間(560msec)を利用して、日時の表示、気圧値、気温値のデーターを気圧センサーから通信でPICに取り込み、さらに湿度値を湿度センサーから通信でPICに取り込み、それらの3種の数値を変換して表示し、プロットし、シリアルデータ通信で外部へ送信している。 3.次の計測完了信号が発生するまでの空き時間はPIC自身をスリープさせて、積極的に省電力させている。(アウトドアーでバッテリー駆動運転する場合に、無駄な電力を消費させず、電池の寿命を長くできるため、EEPROMが無いPIC24Fのメモリー上で観測データーをオフラインで一時記憶できる) 4.Air3-24GSで、計測完了後に気圧センサーユニットからデーターを読み出さないで無視しても、何も問題は無い。 通常の計測&表示運転では560msecという決まった周期の中で、上記の全ての処理が完了していなければならないのですが、押しボタンの処理を0.56sec毎に行うのはあまりにも応答が緩慢になってしまいます。 高橋名人程ではないとしても、5回/秒(200msec)位の押しボタンの応答が普通であろうと私は思います。これは、ON、OFFの2つの状態で考えれば、10判断/秒(100msec)で着実に判定が出来なければ、「押しボタンの応答が遅い」と思われてしまう事になります。 |
|
今回は、4つの押しボタンのチャタリング処理と、状態チェックをC言語の関数として作ってみました。 |
なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。 |
ご意見/苦情/ご感想はこちらまで |