割り込みが曲者やった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