[H8-ML(5027)] Re: 2信号のインプットキャプチャ
From: 薪 <takigi@xxxxxxxxxxxxx>
Date: 2004年10月26日(火)20時26分56秒
鈴木@豊川です。

"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  ★☆☆☆☆年★☆★☆月★★☆★☆日
スレッド概略
[5010(R)](起点)
 └[表示中]
   └[5030(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]