找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8054|回復: 7
打印 上一主題 下一主題
收起左側

17年電賽 遠程幅頻特性測試裝置 (H題)基礎部分430源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:223294 發(fā)表于 2017-12-4 23:02 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
(分享資料)17年電賽 遠程幅頻特性測試裝置 (H題)基礎部分--  用ADS9834做頻率輸出-資源有點少 補充補充


單片機源程序如下:
AD9834.h文件:
  1. #define  uint unsigned int
  2. #define  uchar unsigned char
  3. #define  ulong unsigned long

  4. #define   AD_9834_DIR   P3DIR

  5. #define   FSYNC_H   P3OUT |= BIT0//輸入數(shù)據(jù)的幀同步信號,為低時載入新的字節(jié)
  6. #define   FSYNC_L   P3OUT &= ~BIT0

  7. #define   SCLK_H    P3OUT |= BIT1//串行時鐘輸入,每個下降沿寫入一位數(shù)據(jù)
  8. #define   SCLK_L    P3OUT &= ~BIT1

  9. #define   SDATA_H   P3OUT |= BIT2//數(shù)據(jù)串口輸入端
  10. #define   SDATA_L   P3OUT &= ~BIT2  

  11. long freq=1000000;
  12. long kuandu;
  13. long zhongxin;

  14. /**************初始化**************************/
  15. void AD_9834_init()
  16. {
  17.   AD_9834_DIR |= BIT0 + BIT1 +BIT2;//設置為輸出
  18.   FSYNC_H;
  19.   SCLK_H;
  20.   SDATA_H;
  21. }

  22. /*********向9834寫入16位頻率數(shù)據(jù)***********************/
  23. void write_AD9834(uint dat)
  24. {
  25.     uchar i;
  26.     FSYNC_H;
  27.     SCLK_H;
  28.     _NOP();
  29.     _NOP();
  30.     FSYNC_L;     //FSYNC拉低時,SCLK必須為高
  31.     for(i=0;i<16;i++)//16位數(shù)據(jù)寫入
  32.     {
  33.         SCLK_H; //先置高為下降沿做準備
  34.         if(dat & 0x8000)
  35.         {
  36.             SDATA_H;//寫入
  37.         }
  38.         else
  39.         {
  40.             SDATA_L;//不寫入
  41.         }
  42.         SCLK_L;     //下降沿向dds寫入數(shù)據(jù)
  43.         dat <<= 1;
  44.     }
  45.     _NOP();
  46.     FSYNC_H;    //傳輸完數(shù)據(jù)置高
  47. }

  48. /***********正弦波頻率設置******************/
  49. //寄存器為28位,所以分高14位低14位寫入
  50. void AD_9834_output(ulong freq)
  51. {
  52.     ulong dds;
  53.     uint dds_l,dds_h;
  54.     //dds = (long)(freq * 1.7895697666);  //150M晶振  **** 2^28/150M=1.7895697666
  55.     //ΔPhase=f×2^28/fMCLK  一共28位所以2的28次方
  56.   //  dds = (long)(freq * 2.147483648); //125m晶振
  57.    dds = (long)(freq * 2.68435456); //100m晶振
  58.      // dds = (long)(freq * 3.579139413);   //75M晶振;   
  59.     //dds = (long)(freq * 11.184810); //24m晶振
  60.     dds_l =(uint)(dds & 0x3fff);     //取出數(shù)據(jù)的低十四位(LSB)11 1111 1111 1111
  61.     dds = dds >>14;                 //將MSB的高十四位移到低十四位
  62.     dds_h = (uint)(dds &0x3fff);   //取出MSB的十四位數(shù)據(jù)

  63. /*****16位碼的前兩位規(guī)定頻率寄存器的字節(jié)寫入,在兩個連續(xù)的寫操作是一樣的*********************/
  64.     dds_l = dds_l | 0x4000; //對十四位的LSB/MSB加上兩位的地址(01),所以變成
  65.     dds_h = dds_h | 0x4000; //了是十六位的數(shù)據(jù)(地址01是頻率寄器0,10是頻率寄存器1)

  66.     write_AD9834(dds_l);    //寫入低14位
  67.     write_AD9834(dds_h);   //寫入高14位
  68. }


復制代碼


  1. #include<msp430F5438A.h>
  2. #include"TX2.h"
  3. #include"AD9834.h"
  4. #include"12864.h"
  5. #include"key.h"


  6. #define  uint unsigned int
  7. #define  uchar unsigned char
  8. #define  ulong unsigned long
  9. //void display(void);


  10. void main(void)
  11. {
  12.     WDTCTL = WDTPW + WDTHOLD;
  13.     P9DIR |= 0x0f;            //P9方向寄存器
  14.     P8DIR |= 0xff;            //P9輸出寄存器   
  15.     LCD_init();                //液晶初始化
  16.     LCD_display();
  17.     keyscan1_init();
  18.     initclock();
  19.     AD_9834_init();
  20.     write_AD9834(0x2100);//控制寄存器
  21.     write_AD9834(0x2038);//這里很關鍵!
  22. /*9834的控制寄存器是16位       0x2000(01 0000 0000 0000)表示bit13為1
  23.   即允許一個完整字節(jié)在兩個連續(xù)的寫操作寫入頻率寄存器。第一次寫操作包括
  24.   14LSBs的頻率字節(jié),下一個寫操作包括14MSBs*/
  25.     AD_9834_output(freq);
  26.         
  27.         
  28.     while(1)
  29.     {  
  30.        KEY_Fun();
  31.        if(flag_key==1)
  32.        {
  33.          
  34.           freq += 1000000;
  35.           delay_ms(1000);
  36.           AD_9834_output(freq);//把頻率寫入頻率寄存器
  37.           if(freq>40000000)
  38.           for(;freq>1000000;)
  39.          {
  40.             freq -= 1000000;
  41.             delay_ms(1000);
  42.             AD_9834_output(freq);//把頻率寫入頻率寄存器
  43.         }
  44.       
  45.        }
  46. ……………………

  47. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
17年電賽 遠程幅頻特性測試裝置 (H題)基礎部分.rar (36.85 KB, 下載次數(shù): 99)





評分

參與人數(shù) 2黑幣 +55 收起 理由
天才小能貓 + 5 共享資料的黑幣獎勵!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:371171 發(fā)表于 2018-7-14 09:31 來自手機 | 只看該作者
樓主,請問你這個程序,只能完成頻率輸出是啥意思?幅度的輸出可調嗎?
回復

使用道具 舉報

板凳
ID:323350 發(fā)表于 2018-7-14 16:51 | 只看該作者
挺好的,可以做參考
回復

使用道具 舉報

地板
ID:486198 發(fā)表于 2019-3-7 13:32 | 只看該作者
挺好的
回復

使用道具 舉報

5#
ID:223294 發(fā)表于 2019-7-30 10:27 | 只看該作者
倒裝的根號 發(fā)表于 2018-7-14 09:31
樓主,請問你這個程序,只能完成頻率輸出是啥意思?幅度的輸出可調嗎?

幅度不可調 通過可調電阻調節(jié)
回復

使用道具 舉報

6#
ID:597115 發(fā)表于 2019-8-7 18:02 | 只看該作者
不錯,參考參考
回復

使用道具 舉報

7#
ID:461436 發(fā)表于 2019-9-12 15:54 來自手機 | 只看該作者
有用DDS實現(xiàn)的嗎
回復

使用道具 舉報

8#
ID:702028 發(fā)表于 2020-7-9 13:36 | 只看該作者
有文檔說明 嗎 然后你這個是用什么仿真出來的

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表