アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
非常に基本的かも知れませんが、
プログラムによるチャタリング対策の
仕方がわかりません。

スイッチ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

お願いします。

A 回答 (2件)

普通「チャタリング」っていうとせいぜい数十ms くらいを想定するものだと思うんだけど....


0.5s~1s って, どんなチャタ?
ついでにいうと (聞いても答えられないような気はしますが)「長押しするとおかしな動作をする」といわれても, 「押し続ける時間」「期待する動作」「実際の動作」を示さないと解決できないかもしれませんよ.
    • good
    • 3

チャタリング防止の方法の考え方を書きます。


チャタリングは、最悪に長くて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両方のパターンを処理していないのでうまく動作するはずが無い。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!