サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
すぐに回答を!

picへのフォトインタラプタ出力の入力

2010/03/04 19:01

現在、フォトインタラプタの入力をpicに入力してからカウンターに出力する回路を作成しています。
フォトインタラプタでモータの回転数(3150rev/min)を数えています。

この時ccs社のコンパイラを使用して以下のようなプログラムを作成しました。

if(input_PIN(C4)==1){
  delay_ms(2);
if(input_PIN(C4)==0{
出力;
}
}

上記のdelay_ms(2)があれば製作に計測できますが、delay_ms(2)を消去したプログラムでは、全く出力されません。
どういった理由からこのような現象になるのでしょうか?
また、間の待ち時間をなくしても正確に回転数を計測できるようなプログラムがおわかりの方はいらっしゃいますでしょうか?

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

ベストアンサー
2010/03/04 20:02
回答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);
出力;

危険 処理が開放されないので

プログラム全体を見てね

なるけど
その後の処理時間中に抜けるのでならない

一番いいのは
やはりタイマーを使って監視するのが一番正確
プログラム難易度は上がるけどね

お礼

2010/03/04 20:05

do
{
//input_PIN(C4)==1 のときは loop しっぱなし
} while(input_PIN(C4)==0);
    出力;


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

noname#230358 質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (2件中 1~2件目)

2010/03/04 19:19
回答No.1

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

お礼

2010/03/04 20:02

早速のご回答ありがとうございます。

上記プログラムを試しましたが、カウントアップがかなりの低速になってしまいました...

出力はifの外でoffしています。

noname#230358 質問者

関連するQ&A

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。