• 沒有找到結果。

結論與未來展望

在文檔中 中 華 大 學 碩 士 論 文 (頁 113-153)

本計劃實現了 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 電腦輔助電路設計分析,柯南 編著,台科大圖書股 份出版。

在文檔中 中 華 大 學 碩 士 論 文 (頁 113-153)

相關文件