• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:picへのフォトインタラプタ出力の入力)

フォトインタラプタ出力の入力に関する疑問

このQ&Aのポイント
  • フォトインタラプタ出力を使用してモータの回転数を計測するための回路を作成しています。
  • プログラム中のdelay_ms(2)を削除すると正確な計測ができなくなります。
  • 正確な計測を行うためには、どのようなプログラムを作成する必要があるのでしょうか?

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

  • ベストアンサー
noname#230359
noname#230359
回答No.2

 delay_ms(2); ディレイ=2ms だよって言う意味で 妄想しているが if( input_PIN(C4)==1){   delay_ms(2); 2ms のウエイト }//←これ忘れてるよ if(input_PIN(C4)==0{ 出力;2ms 相当の処理 } } タイミングが合わないと処理ができないんだと思う if( input_PIN(C4)==1){   //delay_ms(2); こうしちゃうと ウエイト 0 }//←これ忘れてるよ if(input_PIN(C4)==0{ 出力;2ms 相当の処理 } } こうしちゃうと 1のときと0のときのタイミングがずれて カウンターが暴走するんだと思う PICの仕様がわからないのでできるかどうかわからないが 普通は タイマーを使うよ http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html ↑ 難しい 危険だが do { //input_PIN(C4)==1 のときは loop しっぱなし } while(input_PIN(C4)==0); 出力; ↑ 危険 処理が開放されないので プログラム全体を見てね なるけど その後の処理時間中に抜けるのでならない 一番いいのは やはりタイマーを使って監視するのが一番正確 プログラム難易度は上がるけどね

noname#230358
質問者

お礼

do { //input_PIN(C4)==1 のときは loop しっぱなし } while(input_PIN(C4)==0);     出力; これでしたら、input_PIN(C4)==0 の場合は、ずっと出力状態にならないでしょうか? 無知で申し訳ありません。

その他の回答 (1)

noname#230359
noname#230359
回答No.1

出力をOFFするのはどこでしているのでしょうか。 そのまま出すだけなら if(input_PIN(C4)==1){ 出力OFF; } if(input_PIN(C4)==0{ 出力ON; } ではないでしょうか。 当然このプログラムが走る周期によって遅れはでます。 またチャタリングはハードのみで処理ということになります。 ちなみに(3150rev/min)は52.5パルス/sec デューティが50%として9.5msecのパルス幅になります。 このへんも確認しておいたほうがいいです。

noname#230358
質問者

お礼

早速のご回答ありがとうございます。 上記プログラムを試しましたが、カウントアップがかなりの低速になってしまいました... 出力はifの外でoffしています。