解決済みの質問
C言語 マイコンにおけるif-else文の処理時間について。 普通にPC上でプログラムを...
C言語
マイコンにおけるif-else文の処理時間について。
普通にPC上でプログラムを実行するのであれば処理時間による誤差はあまり考慮しなくても良いと思います。
しかし、マイコンでPWM波形を出した時(タイマを使用して時間管理しています)に、設定したデューティ比と実際に出力された波形のデューティ比に誤差がありました。
出力用の関数をwhile文の外に持って行くと、時間管理は出来ませんが設定した通りのデューティ比で波形が出力されていました。
デューティ比の誤差が無く、かつ時間管理も出来るようにするにはどうしたら良いのでしょうか?
- 補足
- 時間管理用のタイマ、PWM発生はそれぞれ別々のタイマを使用しています。
-
- 質問日時:
- 2012/1/30 20:43:00
- ケータイからの投稿
-
- 解決日時:
- 2012/2/14 10:08:08
-
- 回答数:
- 1
-
- お礼:
- 知恵コイン
- 100枚
-
- 閲覧数:
- 94
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
quickbrwnfoxjumpsoverthelazydogさん
if-else文の、とかwhile文の、とか言われてもあまり意味のある情報が伝わって来ません。
> 出力用の関数をwhile文の外に持って行くと、時間管理は出来ませんが
う~ん、いったいどういう構成なんだろう。PWMはともかく、「時間管理」って何? なんとでも解釈できてなんだかわかりませんよ。
前提。
PWMのタイマはもちろん割り込みで処理していますね?
ポーリングで精度を追求するのはナンセンスですから。
さて。
問題となる誤差がどのくらいの周波数においてどのくらいなのか、というのにもよりますが、
・PWM専用のハードがあれば一番楽かつ正確
・PWMの方が大事なら時間管理のタイマよりもPWMのタイマの割り込み優先度を上げる
・割り込み時の処理はできるだけ小さく・簡潔に記述する
・ifの処理とelseの処理の時間をバランスさせる
・'誤差'が一定なら、初めからそれを見込んでタイミング設計する
なんていうあたりでいかがでしょう。
- 違反報告
- 回答日時:2012/1/31 13:07:05
この質問は投票によってベストアンサーが選ばれました!
- この質問・回答は役に立ちましたか?
- 役に立った!
お役立ち度:
0人が役に立つと評価しています。

