[H8-ML(2037)] Re: A/D 変換とシリアル通信について
From: hamayan <hamayan@xxxxxxxxxxxxxxxx>
Date: 2002年07月05日(金)22時47分35秒
hamayan です。

kouichi_nk> はじめまして。H8についていろいろ探しているとココにたどり着きました。
kouichi_nk> 現在、初めて手にしたマイコンと奮闘中です。

まずターゲットは何でしょう?
丁度2、3日前に作成したTINY 3664用のA/D変換処理が有るので文書が長くなって申し訳
ないのですが掲載しちゃいますね。まあ、ソフトウエアって人まねから始めるものですし、
TINY以外のCPUでも融通が利くはずですから。
その前にH8のA/Dコンバーターは一度に変換できるのは4chまでと言う事は既にご存知ですね。
所望の変換モードに設定したら変換スタートbitをsetする事でスキャンモードなら一気に4ch
変換してくれます。
また変換が完了したらそれを割り込みで知らせてくれるのでその割り込み中でデータを取り込
んだら後半の4chのスキャンモードをset、A/D変換スタートの手順になります。
なお一定周期の変換を行う時はADTRG端子に一定周期のタイミングを入れてやれば良いのです。
下記のプログラムはTIMER Vで4ms周期のタイミングを生成してADTRG端子に接続しています。
厳密に言えば前半と後半のA/D変換値に時間差が生じているのでそれを嫌うなら外付けでサンプ
ルホールド回路が必要でしょう。
なお、割り込みを使ったシリアルのコードを載せると本当に長くなってしまうので
http://www19.u-page.so-net.ne.jp/tc5/hamayan/hos-sh/hos_tiny.html
中にソースのアーカイブが有りますのでそれを参考にして見てください。

/********************************************************************/
/*	A/D割込み処理													*/
/*	A/D変換はADCSR.BIT.ADST = 1でも開始します	*/
/*	このプログラムはITRON上に実装しているのでA/Dデータ取り込み	*/
/*	後の処理は関数wup_tskで該当TASK(処理)を起動してそこで行っている	*/
/********************************************************************/
/*グローバル領域にバッファを設ける*/
unsigned int	ad_buf[ 8 ];
#define		AN3		3
#define		AN7		7

void AD_Int( void ){
	static int		count = 0;
	unsigned int 	*ad;
	unsigned int 	*buf;

	ADCSR.BIT.ADF = 0;					/*変換ステータスのクリア*/
	ADCSR.BIT.ADST = 0;					/*A/D変換停止*/
	ad = (unsigned int *)&ADDRA;
	if( ADCSR.BIT.CH == AN3 ){
		ADCSR.BYTE = 0x58 | AN7;		/*AN?をスキャンモードに設定、割り込みを許可、変換時間は70ステート*/
		ADCSR.BIT.ADST = 1;				/*A/D変換スタート*/
		buf = &ad_buf[ 0 ];
	}
	else{
		if( ++count == 125 ){			/*500ms周期を造る*/
			count = 0;
			wup_tsk( TID_AD );			/*AD TASKの再開*/
		}
		buf = &ad_buf[ 4 ];
		ADCSR.BYTE = 0x58 | AN3;		/*AN?をスキャンモードに設定、割り込みを許可、変換時間は70ステート*/
	}
	while( ad <= (unsigned int *)&ADDRD ) *buf++ = *ad++ >> 6;

	ret_int();						/*割込みからの復帰*/
}

------------------------------------------------------------
hamayan
	so-net:hamayan@xxxxxxxxxxxxxxxx
	でもso-netはケチでメールBOXの容量少ないので
	添付FILEのある時は
	AIRNET:hamayan@xxxxxxxxxxxxxxx
	に送ってね。

スレッド概略
[2034(R)](起点)
 └[表示中]


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


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