鈴木@豊川です。 "M.Noda"さんは書きました... > ITU1.GRAの方は正常にHighの時間に相当する値(φ/8で0x1000前後)になるのですが、 > ITU2.GRAの方はでたらめな値となってしまいます。 > ITU1とITU2は独立に動作すると理解しているのですが、 > このような使い方に何か問題があるのでしょうか? ソフトウェアが正常に動作していると仮定すると、 上記現象は次のように理解できます。 --- --- --- TIOCA2には正常に信号が入力されおり、立下りでGRAにインプットキャプチャされる。 しかし、TIOCB2に正しく信号が入力されていないため、GRBにインプットキャプチャと TCNTのクリアが起こらない。 カウンタは0〜0xFFFFをフリーランしており、カウンタと同期の取れていない センサ信号の立下りで、その時々のカウンタの値がGRAに入るので、 ランダム値になり、動作してないように見える。 --- --- --- 一度、ハードウェアの方も疑ってみたらどうでしょうか? @本当にセンサの信号がMCUのピンまで伝わっているか、 @MCUのTIOCB2の端子が壊れていないか、 etc. 他の方も書かれていますが、 このセンサは、一周期の時間とHiの時間の比率で 加速度がわかるセンサなので、GRA,GRBの両方の情報が必要です。 本当に正確に測定したいときは、割り込みで行い、 大体で良いときは、割り込みでなくても良いと思います。 (一周期の時間はそれほど激しく変化しないでしょうから・・・) ((仕事なら割り込みかなぁ・・・)) > void intimia0(void){ > unsigned int counterx; > unsigned int countery; > > counterx=(ITU1.GRA); > countery=(ITU2.GRA); > outch((short)(counterx >> 8)); > outch((short)(counterx & 0xff)); > outch((short)(countery >> 8)); > outch((short)(countery & 0xff)); > crlf(); > > ITU0.TSR.BIT.IMFA = 0; > } 細かいことですが、、、 H8/3048の説明書から抜粋(10-31ページあたり) >> >>[クリア条件] >>IMFA=1 の状態で、IMFA フラグをリードした後、IMFA フラグに0 をライトしたとき とのことなので、例えば、 if( ITU0.TSR.BIT.IMFA==1 ) ITU0.TSR.BIT.IMFA = 0; の様にしたほうが良いかもしれません。 +--------- --------- --------- --------- --------- ---------+ from Makio Suzuki ★☆☆☆☆年★☆★☆月★★☆★☆日