このQ&Aは役に立ちましたか?
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)を消去したプログラムでは、全く出力されません。
どういった理由からこのような現象になるのでしょうか?
また、間の待ち時間をなくしても正確に回転数を計測できるようなプログラムがおわかりの方はいらっしゃいますでしょうか?
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);
出力;
↑
危険 処理が開放されないので
プログラム全体を見てね
なるけど
その後の処理時間中に抜けるのでならない
一番いいのは
やはりタイマーを使って監視するのが一番正確
プログラム難易度は上がるけどね
このQ&Aは役に立ちましたか?
この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。
出力を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しています。
関連するQ&A
三相誘導電動機・無負荷運転時の電流値が高い理由は?
三相誘導電動機・無負荷運転時の電流値が高くなる原因について教えて下さい。 現在下記の三相誘導電動機(モーター)があります。 **********...
ボリューム回路と単電源オーディオアンプの接続
電子ボリュームIC LM1972Mと、モノラルオーディオパワーアンプLA4902の接続についての質問です。 どちらも秋月電子にて取り扱いのある製品です。 電源...
アナログ信号出力にはなぜ電圧出力と電流出力
アナログ信号出力にはなぜ電圧出力と電流出力の2つが用いられているのでしょうか
アナログ入力をマイコンに入力しUSBでパソコンへ
現在電圧、電流をパネルメータで計測しており、その出力にアナログ電圧が出ている計測器があります。この出力電圧をパソコンに取り込む為にインターフェイスをUSBでと考...
スピーカー出力でリレー駆動
チャイムのスピーカー用の出力でリレーを駆動させたいのですがAC、DCどちらのレリーを直接つないでもでも動きません。自己保持せずに接点が一瞬でも入ればチャタリング...
ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。
お礼
2010/03/04 20:05
do
{
//input_PIN(C4)==1 のときは loop しっぱなし
} while(input_PIN(C4)==0);
出力;
これでしたら、input_PIN(C4)==0 の場合は、ずっと出力状態にならないでしょうか?
無知で申し訳ありません。