> > 3)メインルーチンのWhile文内でパルス幅用のGRAの更新が > > どこにもないのでパルス幅が変化しない。 > > このGRAの更新の仕方は、 > ITU0.GRA = 0 > でいいのでしょうか? PWMモードは、マニュアル頁10-48のように2つの方法があります。 どちらを使っても構いませんが、例えば上の図のように出力させたい 場合は、 ・GRAにはPWMの繰り返し周期を設定します。例えば、分周をφ/8 で20msecの周期にしたければ、16MHZ/8*20msec=40000を GRAに設定します。(厳密には更に40000-1とする) この値は、通常は変化させる必要がないので、初期化で1回だ け設定すればOKです。 また、GRAのカウンタクリア条件をGRAのコンペアマッチでクリア しておくことも忘れないで下さい。(プログラムでは落ちています) ・次にGRBの値によってパルス幅が決まります。例えばGRB=20000 とすれば、GRAの半分になりますから10msec幅のパルスが、繰り 返し周期20msecで常に出力されます。 尚、GRBの値を0としないこと、更にGRB>GRAとすると、コンペア マッチが発生しませんから、パルスはでなくなります。 従って、この場合はGRBの値を書き換えれば、それに応じたパルス幅 が出力されることになりますから、加速度センサから得られたデータcnt0 をGRBに与えれば良いことになります。ですから、この書き込みをメイン ルーチンで行うなら、石山さんの場合はWhile文のループ内に無ければ ならないことになります。 マニュアルの下の図のように出力したい場合もGRAとGRBを逆にして 考えれば良いのですが、注意するのはGRA=GRB-cnt0としないと、パ ルス幅の長短が逆転します。 投稿されたプログラムでは、更に以下の点を修正しないとうまくいきません。 1)インプットキャプチャ割り込みの設定で、IMFBも許可していますが、 この割り込みは発生しませんし、該当する割り込みルーチンが存在 しないため、ノイズ等で割り込みが発生すると暴走します。 パルスの両エッジで割り込みを許可する場合は、GRAのインプット キャプチャですからIMFAフラグしか使いません。 2)メインルーチンの } が落ちています。 こんな説明でわかりますか? 答えを書くのは簡単ですが、苦労して動いたときの喜びを奪うことになり ますので・・・・ 鈴木(正) --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.564 / Virus Database: 356 - Release Date: 2004/01/19