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