マイコン入力処理ソフト

マイコンは、入力データを基に、データを出力する装置です。今回は、入力データのソフト処理について考えます。

入力データには、「ノイズ」が付き物です。例えば、スイッチ入力であれば、チャタリング、AD変換入力であれば、アナログノイズなどです。これらには、ハード的なノイズ対策が行われます。しかし、マイコンに取込むのは最終的にはソフトなので、ソフトの入力ノイズ対策は必須です。

スイッチ入力のソフトノイズ対策

スイッチのチャタリングは、使用するスイッチハードによってチャタリング時間が変わります。タクトSWやトグルSWの場合は、数ms~10ms程度と言われます。スイッチ入力のソフト処理は、入力データをスキャンして、「High」か「Low」のデータ値が連続したらチャタリングが終わった確定データとします。問題は、データスキャン間隔と連続値の比較回数です。スキャン間隔が広く比較回数が多ければ、確定までの時間が掛ります。と、ここまでは、教科書に記載されています。しかし、肝心のソフト調整の記載は少ないようです。

スイッチ入力は、実際のスイッチハードを人が操作して確定データを調整する必要があります。調整ポイントは、スキャン間隔と比較回数です。これらを簡単に調整/変更できるソフトが優れたソフトです。いろいろ方法があるでしょうが、シンプルな方法は、「スイッチスキャン処理を1つの関数として作成し、この関数の実行タイミングをメイン関数で変更する方法」です。これなら、スイッチハードが無い時はシミュレーションでソフト単体のデバッグができますし、ハードが用意できた後は、単体デバッグ済みソフトとスイッチハードを結合してデバッグします。結合デバッグは、メイン関数のスイッチスキャン処理実行タイミングだけを変えて、スイッチハード操作データが正確に取得できるタイミングを探すだけですので簡単です。

このように、ソフトは、ハード無しの状態で単体デバッグができ、かつ、ハード結合デバッグの調整も簡単にできる作りが望ましいのです。この調整を開発の初期段階でどの程度意識したかにより、可搬性の良いソフトができます。

スイッチスキャン処理ソフトの例(2回スキャンデータ一致で入力データ確定)
スイッチスキャン処理ソフトの例(2回スキャンデータ一致で入力データ確定)

多くの教科書やサンプルソフトは、メイン無限ループからサンプル処理を起動します。これは、サンプル処理の説明に重点を置いているのでしょうがないのです。しかし、ハード結合調整まで考えると、ここで示した方法のように、無限ループからの起動よりも、起動タイミングを変えられるメイン関数の方が良いことが判ります。

販売中のRL78/G1xテンプレートは、1ms/10ms/100ms/1s/無限ループの5種類のアプリ起動タイミングを提供します。特に入力ソフト処理には、このタイミングを変えられることが、ノイズ対策やハード依存性を少なくすることに効果的です。タクトSWでは、10ms間隔のスイッチスキャン関数起動と2回スキャンデータ一致により、操作データが正確に取得できました。また、AD変換の例としては、ポテンショメータのAD変換データスキャン関数は、100ms間隔起動と2回スキャンデータ一致によりデータ入力ができました。同じAD変換ソフトで、室温などの変化が緩やかなAD変換入力なら、スキャン間隔を1sにすれば対応できます。

販売中のG1xテンプレートのアプリ起動処理(テンプレートから一部抜粋)
販売中のG1xテンプレートのアプリ起動処理(テンプレートから一部抜粋)

コメントを残す