|
本設(shè)計為一遠(yuǎn)程幅頻特性測試的系統(tǒng),在硬件上,采用單片機控制 AD9851信號發(fā)生模塊,完成波幅,步進(jìn),輸出頻率的設(shè)置,通過高速 A/D 轉(zhuǎn)換實時將輸出波幅顯示到液晶顯示屏上。各個模塊是相互獨立的,保證了模塊能夠穩(wěn)定輸出頻率為 1MHz-40MHz 峰值可調(diào)的信號波。利用適用于中頻放大的 AD8367 芯片,對
波形進(jìn)行無明顯失真的放大。此外還利用頻率檢測模塊以及有效值檢波模塊,兩者能夠在 1-500M 的范圍內(nèi)提供出良好的數(shù)據(jù)供軟件部分?jǐn)M合成幅頻特性曲線。
所研究關(guān)鍵技術(shù)的嵌入式系統(tǒng),具有高精度、高可靠性和低功耗等優(yōu)點,主要從傳感器數(shù)據(jù)采集、無線網(wǎng)絡(luò)設(shè)計功能入手,利用嵌入式系統(tǒng)的控制優(yōu)勢,實現(xiàn)整個系統(tǒng)的智能控制和監(jiān)測。本設(shè)計遠(yuǎn)程幅頻特性測試系統(tǒng)將硬件平臺采集的各種重要參數(shù)顯示在 PC 機終端,讓用戶更加直觀清晰的觀測到幅頻特性的改變。
制作出來的實物圖如下:
1.jpg (306.48 KB, 下載次數(shù): 105)
下載附件
2021-9-27 03:18 上傳
2.jpg (322.27 KB, 下載次數(shù): 84)
下載附件
2021-9-27 03:18 上傳
3.jpg (342.28 KB, 下載次數(shù): 67)
下載附件
2021-9-27 03:18 上傳
單片機源程序如下:
- #include "AD9851.H"
- #include "stdio.h"
- #include "nokia_5110.h"
- //***************************************************//
- //函數(shù)1: ad9851_reset() //
- //函數(shù)2: ad9851_reset_serial() //
- //函數(shù)3: ad9851_wr_parrel(unsigned char w0,double frequence)//
- //函數(shù)4: ad9851_wr_serial(unsigned char w0,double frequence)//
- //版本: V1.1 //
- //***************************************************//
- // 子程序說明 //
- //***************************************************//
- //函數(shù)1: ad9851_reset()
- // 復(fù)位ad9851,之后為并口寫入模式
- //函數(shù)2: ad9851_reset_serial()
- // 復(fù)位ad9851,之后為串口寫入模式
- //函數(shù)3: ad9851_wr_parrel(unsigned char w0,double frequence)
- // 并口寫ad9851數(shù)據(jù),w0為ad9851中w0的數(shù)據(jù),frequence
- // 為寫入的頻率
- //函數(shù)4: ad9851_wr_serial(unsigned char w0,double frequence)
- // 串口寫ad9851數(shù)據(jù),w0為ad9851中w0的數(shù)據(jù),frequence
- // 為寫入的頻率
- //需定義的位:
- //ad9851_w_clk ;
- //ad9851_fq_up ;
- //ad9851_rest ;
- //ad9851_bit_data ;
- //例:
- //sbit ad9851_w_clk =P2^2;
- //sbit ad9851_fq_up =P2^1;
- //sbit ad9851_rest =P2^0;
- //sbit ad9851_bit_data =P1^7;
- //***************************************************//
- // 寫數(shù)據(jù)說明 //
- //***************************************************//
- //寫數(shù)據(jù)例:
- // ad9851_reset()
- // wr_lcd02_data(unsigned char x)
- // ad9851_wr_parrel(0x01,1000)
- // ad9851_wr_serial(0x01,1000)
- //***************************************************//
- //---------------------------------------------------//
- //并行寫1000Hz程序
- // ad9851_reset();
- // ad9851_wr_parrel(0x01,100000);
- //0X01為開六備頻
- //ad9851_wr_parrel(0x00,1000);
- //0X00為不開六備頻
- //---------------------------------------------------//
- //---------------------------------------------------//
- //串行寫1000Hz程序
- //ad9851_reset_serial();
- //ad9851_wr_serial(0x01,1000);
- //0X01為開六備頻
- //ad9851_wr_serial(0x00,1000);
- //0X00為不開六備頻
- //---------------------------------------------------//
- //---------------------------------------------------//
- // 程序 //
- //---------------------------------------------------//
- ////
- ////sbit ad9851_w_clk =P2^2; //P2.2口接AD9851的w_clk腳/PIN7
- ////sbit ad9851_fq_up =P2^1; //P2.1口接AD9851的fq_up腳/PIN8
- ////sbit ad9851_rest =P2^0; //P2.0口接AD9851的rest腳/PIN12
- ////sbit ad9851_bit_data =P1^7; //P1.7口接AD9851的D7腳/PIN25
- //////P1為8位數(shù)據(jù)口
- //***************************************************//
- // ad9851復(fù)位(并口模式) //
- //---------------------------------------------------//
- void ad9851_reset()
- {
- ad9851_w_clk=0;
- ad9851_fq_up=0;
- //rest信號
- ad9851_rest=0;
- ad9851_rest=1;
- ad9851_rest=0;
- }
- //***************************************************//
- // ad9851復(fù)位(并口模式) //
- //---------------------------------------------------//
- void ad9851_reset_serial()
- {
- ad9851_w_clk=0;
- ad9851_fq_up=0;
- //rest信號
- ad9851_rest=0;
- ad9851_rest=1;
- ad9851_rest=0;
- //w_clk信號
- ad9851_w_clk=0;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //fq_up信號
- ad9851_fq_up=0;
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
- //***************************************************//
- // 向ad9851中寫命令與數(shù)據(jù)(并口) //
- //---------------------------------------------------//
- void ad9851_wr_parrelnums(unsigned char w0,double frequence)
- {
- u8 i;
- for(i = 0; i < 5; i++)
- ad9851_wr_parrel(w0, frequence);
- }
- void ad9851_wr_parrel(unsigned char w0,double frequence)
- {
- unsigned char w;
- long int y;
- double x;
- //計算頻率的HEX值
- x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
- //如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz !。
- frequence=frequence/1000000;
- frequence=frequence*x;
- y=frequence;
- //寫w0數(shù)據(jù)
- w=w0;
- P1=w; //w0
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w1數(shù)據(jù)
- w=(y>>24);
- P1=w; //w1
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w2數(shù)據(jù)
- w=(y>>16);
- P1=w; //w2
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w3數(shù)據(jù)
- w=(y>>8);
- P1=w; //w3
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //寫w4數(shù)據(jù)
- w=(y>>=0);
- P1=w; //w4
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- //移入始能
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
- //***************************************************//
- // 向ad9851中寫命令與數(shù)據(jù)(串口) //
- //---------------------------------------------------//
- void ad9851_wr_serial(unsigned char w0,double frequence)
- {
- u8 diss[30];
- static adenter = 0;
- unsigned char i,w;
- long int y;
- double x;
- sprintf(diss, "SADEnter:%d", (int)adenter++);
- LCD_write_english_string(10,3,diss);
- //計算頻率的HEX值
- x=4294967295/180;//適合180M晶振/180為最終時鐘頻率(或30M六倍頻)
- //如果時鐘頻率不為180MHZ,修改該處的頻率值,單位MHz !!
- frequence=frequence/1000000;
- frequence=frequence*x;
- y=frequence;
- //寫w4數(shù)據(jù)
- w=(y>>=0);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w3數(shù)據(jù)
- w=(y>>8);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w2數(shù)據(jù)
- w=(y>>16);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w1數(shù)據(jù)
- w=(y>>24);
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //寫w0數(shù)據(jù)
- w=w0;
- for(i=0;i<8;i++)
- {
- ad9851_bit_data=(w>>i)&0x01;
- ad9851_w_clk=1;
- ad9851_w_clk=0;
- }
- //移入始能
- ad9851_fq_up=1;
- ad9851_fq_up=0;
- }
復(fù)制代碼- #include "STC12C5A60S2.H"
- #include "key.h"
- #include "stdio.h"
- #include "DDS9851.H"
- #include "USART.H"
- #include "nokia_5110.h"
- u8 Task_ID = 0;
- u8 OLD_Task_ID = 0;
- u8 i, RUN;
- u8 enter = 0;
- u8 dis[30];
- int k1 = 0, k2 = 0, k3 = 0, k4 = 0;
- u32 Fre = 100000;
- double pinlv;
- void init(void)
- {
- //// IT0=1;
- //// EX0 = 1;
- //// IT1=1;
- //// EX1 = 1;
- //// EA = 1;
- P0=0x00;
- P1=0x00;
- P2=0x00;
- P3=0xff;
- }
- char disbuf[20];
- void main()
- {
- init();
- LCD_init();
- UsartInit();
- LCD_write_english_string(10,2,"AD9851XX");
- Key_Init();
- ad9851_wr_parrel(0x01, (double)Fre); //0X00為不開六備頻 0X01為開六備頻
- LCD_clear();
- LCD_write_english_string(24,2,"AD9851");
- LCD_Show_CEStr(10,0,"康威電子");
- LCD_write_english_string(3,4,"000,100,000Hz");
- LCD_write_english_string(10,3,"Point");
- while(1)
- {
- KeyRead();
- OLD_Task_ID = Task_ID;
- switch(Keycode)
- {
- case E_K_L: Task_ID++; Task_ID %= 3;break;
- }
- if(Task_ID != OLD_Task_ID)
- {
- LCD_clear();
- LCD_Show_CEStr(10,0,"電子");
- switch(Task_ID)
- {
- case 0: LCD_write_english_string(24,3,"Point");break;
- case 1: LCD_write_english_string(24,2,"Sweep");break;
- case 2: LCD_write_english_string(24,2,"Step");changefre(&f_step, Keycode, dis);break;
- }
- }
- if((Keycode != 0) && (Keycode != D_K_L))
- Sweeper_state = 0;
- switch(Task_ID)
- {
- case 0:
- if(Keycode != 0)
- {
- pinlv = changefre(&Fre, Keycode, dis);
- LCD_write_english_string(3,4,dis);
- ad9851_wr_parrel(0x01, pinlv);
- }
- break;
- case 1:
- sweep_freq();
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
代碼與資料下載:
AD9851-Nokia5110資料包-驅(qū)動 PDF-V7.0.7z
(3.64 MB, 下載次數(shù): 38)
2021-9-27 03:20 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|