H8マイコンのDA変換機能について
今、H8マイコンの3048Fをつかっています。マイコンを扱うのは全くの初心者で昔、電子工作でラジオを作ったりしたことがある程度です。
そこで、『C言語によるH8マイコンプログラミング入門』という本を参考に一つずつプログラムを打ち込みながら試しているところです。
そこにある、D/A変換を使ってサインカーブを出力する、プログラムを試そうとしてつまづいています。添付データの様な出力になり、期待に反しています。なぜ、こうなるか分からなくて何かアドバイス頂けないでしょうか?
以下、そのプログラムです。
//タイマ割り込みによるD/Aコンバータの出力
//ITU0使用
//200Hzのサインウェーブを出力する
//da_3.c
#include <3048.h> //3048、3052の内部I/O定義
int c; //1サイクルの出力回数、外部変数とする
unsigned int sindata[128] = {127,133,139,146,152,158,164,170, //出力データ
176,181,187,192,198,203,208,212,
217,221,225,229,233,236,239,242,
244,247,249,250,252,253,253,254,
254,254,253,253,252,250,249,247,
244,242,239,236,233,229,225,221,
217,212,208,203,198,192,187,181,
176,170,164,158,152,146,139,133,
127,121,115,108,102,96,90,84,
78,73,67,62,56,51,46,42,
37,33,29,25,21,18,15,12,
10,7,5,4,2,1,1,0,
0,0,1,1,2,4,5,7,
10,12,15,18,21,25,29,33,
37,42,46,51,56,62,67,73,
78,84,90,96,102,108,115,121};
void ituinit(void) //ITUイニシャライズ
{
ITU0.TCR.BIT.CCLR = 1; //カウンタクリア要因
ITU0.TCR.BIT.TPSC = 0; //16MHz 周期 0.0625μs
ITU0.GRA =900; //200Hz 周期 5ms、1サイクルの出力数 128、 周期 5/128=0.0390625ms
//0.0390625ms=39.0625μs、39.0625/0.0625=625
ITU0.TIER.BIT.IMIEA = 1; //IMFAフラグによる割り込み許可
}
void dainit(void) //D/Aコンバータイニシャライズ
{
DA.DACR.BIT.DAOE0 = 1;
DA.DACR.BIT.DAE = 0;
}
//ITUインターバルタイマ割り込み
void int_imia0 (void)
{
ITU0.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア
DA.DADR0 = sindata[c]; //サイン波形データ出力
c+=1;
if(c>128)
c=0;
}
int main(void)
{
ituinit();
dainit();
ITU.TSTR.BIT.STR0 = 1; //タイマスタート
c=0; //割り込み回数
EI; //割り込み許可
while (1); //何もしない
}
お礼
回答頂きありがとうございました。 いろいろとあるのですね。マニュアルを確認していきます。