横から失礼します。 白川さん> >CH1、CH2で時間を変えているのはおっしゃるとおりで6個のその時間 >に応じたPWM信号を作りたいからです。 3048FはITUが5CHありますから、素直にPWMモードで使えば一番簡単かと 思いますが、6CHだと不足しまう、あるいはITUを他の用途に使っているため このような方法を考えつかれたのかな?と思います。 制御対象が市販のラジコンのサーボであれば、パルスを与える周期は 概ね20msecに1回で、これ以下の周期にしてもモータの発熱が多くなり 逆に30msec程度では応答性や平均トルクが多少悪化します。 また、この周期は必ずしも正確に20msecでなくても実用的には問題ない はずです。ただ、最近のディジタルサーボではちょっと断言できませんが。 そこで、こんな方法ではどうでしょう? 使用するITUは1CHのみで、ITUの出力を時分割で6ケのサーボに振り 分ける方法です。 ハード的には、ITU出力(TIOCA端子)の先に6ケのANDゲートを用意して、 使っていない適当なI/O出力を使って、6ケのANDゲートの一つを選択します。 選択されたゲートの一つからはPWM信号がサーボに与えられます。 パルス幅は約1.5msec±0.4msecです。 使用するITUのGRBの周期を3〜4msecにします。 6x3=18msec or 6x4msec=24msecで6個のサーボへサイクリックに指令 パルスを与えることができます。 次にGRBのコンペアマッチ割り込みを許可しておきます。 これで、この周期で割り込みが入ります。 そして、この割り込みルーチンのなかで、出力先の切り替え、及び、 その出力先に対応したPWMのパルス幅をGRAに書き込んでやり、カウント を許可します。 但し、GRAに書き込む値はGRBより小さな値です。(取り説10-48参照) 先に投稿されたソースの方法では、CPUがITUのステータスフラグを常時 ポーリングしなければならず、他の処理を殆どすることができないため もったいない使い方かと思います。なるべく割り込みを使う方法が、寧ろ 簡単にできます。 鈴木(正)