Arduinoのハードウエア割り込みでデバイスAからの信号を読み込んでいます。
単体テストは正常に動作しますが、メインループに他のピンを HIGH/LOW する処理を追加すると、タイミングにより(余分な)割り込みハンドラ呼び出しが発生します。オシロで見ても割り込みピンへの入力波形に変化はなく、余分な割り込みが生じる理由がわかりません。
具体的には割り込みハンドラ関数が余分に多く呼び出されます(ハンドラ関数は attachInterrupt() で登録した以外に、自コード内で呼び出したりはしておりません)。
追加した処理(デバイスBのピンを HIGH/LOW する)の digitalWrite() をコメントアウトすると問題は生じなくなります。この処理が余分なハンドラ呼び出しを発生させる要因となっているのですが、どうしてそうなるのか? 直接の原因が分からず困っております。
デバイスA: クロック(2番 INPUT_PULLUP) データ(4番 INPUT_PULLUP)
デバイスB: コントロール(7番 OUTPUT)
ハンドラ関数は以下のように設定、
attachInterrupt(digitalPinToInterrupt(2), handler(), FALLING);
タイマー割り込み、シリアル通信は使用していません。入力ピンの信号変化が無い(オシロで確認済み)のに割り込みハンドラが呼び出される理由としてはどのようなものが考えられるでしょうか?
また、ボードを UNO から MEGA に換えて、割り込みピンを 18,19,20,21 などに変えると問題の発生タイミングや頻度が変わります。21番ではほとんど問題なく動きます。何が影響しているのか分かりません。
C言語プログラミングの経験は長いですが、Arduinoやハードには詳しくありません。
一般的に確認するべき点でも構いませんので、アドバイス頂ければ幸いです。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/12 09:10
2019/10/12 09:24
2019/10/12 11:04
2019/10/12 11:42
2019/10/12 12:24