• 締切済み

H8/3048、AD/DA変換プログラムについて。

H8/3048、AD/DA変換について質問です。 ポート7のAN0・AN1を入力に使い、DA0・DA1で出力される変換プログラムを作成して実験したところ AN0→DA0への変換は出力されたのですが、AN1→DA1への変換が出力できません。なぜ出力されないのかわかりません。 どうしたらいいか教えてください、お願いします。 AN0がDA1でも出力されているかと思いましたが違いました。 #include <no_float.h> #include <stdio.h> #include <machine.h> #include "h8_3048.h" void init (void); double get_ad0 (void); double get_ad1 (void); void out_da0 (double); void out_da1 (double); void wait (void); int main (void) { double ad0,ad1; int d; init(); //初期化 // set_ccr(0x00); //全体の割り込み許可 //AD DA変換----------- while(1){ ad0=get_ad0(); ad1=get_ad1(); for(d=0;d<1000;d++); out_da0(ad0); out_da1(ad1); } return 0; } void init(void) { /* ポートの入出力設定 */ P1DDR = 0xff; P2DDR = 0xff; P3DDR = 0xff; P4DDR = 0xff; P5DDR = 0xff; P6DDR = 0xf0; // CPU基板上のDIP SW P8DDR = 0xff; P9DDR = 0xf7; PADDR = 0xff; // LED基板 PBDDR = 0xff; // A/Dの初期設定(単一モード) AD_CSR = 0x00; // A/Dの初期設定(スキャンモード使用AN0-AN1) // AD_CSR = 0x11; //ITU0 1ms毎の割り込み ITU0_TCR = 0x20; ITU0_GRA = 24575; ITU0_IER = 0x01; ITU_STR = 0x01; // D/Aの初期設定 DA_CR=0xc0; //DA0E1,DA0E0:1 D/Aアウトプットネーブル DAE:0 ch0,1 独立制御 } double get_ad0(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRA>>6;// i=0-1023 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } double get_ad1(void) { int i; double ad; AD_CSR |=0x20; //ADST:1 AD開始 while(!(AD_CSR & 0x80)); //ADF:1 エンドフラグをチェック AD_CSR &=0x7f; i=AD_DRB>>6; //i=0-1024 ad=i*5.0/1024.0; // 0-1024 を 0-5vに変換 return ad; } void out_da0(double d) { DA_DR0=(int)(d*255/5.0); } void out_da1(double d) { DA_DR1=(int)(d*255/5.0); } void wait(void) { long Loop=200000; while(Loop--); }

みんなの回答

  • R32C
  • ベストアンサー率39% (115/290)
回答No.1

他にも原因があるかもしれませんが、 とりあえず、チャンネルセレクトされていない ようですね。

misudooo
質問者

お礼

チャンネル設定がコメントになってますね(^^; 解決しました。ありがとうございます

関連するQ&A