2002. 1. 30
チャタリング以外にもノイズという厄介な問題があります。スイッチへの配線は長く引きまわされて基板に入ってくることが多いので、どうしてもノイズの影響を受けやすくなります。右の図のようにノイズがポートの参照と重なれば、入力を誤って検出してしまいます。
このノイズによる誤検出の問題は「入力値が前回と同じ場合にのみそれを有効とみなす」という処理で回避することができます。実際のコーディング例を続くリストに示します。
sample_sw()をタイマー割り込みなどで定期的に実行します。スイッチの状態を見るときは ls_stat を参照。
volatile u_char ls_stat; /* スイッチ状態:ONに対応するビットが立っている */ void sample_sw() { static u_char prev; u_char a; a = ~PA.PIN.BYTE & 0x1f; /* スイッチ読み込み(反転+有効ビットマスク) */ if (a == prev) ls_stat = a; /* 前回値と同じなら有効として格納 */ prev = a; }