AD変換
H8/3664でのAD変換についての質問なのですが、このマイコンだと通常8つあるAD変換をスキャンモードで1度で4つまでしか処理できないのですが
グループ0のAN0とグループ1のAN4が同一レジスタで結果が格納されていると思われますが
この二つを1度に処理したいのですが、どのようなプログラムにすればいいのですか?
AD変換あたりのプログラムを抜粋したので、後半のAD.ADDRB をAN4のAD.ADDRAに変えた場合のプログラムを教えて下さい
char aflag=0; //割り込みフラグ
void main(void)
{
char carray0[20],carray1[20],carray2[20];
long ad_data_0,ad_data_1,arrey0,arrey1,ad0,ad1,t,G_data,A_data,hensa_now,hensa_mae,A_out_put;
int i;
timervset();
timeraset();
IO.PDR5.BYTE = 0xff; // ポート7の出力設定をあらかじめ1に設定
IO.PCR7 = 0x00; // ポート7を全て入力ポートに設定(タクトSW1,SW2,SW3)
IO.PCR5 = 0xff; // ポート5を全て出力ポートに設定
IO.PCR1 = 0xa0; // ポート1のP15,P17を出力ポートに
Init_rs(); //通信の初期化
AD.ADDRA=0;
AD.ADDRB=0;
AD.ADDRC=0;
AD.ADDRD=0;
//AD変換設定
//A/Dコンバータ設定
AD.ADCSR.BYTE = 0x33; // (0011 0011)*/ // スキャンモード,高速変換(70ステート),入力端子:AN0~AN3
set_imask_ccr(0); //割り込み可
while(1)
{
if(aflag==1){
aflag=0;
ad_data_0=AD.ADDRA >> 6; // 「>>」:シフト演算子(ビットを右に6ずらす)
ad0=ad_data_0*5000/1024;
LToStr(G_data,carray0);//グローブ角度表示
rs_puts("ch.0=");
rs_puts(carray0);
rs_crlf();
wait(1);
G_data=(ad0-2333)*(-0.0426);//グローブ角度
ad_data_1=AD.ADDRB >> 6; // 「>>」:シフト演算子(ビットを右に6ずらす)
ad1=ad_data_1*5000/1024;
LToStr(A_data,carray1);//アーム角度表示
rs_puts("ch.1=");
rs_puts(carray1);
rs_crlf();
wait(1);
お礼
ありがとうございます。 FORMレジスタ設定が間違っていました。