[H8-ML(5010)] 2信号のインプットキャプチャ
From: "M.Noda" <tochan@xxxxxxxxxxx>
Date: 2004年10月26日(火)02時36分50秒
H8-MLの皆様、はじめまして。
今までずっとROMでした、のだと申します。

H8/3048F(AKI-H8)を使いまして、
ADXL202のパルス出力2軸分をITU1とITU2のインプットキャプチャで
取り込もうとしていますが、思った動作にならず難儀しております。
#ADXL202のパルス幅を取り込む話自体は過去にも流れていますが、
#最終的な答えを見つけられていません。
初歩的なミスかもしれませんが、皆様のお知恵をお貸しください。

ADXL202の出力は
X軸パルス出力をTIOCA1とTIOCB1、
Y軸パルス出力をTIOCA2とTIOCB2、
にそれぞれ接続しております。
オシロスコープで見る限りでは、パルス出力の周期は約4msです。
この入力に対して、H8側では、
立ち上がりでGRBキャプチャ、TCNTクリア、
立ち下がりでGRAキャプチャと設定し、
フリーランでパルスの長さを取り込もうとしています。

プログラムとしてはITU0で10ms毎の割り込みを発生させ、
そのたびにITU1.GRAとITU2.GRAの値をシリアルで送り出すようにしています。

ITU1.GRAの方は正常にHighの時間に相当する値(φ/8で0x1000前後)になるのですが、
ITU2.GRAの方はでたらめな値となってしまいます。
ITU1とITU2は独立に動作すると理解しているのですが、
このような使い方に何か問題があるのでしょうか?

以下、現在試しているプログラムのソースです。

#include "3048f.h"
#include "mytype.h"
#include "serial.h"

#pragma interrupt(intimia0)

int main(void){

	initio();	/* Serial port Initialize */
    
	PA.DDR = 0x00;

	ITU1.TCR.BYTE = 0xC3;		/* GRBでTCNTクリア */		
	ITU1.TIOR.BYTE = 0xCD;		/* 立ち下がりでGRAキャプチャ、立ち上がりでGRBキャプチャ */

	ITU2.TCR.BYTE = 0xC3;
	ITU2.TIOR.BYTE = 0xCD;

	ITU0.TCR.BYTE = 0x23;
	ITU0.GRA = 0x4e20;
	ITU0.TIER.BYTE = 0xF9;
	ITU.TSTR.BIT.STR1 = 1;
	ITU.TSTR.BIT.STR2 = 1;
	ITU.TSTR.BIT.STR0 = 1;

	while(1){
	}
}

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;
}

以上のようなプログラムで正常な動作を期待してよいでしょうか?
それとも根本的にITUの使い方を間違えているでしょうか?
よろしくお願いします。

----
M.Noda  tochan@xxxxxxxxxxx
スレッド概略
[表示中](起点)
 ├[5013(1)]
 ├[5014(2)]
 └[5027(3)]


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


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