プロが教えるわが家の防犯対策術!

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

A 回答 (1件)

他にも原因があるかもしれませんが、


とりあえず、チャンネルセレクトされていない ようですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/17 18:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!