本計劃實現了 HOY 無線測試平台射頻收發機 Version_3 系統,36 套無線收發平台;在 Version_3 FSK 接收並未啟動自動掃頻與自動頻 率校正功能,乃是採用頻率劃分方式,從 2.4GHz~2.5GHz 每 20MHz 設 定ㄧ個通道,利用分頻方式來避免干擾;ASK 則是用手動調整程式化 數位衰減器來控制 ASK 輻射功率大小;以這樣的方式來避免干擾的發 生在目前 Version_3 是可以行的通,但是未來 DUT 晶片下線回來後 DUT 的 Carrier 為 2.4GHz~2.5GHz 頻帶中任意的可能頻率,且頻率會 隨時間做不確定的漂移,這個時候就必須啟動自動掃頻與自動頻率校
正功能;當啟動自動掃頻與自動頻率校正功能 FSK 的干擾情況勢必更 加嚴重,就目前的情況來看似乎是只有拉近 ATE 與 DUT 天線間的距 離,來減少輸出天線輻射功率的強度,以減低感擾的發生。
但是就未來計劃的最終目標 Wireless IC Test,在晶圓與 Probe 卡的測試階段這樣的干擾勢必更加明顯嚴重,如果可以設法在系統當 中加入標籤辨識,來識別接收到的資料是否是對應的且正確的,理論 上將可以減低資料錯誤與干擾的機會,這將是在未來很大的挑戰與改 進的空間。
ATE MCU C 語言程式附錄[7]
#include<c8051F320.h>//載入標頭檔
//=======SB 宣告=====================================
bit Timer200HzDelay(int); //宣告偵測 250KHz 副程式傳入傳回值 void delay(int); //宣告延遲副程式傳入傳回值
void system_initial(void); //宣告系統初始化副程式傳入傳回值 void SYSCLK_Init(void);//宣告系統時脈初始化副程式傳入傳回值 void PORT_Init(void); //宣告接腳規劃副程式傳入傳回值 void Synthesizer_Init(void);//宣告頻率合成器控制初始化副程 //式傳入傳回值
void Synthesizer(int); //宣告頻率合成器控制副程式傳入傳回值 //==========MAX2059================================
void DVGA_Init(void); //宣告數位式衰減器初始化副程式傳入傳回 值
void DVGA(int); //宣告數位式衰減器控制副程式傳入傳回值 //==========MAX2059=================================
void ADC_INT(void); //宣告 8051 內部 ADC 初始化副程式傳入傳回 值
int adc(unsigned char);//宣告 ADC 副程式傳入傳回值
int compressioncompare(void);//宣告 AGC 增益比較副程式傳入傳 回值
void codecompare(void);//宣告 AGC 增益控制副程式傳入傳回值 void AGC(void);//宣告 AGC 控制副程式傳入傳回值
void AFC_big(void);//宣告 AFC 頻率微調控制副程式傳入傳回值 void AFC_small(void);//宣告 AFC 頻率粗調控制副程式傳入傳回值 //=========GLOBLE(全域宣告)===//宣告程式中會用到的變數性質 //(在所有副程式中都適用)
int T200HzTimer,count_nu;//宣告 T200HzTimer,count_nu 為整數變 //數
int n_channel,ATTENUATOR,n_counter,a,b,c,d;// 宣 告 //n_channel,ATTENUATOR,n_counter,a,b,c,d 為整數變數
int newgain,oldgain,gaincompression;// 宣 告 //newgain,oldgain,gaincompression 為整數變數
unsigned adval;//宣告 adval 為無號整數
unsigned char value,port_nu;//宣告 value,port_nu 為無號字元 int agc_value,afc_value;//宣告 agc_value,afc_value 為整數變數 sbit CLK=P0^3;//sbit 位元 1 範圍 0~1;宣告 CLK 代表 8051 Port0.3
sbit LE=P0^5;//宣告 LE 代表 8051 Port0.5 sbit DATA=P0^4;//宣告 DATA 代表 8051 Port0.4
//==========MAX2059 用到 8051 腳位====================
sbit ACLK=P2^3;//宣告 ACLK 代表 8051 Port2.3 sbit ALE=P2^5;//宣告 ALE 代表 8051 Port2.5 sbit ADATA=P2^0;//宣告 ADATA 代表 8051 Port2.0
//==========MAX2059 用到 8051 腳位=====================
sbit P2_1=P2^1;//宣告 P2_1 代表 8051 Port2.1 sbit P2_2=P2^2;//宣告 P2_2 代表 8051 Port2.2 sbit P2_4=P2^4;//宣告 P2_4 代表 8051 Port2.4 sbit P2_6=P2^6;//宣告 P2_6 代表 8051 Port2.6 sbit P2_7=P2^7;//宣告 P2_7 代表 8051 Port2.7 sbit P0_0=P0^0;//宣告 P0_0 代表 8051 Port0.0 sbit P0_1=P0^1;//宣告 P0_1 代表 8051 Port0.1 sbit P0_2=P0^2;//宣告 P0_2 代表 8051 Port0.2
//==========MAX2059 SPI 介面填入 16 進位數值 Table 開頭===
code AInput[63]= {0x003FF\
,0x003DF\
,0x003BF\
,0x0039F\
,0x0037F\
,0x0035F\
,0x0033F\
,0x0031F\
,0x002FF\
,0x002DF\
,0x002BF\
,0x0029F\
,0x0027F\
,0x0025F\
,0x0023F\
,0x0021F\
,0x001FF\
,0x001DF\
,0x001BF\
,0x0019F\
,0x0017F\
,0x0015F\
,0x0013F\
,0x0011F\
,0x00FF\
,0x00DF\
,0x00BF\
,0x009F\
,0x007F\
,0x005F\
,0x003F\
,0x001F\
,0x001E\
,0x001D\
,0x001C\
,0x001B\
,0x001A\
,0x0019\
,0x0018\
,0x0017\
,0x0016\
,0x0015\
,0x0014\
,0x0013\
,0x0012\
,0x0011\
,0x0010\
,0x00F\
,0x00E\
,0x00D\
,0x00C\
,0x00B\
,0x00A\
,0x009\
,0x008\
,0x007\
,0x006\
,0x005\
,0x004\
,0x003\
,0x002\
,0x001\
,0x000};
//==========MAX2059 SPI 介面填入 16 進位數值 Table 結尾===
//宣告程式中會用到的變數性質(在所有副程式中都適用)
int bdata flag;// bdata:位元定址的內部資料記憶體 16byte //0x20~0x2f
sbit flag_250k=flag^0;//宣告 flag_250k 代表旗標 0,資料型態為 sbit
//==LMX2326 Synthesizer SPI 介面填入 16 進位數值 Table 開頭====
long code Input[303]= {0x000060, 0x103F51, 0x000282\
,0x000060, 0x103F59, 0x000282\
,0x000060, 0x103F61, 0x000282\
,0x000060, 0x103F69, 0x000282\
,0x000060, 0x103F71, 0x000282\
,0x000060, 0x103F79, 0x000282\
,0x000060, 0x103F81, 0x000282\
,0x000060, 0x103F89, 0x000282\
,0x000060, 0x103F91, 0x000282\
,0x000060, 0x103F99, 0x000282\
,0x000060, 0x103FA1, 0x000282\
,0x000060, 0x103FA9, 0x000282\
,0x000060, 0x103FB1, 0x000282\
,0x000060, 0x103FB9, 0x000282\
,0x000060, 0x103FC1, 0x000282\
,0x000060, 0x103FC9, 0x000282\
,0x000060, 0x103FD1, 0x000282\
,0x000060, 0x103FD9, 0x000282\
,0x000060, 0x103FE1, 0x000282\
,0x000060, 0x103FE9, 0x000282\
,0x000060, 0x103FF1, 0x000282\
,0x000060, 0x103FF9, 0x000282\
,0x000060, 0x104001, 0x000282\
,0x000060, 0x104009, 0x000282\
,0x000060, 0x104011, 0x000282\
,0x000060, 0x104019, 0x000282\
,0x000060, 0x104021, 0x000282\
,0x000060, 0x104029, 0x000282\
,0x000060, 0x104031, 0x000282\
,0x000060, 0x104039, 0x000282\
,0x000060, 0x104041, 0x000282\
,0x000060, 0x104049, 0x000282\
,0x000060, 0x105051, 0x000282\
,0x000060, 0x104059, 0x000282\
,0x000060, 0x104061, 0x000282\
,0x000060, 0x104069, 0x000282\
,0x000060, 0x104071, 0x000282\
,0x000060, 0x104079, 0x000282\
,0x000060, 0x104081, 0x000282\
,0x000060, 0x104089, 0x000282\
,0x000060, 0x104091, 0x000282\
,0x000060, 0x104099, 0x000282\
,0x000060, 0x1040A1, 0x000282\
,0x000060, 0x1040A9, 0x000282\
,0x000060, 0x1040B1, 0x000282\
,0x000060, 0x1040B9, 0x000282\
,0x000060, 0x1040C1, 0x000282\
,0x000060, 0x1040C9, 0x000282\
,0x000060, 0x1040D1, 0x000282\
,0x000060, 0x1040D9, 0x000282\
,0x000060, 0x1040E1, 0x000282\
,0x000060, 0x1040E9, 0x000282\
,0x000060, 0x1040F1, 0x000282\
,0x000060, 0x1040F9, 0x000282\
,0x000060, 0x104101, 0x000282\
,0x000060, 0x104109, 0x000282\
,0x000060, 0x104111, 0x000282\
,0x000060, 0x104119, 0x000282\
,0x000060, 0x104121, 0x000282\
,0x000060, 0x104129, 0x000282\
,0x000060, 0x104131, 0x000282\
,0x000060, 0x104139, 0x000282\
,0x000060, 0x104141, 0x000282\
,0x000060, 0x104149, 0x000282\
,0x000060, 0x104151, 0x000282\
,0x000060, 0x104159, 0x000282\
,0x000060, 0x104161, 0x000282\
,0x000060, 0x104169, 0x000282\
,0x000060, 0x104171, 0x000282\
,0x000060, 0x104179, 0x000282\
,0x000060, 0x104181, 0x000282\
,0x000060, 0x104189, 0x000282\
,0x000060, 0x104191, 0x000282\
,0x000060, 0x104199, 0x000282\
,0x000060, 0x1041A1, 0x000282\
,0x000060, 0x1041A9, 0x000282\
,0x000060, 0x1041B1, 0x000282\
,0x000060, 0x1041B9, 0x000282\
,0x000060, 0x1041C1, 0x000282\
,0x000060, 0x1041C9, 0x000282\
,0x000060, 0x1041D1, 0x000282\
,0x000060, 0x1041D9, 0x000282\
,0x000060, 0x1041E1, 0x000282\
,0x000060, 0x1041E9, 0x000282\
,0x000060, 0x1041F1, 0x000282\
,0x000060, 0x1041F9, 0x000282\
,0x000060, 0x104201, 0x000282\
,0x000060, 0x104209, 0x000282\
,0x000060, 0x104211, 0x000282\
,0x000060, 0x104219, 0x000282\
,0x000060, 0x104211, 0x000282\
,0x000060, 0x104219, 0x000282\
,0x000060, 0x104231, 0x000282\
,0x000060, 0x104239, 0x000282\
,0x000060, 0x104241, 0x000282\
,0x000060, 0x104249, 0x000282\
,0x000060, 0x104251, 0x000282\
,0x000060, 0x104259, 0x000282\
,0x000060, 0x104261, 0x000282\
,0x000060, 0x104269, 0x000282\
,0x000060, 0x104271, 0x000282};
//==LMX2326 Synthesizer SPI 介面填入 16 進位數值 Table 結尾====
void main(void) //宣告主程式開始 {
system_initial();//呼叫系統初始化副程式 while(1)//進入無窮迴圈
{
P2_1=0;//8051 Port2.1 輸出 0,告訴 Baseband 系統尚未找到 DUT //送來的訊號(unlock)
P2_2=0;//8051 Port2.2 輸出 0,告訴 Baseband 系統尚未準備 //好(unready)
P1=0x00;//8051 Port0.1~0.4 輸出 0,AGC 增益調整為-16dBm //=======不使用掃頻,指撥開關控制 ATE LO 頻率===========
if(P0_0==0&&P0_1==0&&P0_2==0)//判別指撥開關是否數值為 0 {n_channel=0;}//指撥開關數值=0,LO 頻率調整到 2026MHz else if(P0_0==1&&P0_1==0&&P0_2==0)//判別指撥開關是否數值 //為 1
{n_channel=60;}//指撥開關數值=1,LO 頻率調整到 2046MHz
else if(P0_0==0&&P0_1==1&&P0_2==0)// 判 別 指 撥 開 關 是 否 數 值 ////為 2
{n_channel=120;}//指撥開關數值=2,LO 頻率調整到 2066MHz else if(P0_0==1&&P0_1==1&&P0_2==0)//判別指撥開關是否數值 //為 3
{n_channel=180;}//指撥開關數值=1,LO 頻率調整到 2086MHz else if(P0_0==0&&P0_1==0&&P0_2==1)//判別指撥開關是否數值 //為 4
{n_channel=240;}//指撥開關數值=1,LO 頻率調整到 2106MHz else if(P0_0==1&&P0_1==0&&P0_2==1)//判別指撥開關是否數值 //為 5
{n_channel=300; }//指撥開關數值=1,LO 頻率調整到 2126MHz else //當指撥開關不等於 0;1;2;3;4;5 執行下面式子
{n_channel=30;}//LO 頻率調整到 2036MHz
//=======不使用掃頻,指撥開關控制 ATE LO 頻率===========
ATTENUATOR=52; //調整數位式衰減器衰減值
DVGA(ATTENUATOR);//呼叫數位式衰減器副程式(傳入衰減值)
Synthesizer(n_channel);//呼叫 Synthesizer 副程式(傳入要鎖定 //的頻率填入 16 進位值)
P2_2=1; //8051 Port2.2 輸出 1,告訴 Baseband 系統已準備好 //(ready)
while(P2_4!=0);//判別 Baseband 送到 8051 Port2.4 訊號,1=TX;
//0=RX
while(flag_250k==0)//判別是否收到 DUT 送來的 Preamble(250KHZ
//Clock)
{//進入 while(flag_250k==0)回圈
while(flag_250k==0&&n_channel<=303)//當還沒收到 DUT 送來的 //Preamble 與 Channel 小於 100 同時成立時進入迴圈
{// 進 入 while(flag_250k==0&&n_channel<=294) 迴 圈 P1=0x00;//8051 Port0.1~0.4 輸 出 0 , AGC 增 益 調 整 為 -16dBm
oldgain=-16;//紀錄 AGC 目前增益調整值 AGC();//呼叫 AGC 增益調整副程式
flag_250k=Timer200HzDelay(1);//偵測 DUT 送來 Preamble //(250KHZ Clock)
}//離開 while(flag_250k==0&&n_channel<=294)回圈 }//離開 while(flag_250k==0)回圈
while(flag_250k)// 判 別 是 否 收 到 DUT 送 來 的 Preamble(250KHZ //Clock),如果有 flag_250k=1
{//進入 while(flag_250k)回圈
P2_1=1;//8051 Port2.1 輸出 1,告訴 Baseband 系統已經收到 DUT 送 //來的 Preamble 且鎖定頻率(LOCK)
flag_250k=0;//清除 Preamble 判斷旗標
while(flag_250k==0) //當旗標 flag_250k=0 進入回圈
{//進入 while(flag_250k==0)回圈 AGC();//AGC 增益調整 }//離開 while(flag_250k==0)回圈 }//離開 while(flag_250k)回圈 }//離開 while(1)回圈
}//主程式 main 結束
//AFC_big=====AFC 頻率粗調副程式=======================
void AFC_big(void)//宣告 AFC 頻率粗調副程式傳入傳回值 {//進入 AFC 頻率粗調副程式
int afc_value;//宣告整數變數 afc_value(只可在 AFC 頻率粗調副 //程式使用)
port_nu=0x05; //讀取 8051Port1.5 的訊號(FM 解調 IC 輸出的 //AFC 類比數位訊號)
afc_value=adc(port_nu);//取回 ADC 轉出值(ADC 讀取 8051Port1.5 //的訊號)
if(afc_value>=1023)//判斷 ADC 轉出值是否大於 1023 {//如果 ADC 轉出值是否大於 1023 進入回圈
while(afc_value>=1023)//當 ADC 轉出值大於 1023 成立進入回圈 {//進入 ADC 轉出值大於 1023 回圈
n_channel-=3;//n_channel=n_channel-3;LO 頻率往低頻偏 1MHz if(n_channel<0)//判斷 n_channel=n_channel-3 是否小於 0 如果成 //立執行回圈
{//n_channel=n_channel-3 小於 0 回圈
n_channel=0;//將 n_channel 修正到 0(LO=2026MHz) }//離開 n_channel=n_channel-3 小於 0 回圈
Synthesizer(n_channel);//呼叫 Synthesizer 副程式改變 LO 頻率 port_nu=0x05;//重新讀取 8051 Port1.5 的訊號
AGC();//呼叫 AGC 副程式調整訊號功率;維持在最佳接收狀態 afc_value=adc(port_nu);//重新讀取 8051 ADC 轉出值;
//令 8051 ADC 轉出值=afc_value
}//離開 ADC 轉出值大於 1023 回圈
}//離開判斷 ADC 轉出值是否大於 1023 回圈
else if(afc_value<=13)//判斷 ADC 轉出值是否小於 13 {//進入判斷 ADC 轉出值小於 13 迴圈
while(afc_value<=13)//當 ADC 轉出值小於 13 進入回圈 {//ADC 轉出值小於 13 回圈
n_channel+=3;//n_channel=n_channel+3;LO 頻率往高頻偏 1MHz if(n_channel>300)//判斷 n_channel=n_channel-3 是否大於 300 如
//果成立執行回圈
{//n_channel=n_channel-3 大於 300 回圈
n_channel=300;//將 n_channel 修正到 300(LO=2126MHz) }//離開 n_channel=n_channel-3 大於 300 回圈
Synthesizer(n_channel);//呼叫 Synthesizer 副程式改變 LO 頻率 port_nu=0x05;//重新讀取 8051 Port1.5 的訊號
AGC();//呼叫 AGC 副程式調整訊號功率;維持在最佳接收狀態 afc_value=adc(port_nu);//重新讀取 8051 ADC 轉出值;令 8051 ADC//轉出值=afc_value
}//離開 ADC 轉出值小於 13 回圈
}//離開判斷 ADC 轉出值小於 13 迴圈
else//如果 ADC 轉出值不大於 1023 也不小於 13 執行回圈 {//進入如果 ADC 轉出值不大於 1023 也不小於 13 執行回圈 //不做任何處理
}//離開如果 ADC 轉出值不大於 1023 也不小於 13 執行回圈 }//離開 AFC 頻率粗調副程式
//AFC_small=======AFC 頻率微調副程式===================
void AFC_small(void) {
int afc_value;
port_nu=0x05;
afc_value=adc(port_nu);
if(afc_value>=670) {
n_channel-=3;
if(n_channel<0)
{n_channel=0;}
Synthesizer(n_channel);
}
else if(afc_value<=50) {
n_channel+=3;
if(n_channel>300) {n_channel=300;}
Synthesizer(n_channel);
} else { }
}
//Synthesizer====頻率合成器控制副程式===================
void Synthesizer(int n_channel) {
int i,j;
long temp;
Synthesizer_Init();
for(i=n_channel;i<n_channel+3;i++)//填入 R,N,F {
for(j=20;j>=0;j--)//填入 21 比數位資料 {
temp=Input[i];
temp>>=j; //從高位元開始
temp&=0x01;
if(temp==1)//如果該筆資料=1,輸出則為 Hight DATA=1;
else//否則,輸出則為 Low DATA=0;
CLK=1;
delay(2);
CLK=0;
delay(2);
}
DATA=0;
LE=1;//結束 21 bits delay(2);
LE=0;
delay(2);
} }
//====頻率合成器初使化副程式==========================
void Synthesizer_Init(void) {
CLK=0;
LE=0;
DATA=0;
}
//MAX2059===========================================
void DVGA(int ATTENUATOR) {
int K,L;
long temp;
DVGA_Init();
K=ATTENUATOR;
for(L=9;L>=0;L--) {
temp=AInput[K];
temp>>=L; //從高位元開始
temp&=0x01;
if(temp==1)//如果該筆資料=1,輸出則為 Hight ADATA=1;
else//否則,輸出則為 Low ADATA=0;
ACLK=1;
delay(2);
ACLK=0;
delay(2);
}
ADATA=0;
ALE=1; //結束 10 bits delay(2);
ALE=0;
delay(2);
delay(2);
}
void DVGA_Init(void) {
ACLK=0;
ALE=0;
ADATA=0;
}
//MAX2059============================================
//250K===============================================
bit Timer200HzDelay(int count) {
IE=0x8A; //打開中斷開關和 ET1 和 ET0
TMOD=0x04; //mode0 Gate=0 c/t=0 mode1 Gate=1
TH0=0;
TL0=0;
TL1=(8192-921)%32; //設定初值取餘數 TH1=(8192-921)/32; //設定初值取商 T200HzTimer = count;
TR1 = 1;
TR0 = 1;
while(T200HzTimer!=0); //do loop until T200msTimer=0 TR1 = 0;
TR0 = 0;
count_nu=((TH0*32)+TL0);
if((count_nu>=211)&&(count_nu<=212)) {
flag_250k=1;
} else {
flag_250k=0;
}
count_nu=0;
return flag_250k;
}
void Timer1ISR200Hz(void) interrupt 3 using 2 {
TR1 = 0;
TL1=(8192-921+16)%32; //設定初值取餘數 TH1=(8192-921+16)/32; //設定初值取商
T200HzTimer--;
if(T200HzTimer!=0) {
TR1 = 1;
} }
//AGC===============================================
void AGC(void) {
int k;
for(k=0;k<5;k++) {
port_nu=0x04; //AGC for P1.4 agc_value=adc(port_nu);
compressioncompare();
newgain=oldgain+gaincompression;
if(newgain<-16) {newgain=-16;}
if(newgain>30) {newgain=30;}
oldgain=newgain;
codecompare();
P1=value;
} }
//adc================================================
int adc (unsigned char port_nu) {
AMX0P = port_nu; //POSITIVE CHAMNEL SELECT P1.4//
AMX0N = 0x1F; // GND Neg Inputs (Single-ended Mode) ADC0CF = 0xF8; // SAR clock = 31, Right-justified result ADC0CN = 0x80; //7.ADC Allways open,1,0
AD0BUSY = 1;
while(AD0INT!=1);
adval = ADC0L + (ADC0H << 8);
return adval;
}
//================AGC 增益補償設定=================
int compressioncompare(void) {
if(agc_value>= 560) gaincompression =16;
else if(556 <= agc_value&&agc_value< 560) gaincompression = 15;
else if(550 <=agc_value&&agc_value< 556) gaincompression = 14;
else if(542 <=agc_value&&agc_value< 550)
gaincompression = 13 ;
else if(531 <=agc_value&&agc_value< 542) gaincompression = 12;
else if( 516 <=agc_value&&agc_value< 531 ) gaincompression = 11;
else if( 495 <=agc_value&&agc_value< 516 ) gaincompression = 10;
else if( 468 <=agc_value&&agc_value< 496 ) gaincompression = 9;
else if(436 <=agc_value&&agc_value< 468) gaincompression= 8;
else if( 399 <=agc_value&&agc_value< 436 ) gaincompression = 7;
else if(360 <=agc_value&&agc_value< 399) gaincompression= 6;
else if( 322 <=agc_value&&agc_value< 360 ) gaincompression = 5;
else if(286 <=agc_value&&agc_value< 322) gaincompression= 4;
else if( 254 <=agc_value&&agc_value< 286 ) gaincompression = 3;
else if( 225 <=agc_value&&agc_value< 254 ) gaincompression = 2;
else if(202 <=agc_value&&agc_value< 225) gaincompression= 1;
else if( 183 <=agc_value&&agc_value< 202 ) gaincompression = 0;
else if(165 <=agc_value&&agc_value< 183) gaincompression= -1;
else if( 149 <=agc_value&&agc_value< 165 ) gaincompression = -2;
else if( 136 <=agc_value&&agc_value< 149 ) gaincompression = -3;
else if(125 <=agc_value&&agc_value< 136) gaincompression= -4;
else if( 116 <=agc_value&&agc_value< 125 ) gaincompression = -5;
else if(109 <=agc_value&&agc_value< 116)
gaincompression= -6;
else if( 104 <=agc_value&&agc_value< 109 ) gaincompression = -7;
else if(99 <=agc_value&&agc_value< 104) gaincompression= -8;
else if( agc_value< 99 ) gaincompression= -9;
return gaincompression;
}
//==========AGC 輸出增益對應編碼======================
void codecompare(void) {
if(newgain>= 30) value =15;
else if(25.5 <= newgain&&newgain< 30) value = 14;
else if(22.5 <=newgain&&newgain< 25.5) value = 13;
else if(19.5 <=newgain&&newgain< 22.5)
value = 12 ;
else if(16.5 <=newgain&&newgain< 19.5) value = 11;
else if( 13.5 <=newgain&&newgain< 16.5 ) value = 10;
else if( 10.5 <=newgain&&newgain< 13.5 ) value = 9;
else if( 7.5 <=newgain&&newgain< 10.5 ) value = 8;
else if(4.5 <=newgain&&newgain< 7.5) value= 7;
else if( 1.5 <=newgain&&newgain< 4.5 ) value = 6;
else if( -2.5 <=newgain&&newgain< 1.5 ) value = 5;
else if( -5.5 <=newgain&&newgain< -2.5 ) value = 4;
else if( -8.5 <=newgain&&newgain< -5.5 ) value = 3;
else if( -11.5 <=newgain&&newgain< -8.5 ) value = 2;
else if( -14.5 <=newgain&&newgain< -11.5 ) value = 1;
else if(newgain < -14.5 ) value = 0;
}
//ATE system_initial=====================================
void system_initial(void) {
PCA0MD &= ~0x40; // disable watchdog timer , WDTE = 0 //(clear watchdog timer enable)
SYSCLK_Init ();// Initialize system clock to 12MHz,系 //統時脈初始化副程式
PORT_Init();// Initialize crossbar and GPIO,接腳規劃副 //程式
ADC_INT();
}
void SYSCLK_Init (void)
{
OSCICN = 0x83; // configure internal oscillator for its //lowest frequency
CLKMUL = 0x00;
CLKMUL |= 0x80;
delay(100);
CLKMUL |= 0xC0;
while((CLKMUL & 0x20) == 0);
CLKSEL = 0x02;
RSTSRC = 0x04; // enable missing clock detector delay(50000);
}
void PORT_Init (void) {
P0MDIN = 0x7F;//設定 P0.7=0 為 ANALOG INPUT P0SKIP =0x80; //設定 P0.7=1 為 CROSSBAR SKIP ENABLE
P1MDIN = 0xCF;//P1.4&P1.5 AS AN Analog,P1.6 Digital P1MDOUT = 0x0f;//將 P1.0~P1.3 設為 PUSH-PULL
P0SKIP = 0xFF;
P1SKIP = 0xBF;
P2SKIP = 0xFF;
P2MDOUT = 0xEF;
XBR1 = 0x50;
}
void ADC_INT(void) {
REF0CN = 0x00;//Vref pin used as voltage //reference
} void delay(int x) {
while(x>0) x--;
}
論文內容備註
備註 1: ISM(Industrial Scientific Medical) Band,此頻 段(2.4~2.4835GHz)主要是開放給工業,科學、醫學,三個主要機 構使用,該頻段是依據美國聯邦通訊委員會(FCC)所定義出來,屬 於 Free License,並沒有所謂使用授權的限制。
備註2: 超外差為最古老的架構,具最佳的靈敏度(Sensitivity) 和選擇度(Selectivity),其原理是將接收到射頻訊號與本地振盪電 路進行混波以產生較低頻的中頻信號,因為用Bulk及SAW帶通濾波器 來消除鏡頻及其他雜散頻率(Image and Spurious Frequency),使得 元件數目增加之外,因為製程無法提供一個高Q值的帶通濾波器,即 無法實現全射頻晶體(Radio on chip)。採用超外差接收機的通信或 廣播型式有AM、FM、電視以雷達系統等,應用非常廣泛。其應用之廣,
主因是其中頻放大器是窄頻功能放大器,可有效排除非中頻信號,即 進一步排除了其它電台的干擾,此優點是超外差式接收機一項重要的 優點。
參考文獻
[1]LMDS 中頻系統設計與實現,江俊杰 編著,91 年 7 月。
[2]鎖相迴路頻率合成器之暫態響應及相位雜訊之研究,蕭天岳 編 著,90 年 7 月。
[3]ISM 頻帶(2.412~2.483)系統電路實現,陳俊仁 編著,90 年 7 月。
[4]HOY 無線測試平台基頻收發機之設計與實現,張介銘 編著,96 年 7 月。
[5]電子學實驗上、下,王志湖 編著,滄海書局出版。
[6]無線電高頻電路,袁杰 編著,全華科技出版。
[7]8051 單晶片 C 語言設計實務,楊明豐 編著,碁峯資訊出版。
[8]Protel 99SE 電腦輔助電路設計分析,柯南 編著,台科大圖書股 份出版。