
こんにちは。
非常に基本的かも知れませんが、
プログラムによるチャタリング対策の
仕方がわかりません。
スイッチ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
お願いします。
No.1ベストアンサー
- 回答日時:
普通「チャタリング」っていうとせいぜい数十ms くらいを想定するものだと思うんだけど....
0.5s~1s って, どんなチャタ?
ついでにいうと (聞いても答えられないような気はしますが)「長押しするとおかしな動作をする」といわれても, 「押し続ける時間」「期待する動作」「実際の動作」を示さないと解決できないかもしれませんよ.
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が見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPU負荷率の安全な上限と計...
-
電車で待機列の割り込みについ...
-
sleep関数の原理について
-
割り込みの衝突
-
定周期での割り込み
-
volatileについて
-
Macターミナルで実行中のプログ...
-
TCP/IP通信時のサーバーからの受信
-
Excel(VBA)でSetTimer関数を使...
-
AIXでのプロセス使用メモリの最...
-
C# シリアル通信でデータ受信...
-
FOM出版の公認テキスト&問題集...
-
メッセージボックスのボタン名変更
-
powershell を使いカレントディ...
-
Windows上で、シグナル(SIGTERM...
-
プロセスIDの取得方法について
-
エクセルVBA 大容量CSVファイル...
-
UdpClient 送信元のIPアドレ...
-
vb.netでEXCEL起動がうまくでき...
-
アプリケーションが終了するま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
CPUの処理量を減らすコーデ...
-
スーパーのレジで並んでいたら...
-
このレジの並び方は間違ってま...
-
Amazonfireタブレットにわから...
-
CPU負荷率の安全な上限と計...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
VB6でSendKeyを利用したTab移動...
-
irqbalance って
-
インバウンドで迷惑している人...
-
VB.NET スレッドからのイベント...
-
デュアルCPUのパソコンでCPUを1...
-
Timerコンポーネントのインター...
-
C言語でPICマイコン開発
-
Arduinoのプログラムで質問です。
-
マイコンSH-2の割り込みを用い...
-
H8マイコンでの割り込み(シリ...
-
優先度順方式とプリエンプショ...
-
マイコン C言語 割り込み処理...
おすすめ情報