• ベストアンサー

PICでのプログラムによるチャタリング対策

こんにちは。 非常に基本的かも知れませんが、 プログラムによるチャタリング対策の 仕方がわかりません。 スイッチONを割り込みでうけつけてから、 0.5~1秒待って、まだ、ONであれば、 実行する、という方式でやっています。 短い秒は、カットされていますが、長押し があると、おかしな動作になってしまいます。 どういう方式をとるのが一般でしょうか。 特に言語はといません。方式、考え方が 知りたいです。 (ハードによる防止は、 まったく考えていませんので、 結構です)。 以下、参考までに 自分のプログラムです(PA使用)。 warikomi call cwait //0.5-1s待ち sb rb.7 //もう一度チェック goto warikominot //押されてなければ、addしない。 add intervala,#01h warikominot clrb rbif retfie お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

普通「チャタリング」っていうとせいぜい数十ms くらいを想定するものだと思うんだけど.... 0.5s~1s って, どんなチャタ? ついでにいうと (聞いても答えられないような気はしますが)「長押しするとおかしな動作をする」といわれても, 「押し続ける時間」「期待する動作」「実際の動作」を示さないと解決できないかもしれませんよ.

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

チャタリング防止の方法の考え方を書きます。 チャタリングは、最悪に長くて50msぐらいですので、0.5秒も待つ必要はありません。 処理は、1msぐらいにサンプリングして同じ状態が10回程度続けば、その状態で安定したと見なしてスイッチの値を変更します。 プログラムを見てみると。 >warikomi >call cwait //0.5-1s待ち >sb rb.7 //もう一度チェック >goto warikominot //押されてなければ、addしない。 >add intervala,#01h >warikominot >clrb rbif >retfie (1)RB7の割り込みを使っている? (2)割り込みでステータスとか退避していないけど大丈夫? (3)割り込みで0.5-1s待ちするなら割り込みは意味が無いどころか害がある。waitなど使わずにすぐリターンすること。 (4)sbってBTFSC?というかスイッチがON/OFF両方のパターンを処理していないのでうまく動作するはずが無い。

すると、全ての回答が全文表示されます。

関連するQ&A