鈴木@豊川です。
"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 ★☆☆☆☆年★☆★☆月★★☆★☆日