割り込みが曲者やったR8C/15でSSB

 

1.やっと、ええ結果がでました!

   コンペア1の 割り込みを使うと、余計なパルスが出るらしく、

これが、悪さをするようです。

割り込みを使うのを、止めました。

以前書きましたように、割り込みを使わないと

fsが、少し下がりますが(fs/4=4.18KHz)、問題ないと思います....

入力 2KHz(1.6Vp_p)

入力 1KHz(1.6Vp_p)

 

これより、

    キャリアサプレッションは    -55dB以上

    逆サイドサプレッションは    -45dB以上

と、結論いたします、    やったー! '(@_@)'

AFホワイトノイズ発生(150mVrmsしか出ない)を利用して

fs/4(4.18KHz)からの距離での、特性を見てみました。

大体、帯域は、こんなものでは、ないでしょうか? (Fsが下がった分、帯域が狭なったわ。)

ノイズフロアとの、レベル差が少ないのは、ホワイトノイズの出力が、小さいからです。(150mVrms)

これは、firの設計を調整しました。

修正前と比べて、帯域が少しだけ、広がりました。

                              修正前                                                                                 修正後

修正した、fir係数は、以下のようになりました。

/*; ----------------------------------------------------------
; Band(1) Low:0.00000 High:0.05150 R= -45.48977
; Band(2) Low:0.10150 High:0.21200 R= 4.604413E-02
; Band(3) Low:0.25000 High:0.50000 R= -45.48977
;Q14 60taps fs=4.18KHz----------------------------------------*/
-83,-48,24,46,
-6,3,129,190,
53,-94,-34,58,
-120,-395,-307,76,
175,-86,-24,600,
917,293,-390,-66,
424,-684,-2824,-2874,
600,4488,4488,600,
-2874,-2824,-684,424,
-66,-390,293,917,
600,-24,-86,175,
76,-307,-395,-120,
58,-34,-94,53,
190,129,3,-6,
46,24,-48,-83

プログラムは、fir係数の部分だけの、修正です。

これをやると(fir係数の修正)、シングルトーンの結果が、変わらんか、心配でしたが......

                              修正前                                                                                 修正後

変化は、僅かでした、よかった、ホッ。

キャリアサプレッションなんか、修正後は、-60dBは、あったりして....

よかったのか、どうか、複雑な心境です。

fs/2での折り返しの、スプリアスは、現在、-30dB位ですが、

これは、

2次ローパスフィルタを、もう2段(オペアンプ、もう一個)で、かなり改善されると、思います。(160dB/decade)

 

最終のプログラムは、以下のように、なりました。

tm1=200 と、

また、小細工が、必要でしたけんど、応援団長様、堪忍してー。

 

最終プログラムでは、全ての、割り込み設定を外し、

tm1=255と、

理論通りの設定で、ほぼ、ベストな結果がでました...ホッ。

スペアナTR4171は、修理に出ましたので、MS8606で、観察。(RBWは、300Hzが最高で、ちょっと寂しい)

2KHz(1.5Vp_p)

キャリアサプレッション

逆サイドバンドサプレッション

入力レベルを、もう0.5V、下げて、周波数も、少し上げて 2.5KHz(1Vp_)だと

きれいです....これが、本当の実力かも...

TR4171、早く、修理上がらんかな... もう、ちよっと、ええ値かも知れん...

 

 

それから、AD変換10ビットでも、プログラムできたのですが、

結果が、8ビットよりも悪いのです...不思議。

Q14,60taps 

入力 2KHz 200mVp_p (入力を小さくしないと、きれいに、ならない)

どうも、まだまだ、未完成ですわ。

 

 

2.最終プログラム

/***********************************************************************/
/* */
/* FILE :ssb_0.c */
/* DATE :Tue, Jun 21, 2005 */
/* DESCRIPTION :Main Program */
/* CPU TYPE :Other */
/* */
/* This file is generated by Renesas Project Generator (Ver.4.0). */
/* */
/***********************************************************************/

#include <asmmacro.h> 
#include "start.h" 

int fir[60]={

/*; ----------------------------------------------------------
; Band(1) Low:0.00000 High:0.05150 R= -45.48977
; Band(2) Low:0.10150 High:0.21200 R= 4.604413E-02
; Band(3) Low:0.25000 High:0.50000 R= -45.48977
;Q14 60taps  fs/4 = 4.98KHz------------------------------------*/

-83,-48,24,46,
-6,3,129,190,
53,-94,-34,58,
-120,-395,-307,76,
175,-86,-24,600,
917,293,-390,-66,
424,-684,-2824,-2874,
600,4488,4488,600,
-2874,-2824,-684,424,
-66,-390,293,917,
600,-24,-86,175,
76,-307,-395,-120,
58,-34,-94,53,
190,129,3,-6,
46,24,-48,-83

};

unsigned char i; 
int data[120]={0};
long total;
int data_ad;

void set_timerC(void);
void set_AD8(void);

void main(void)
{
i=0;

set_CLK20();

set_LED();

set_timerC();

set_AD8();

tcc00 = 1; //タイマCカウント制御開始ビットのセット
adst=1; //AD変換開始


while(1) 
{
while(adst==1); //center frq=4.98KHzになる

data_ad =ad - 0x80;

if( (i/2)%2 ) data_ad =-data_ad; 

data[119-i] = data[59-i] = data_ad;

total=rmpa_w(0, 60, fir, data+59-i);

total=total>>14;

tm0=(char)(total + 0x80); //13 cycles

if (++i==60)i=0;

adst=1; 
}

}

void set_timerC(void)
{

pd3_5=1; //P3_5をタイマCの出力に設定
p3_5=1; //初期値=1


tcc00=0;

tcc01=0; //タイマCカウントソース f1
tcc02=0;

tcc12=1; //タイマC カウンタリロード選択ビット 1

tcc13=1; //コンペア0選択ビット アウトプット=1

tcc14=0; //コンペア0一致で出力を L に設定
tcc15=1; 

tcc16=1; //コンペア1一致で出力を H にする
tcc17=1;

tcout5=1; //コンペア出力を  CMP1_2に設定


tm0=0; //カウンタ 初期値

tm1=255; //これで正常


}

void set_AD8(void)
{
pd1_1 =0; //p1_1 読み出しモード AN9
p1_1 =0; //初期値=0

ch2 =1; //AN9
ch1 =0;
ch0 =1;

md =0; //単発モード
adgsel0 =1; //Port1グループ選択
adcap =0; //ADSTビットで開始
cks0 =1; //f2を選択 cks1=0にする

bits =0; //8bit
cks1 =0;
vcut =1; //Vref接続

smp =1; //サンプルホールドあり
}

 

H.17.7.6