ここから本文です

解決済みの質問

C言語 マイコンにおけるif-else文の処理時間について。 普通にPC上でプログラムを...

xkvqhkbhnealさん

C言語
マイコンにおけるif-else文の処理時間について。

普通にPC上でプログラムを実行するのであれば処理時間による誤差はあまり考慮しなくても良いと思います。
しかし、マイコンでPWM波形を出した時(タイマを使用して時間管理しています)に、設定したデューティ比と実際に出力された波形のデューティ比に誤差がありました。
出力用の関数をwhile文の外に持って行くと、時間管理は出来ませんが設定した通りのデューティ比で波形が出力されていました。

デューティ比の誤差が無く、かつ時間管理も出来るようにするにはどうしたら良いのでしょうか?

補足
時間管理用のタイマ、PWM発生はそれぞれ別々のタイマを使用しています。

違反報告

ベストアンサーに選ばれた回答

quickbrwnfoxjumpsoverthelazydogさん

if-else文の、とかwhile文の、とか言われてもあまり意味のある情報が伝わって来ません。
> 出力用の関数をwhile文の外に持って行くと、時間管理は出来ませんが
う~ん、いったいどういう構成なんだろう。PWMはともかく、「時間管理」って何? なんとでも解釈できてなんだかわかりませんよ。

前提。
PWMのタイマはもちろん割り込みで処理していますね?
ポーリングで精度を追求するのはナンセンスですから。

さて。
問題となる誤差がどのくらいの周波数においてどのくらいなのか、というのにもよりますが、
・PWM専用のハードがあれば一番楽かつ正確
・PWMの方が大事なら時間管理のタイマよりもPWMのタイマの割り込み優先度を上げる
・割り込み時の処理はできるだけ小さく・簡潔に記述する
・ifの処理とelseの処理の時間をバランスさせる
・'誤差'が一定なら、初めからそれを見込んでタイミング設計する
なんていうあたりでいかがでしょう。

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 0点(5点満点中)0人が役に立つと評価しています。

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:C言語関連]

ただいまの回答者

01時40分現在

2341
人が回答!!

1時間以内に4,269件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する