/***********************************************************************/
/* */
/* FILE :ad_da.c */
/* DATE :Thu, Nov 27, 2003 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.3.0). */
/* */
/***********************************************************************/
//AD変換した値を、2回毎に反転し、DSB波形を得る
#include "7047s.h"
#ifdef __cplusplus
//#include <ios> // Remove the comment when you use ios
//int ios_base::Init::init_cnt; // Remove the comment when you use ios
#endif
#ifdef __cplusplus
extern "C" {
#endif
void abort(void);
#ifdef __cplusplus
}
#endif
short data;
void InitSH(void)
{
PFC.PECRL1.WORD=0;
PFC.PECRL2.WORD=0;
PFC.PEIORL.WORD=0xFFFF;//PE I/O 書き出しモード
PFC.PACRL2.WORD=0;
PFC.PAIORL.WORD=0xFFFF;
PFC.PBCR1.BIT.PB5MD=0; //PB=出力
PFC.PBCR2.BIT.PB5MD=0;
PFC.PBCR1.WORD=0;
PFC.PBIOR.BIT.B5=1;
PFC.PBIOR.WORD=0XFFFF;
PFC.PDIORL.WORD=0xFFFF;
MST.CR2.BIT._AD0=0; // この設定がないと、AD変換器が動かない
AD0.ADCR.BIT.ADST=0;
AD0.ADCR.BYTE=0;
AD0.ADCSR.BYTE=0;
AD0.ADCR.BIT.CKS=0x3;
AD0.ADCR.BIT.ADST=1; //start AD
}
unsigned char i=0;
void main(void)
{
InitSH();
while(1)
{
PE.DRL.BIT.B12=1; //DA変換器用タイミング
if (AD0.ADCSR.BIT.ADF)
{
AD0.ADCSR.BIT.ADF=0;
AD0.ADCR.BIT.ADST=0;
data=AD0.ADDR0.WORD; //AD変換後の値を取り込む
data -=0x8400; //8400=無入力時の値
data=data>>6; //上位10ビットが有効
((i/2)%2) ? (data=2*data) : (data=-2*data); //2回毎に反転し、2倍する
i++;
data +=0x200; //DA変換器の中点は0x200(10進で=512)
PE.DRL.WORD =data;
AD0.ADCR.BIT.ADST=1;
}
PE.DRL.BIT.B12=0; //DA変換器用タイミング
}
}
void abort(void)
{
}
特殊な所は、ありません。
解りにくい所は
((i/2)%2) ? (data=2*data) : (data=-2*data); //2回毎に反転し、2倍する
では、ないでしょうか?
i は、
unsigned char i=0;
と、定義していますが、整数であれば、なんでもOKです。
表にすると、わかりやすいです。
ですので、
2回毎に、0と1を繰り返しています。
先ほどの式は、以下と、等価です。
if (( (i/2)%2 ) == 1 ) then data=2*data;
else data= - 2*data;
そんな訳で、2回毎に、入力が反転いたします。
((i/4)% 2)とすれば、 4回ごとに、符号を反転することが、できますね。
前述のプログラムでは、2回毎に、入力の符号を反転して、DSBを得ていましたから
サンプリング周波数は、実測によると
27.9KHz x 4倍 =111.6KHz
に、なります。
firフィルタを導入すれば、もっと、サンプリング周波数が、下がると思いますが
まだ、SH7047Fのシステムクロックを、
最高49.152MHzの半分、24.576MHzで使っていますので
余裕があります。(P周辺I/Oクロックは、どちらも、同じで 24.576MHzです。)
10ビットDACで、果たして、fir フィルタの60dBの差を観察できますか、どうか?
あかんかったりして...泣くで、もう...
これが済めば、信号の複素化に進めるんですが...
H.15.12.15
This document created by Scientific Notebook 4.1. この文書は次の製品で作成しました Scientific Notebook 4.1.