找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索

AD9850 DDS信號(hào)發(fā)生器 程序 原理圖 pcb 設(shè)計(jì)報(bào)告都有

查看數(shù): 19752 | 評(píng)論數(shù): 26 | 收藏 12
關(guān)燈 | 提示:支持鍵盤(pán)翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2016-9-25 12:33

正文摘要:

圖3-1 程序流程圖四、測(cè)試方案與測(cè)試結(jié)果1、測(cè)試儀器雙蹤示波器   TDS3012B          頻率計(jì)       PD16312、測(cè)試數(shù)據(jù)       ...

回復(fù)

ID:810461 發(fā)表于 2022-1-15 16:46
51黑ff 發(fā)表于 2016-9-25 12:38
AD9850的驅(qū)動(dòng)程序C文件:
主程序:

在哪下載?
ID:579406 發(fā)表于 2021-12-12 15:17
謝謝樓主分享,看這個(gè)不是為了別的什么目的,主要是學(xué)習(xí)一下思維和文筆,提升一下創(chuàng)作水平和閱讀視野。
ID:966104 發(fā)表于 2021-10-4 00:11
如果增加一個(gè)屏幕就牛B了
ID:65369 發(fā)表于 2021-9-30 10:01
這個(gè)資料要好了,已經(jīng)實(shí)現(xiàn)了基本功能,在在這里再修改更好
ID:538474 發(fā)表于 2019-5-15 16:26
我愛(ài)信號(hào)發(fā)生器 發(fā)表于 2019-3-28 13:00
謝謝樓主分享,正在做信號(hào)發(fā)生器

你打開(kāi)了嗎,有原理圖嗎
ID:511084 發(fā)表于 2019-4-13 18:30
感謝,受益匪淺
ID:508300 發(fā)表于 2019-4-13 08:04
謝謝分享呢
ID:497723 發(fā)表于 2019-3-28 13:00
謝謝樓主分享,正在做信號(hào)發(fā)生器
ID:307389 發(fā)表于 2018-4-13 17:30
用的哪個(gè)軟件呀?急用誰(shuí)知道了告訴一聲
ID:303059 發(fā)表于 2018-4-9 14:45
感謝樓主分享
ID:284869 發(fā)表于 2018-3-7 03:43
不錯(cuò)哦,還行,厲害了
ID:263298 發(fā)表于 2017-12-20 20:17
沒(méi)有其他文件了嗎
ID:263298 發(fā)表于 2017-12-20 20:15
很牛逼
ID:263298 發(fā)表于 2017-12-20 20:12
謝謝樓主恩想
ID:241140 發(fā)表于 2017-10-20 00:03
向大神學(xué)習(xí)
ID:208987 發(fā)表于 2017-6-7 23:04
下載的文件怎么打開(kāi)
ID:208987 發(fā)表于 2017-6-7 22:06
確實(shí)是好資料  就是黑幣不夠不能下載
ID:208987 發(fā)表于 2017-6-7 21:44
好,非常有用
ID:153236 發(fā)表于 2017-4-13 21:53
好資料 有幫助 謝謝樓主
ID:175611 發(fā)表于 2017-3-20 23:56
謝謝樓主的分享
ID:159531 發(fā)表于 2017-1-3 10:57
很不錯(cuò)
ID:158454 發(fā)表于 2016-12-29 21:41
軟件是用的哪個(gè)呢
ID:85606 發(fā)表于 2016-11-22 14:25
樓主發(fā)帖辛苦了,謝謝分享!。。。!
ID:140275 發(fā)表于 2016-9-30 03:26
畢業(yè)設(shè)計(jì)就是這樣啊,明白的是9850缺說(shuō)這就是9834的特點(diǎn)。。。
ID:134803 發(fā)表于 2016-9-29 09:56
非常不錯(cuò),剛好用到,學(xué)習(xí)學(xué)習(xí),感謝樓主
ID:137190 發(fā)表于 2016-9-25 12:38
AD9850的驅(qū)動(dòng)程序C文件:
  1. /************************************************************
  2. *                                        AD9850.c                                                                *
  3. *                                        AD9850的驅(qū)動(dòng)程序C文件                                        *
  4. *                                        Copyright (c)2009---MJC                                 *
  5. *                                        Free to Copy and Modify.                                *
  6. *                                        Author:Worrior                                                        *
  7. *                                        Date:2009-9-1                                                        *
  8. ************************************************************/

  9. #include<intrins.h>
  10. #include "AD9850I.h"
  11. #include "lcd12864.h"

  12. //unsigned char freq[8];                                //液晶顯示8種步進(jìn)頻率值
  13. unsigned char freq[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};


  14. /********************
  15. **函數(shù):AD9850Reset
  16. **功能:AD9850的復(fù)位函數(shù)
  17. **作者:Worrior
  18. **日期:2009-9-1
  19. ********************/
  20. void AD9850Reset(void)
  21. {
  22.         AD9850WCLK = 1;
  23.         AD9850FQUD = 1;
  24. //        AD9850ReSet = 0;
  25. //        AD9850ReSet = 1;//復(fù)位腳置高電平(10個(gè)AD9850的時(shí)鐘周期)
  26. //        _nop_();_nop_();_nop_();_nop_();_nop_();
  27. //        _nop_();_nop_();_nop_();_nop_();_nop_();//延時(shí),其實(shí)不用這么長(zhǎng)
  28. //        AD9850ReSet = 0;//復(fù)位完成,再拉低
  29. }

  30. /*步進(jìn)按鍵函數(shù)*/
  31. void f10Mhz(void)                                                                                                                                                //10Mhz步進(jìn)
  32. {
  33.         freq[0]=freq[0]+1;
  34.         if(freq[0]>=10)
  35.         {
  36.                 freq[0]=0;
  37.         }
  38.         display_led();
  39. }

  40. void f1Mhz(void)                                                                                                                                                //1Mhz步進(jìn)
  41. {
  42.         freq[1]=freq[1]+1;
  43.         if(freq[1]>=10)
  44.         {
  45.                 freq[1]=0;
  46.         }
  47.         display_led();       
  48. }

  49. void f100Khz(void)                                                                                                                                                //100Khz步進(jìn)
  50. {       
  51.         freq[2]=freq[2]+1;
  52.         if(freq[2]>=10)
  53.         {
  54.                 freq[2]=0;
  55.         }
  56.         display_led();
  57. }

  58. void f10Khz(void)                                                                                                                                                //10Khz步進(jìn)
  59. {
  60.         freq[3]=freq[3]+1;
  61.         if(freq[3]>=10)
  62.         {
  63.                 freq[3]=0;
  64.         }
  65.         display_led();
  66. }

  67. void f1Khz(void)                                                                                                                                                //1Khz步進(jìn)
  68. {
  69.         freq[4]=freq[4]+1;
  70.         if(freq[4]>=10)
  71.         {
  72.                 freq[4]=0;
  73.         }
  74.         display_led();
  75. }

  76. void f100Hz(void)                                                                                                                                                //100hz步進(jìn)
  77. {
  78.         freq[5]=freq[5]+1;
  79.         if(freq[5]>=10)
  80.         {
  81.                 freq[5]=0;
  82.         }
  83.         display_led();

  84. }

  85. void f10Hz(void)                                                                                                                                                //10hz步進(jìn)
  86. {
  87.         freq[6]=freq[6]+1;
  88.         if(freq[6]>=10)
  89.         {
  90.                 freq[6]=0;
  91.         }
  92.         display_led();

  93. }

  94. void f1Hz(void)                                                                                                                                                        //1hz步進(jìn)
  95. {
  96.         freq[7]=freq[7]+1;
  97.         if(freq[7]>=10)
  98.         {
  99.                 freq[7]=0;       
  100.         }
  101.         display_led();
  102. }

  103. /***計(jì)算控制字************/
  104. /***入口:頻率數(shù)組指針***出口,控制字值*****/
  105. unsigned long jisuan(unsigned char data *fno)//*fno-0>freq[0...7]
  106. {
  107.     unsigned long dds_no ;
  108.     dds_no=
  109.     (*(fno+7))*FF0+
  110.     (*(fno+6))*FF1+
  111.     (*(fno+5))*FF2+
  112.     (*(fno+4))*FF3+
  113.     (*(fno+3))*FF4+
  114.     (*(fno+2))*FF5+
  115.     (*(fno+1))*FF6+
  116.     (*fno)*FF7 ;
  117.     return(dds_no);               
  118. }

  119. /********************
  120. **函數(shù):AD9850SetFre
  121. **功能:AD9850設(shè)定頻率控制字函數(shù)
  122. **參數(shù):Fre,float型,要設(shè)定的頻率,單位Hz
  123. **作者:Worrior
  124. **日期:2009-9-1
  125. ********************/
  126. void AD9850ISetFre()
  127. {
  128.         unsigned long FTW = 0;//要寫(xiě)入的32位頻率控制字(AD9850一次需要寫(xiě)入40位控制字)
  129.         unsigned char part1,part2,part3,part4;

  130.         FTW=jisuan(freq);       
  131. //        if(FTW > 30000000)
  132. //                FTW = 30000000;
  133. //        FTW = (unsigned long) (Fre * AD9850_125M);//計(jì)算頻率控制字(公式:FTW=(2^32/fosc)*Fre)
  134.         /*以下將32位頻率控制字分解*/
  135.         part1 = (unsigned char) (FTW>>24);//取32~25位
  136.         part2 = (unsigned char) (FTW>>16);//取24~17位
  137.         part3 = (unsigned char) (FTW>>8); //取16~9位
  138.         part4 = (unsigned char) (FTW);          //取8~1位
  139.         /*以上將32位頻率控制字分解*/

  140.         AD9850FQUD = 1;
  141.         AD9850WCLK = 1;
  142.         AD9850DATAPORT = 0x00;//寄存器最高的八位只送0x00
  143.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  144.         _nop_();

  145.         AD9850WCLK = 1;
  146.         AD9850DATAPORT = part1;
  147.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  148.         _nop_();
  149.        
  150.         AD9850WCLK = 1;
  151.         AD9850DATAPORT = part2;
  152.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  153.         _nop_();
  154.        
  155.         AD9850WCLK = 1;
  156.         AD9850DATAPORT = part3;
  157.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  158.         _nop_();
  159.        
  160.         AD9850WCLK = 1;
  161.         AD9850DATAPORT = part4;
  162.         AD9850WCLK = 0;//AD9850WCLK上升沿送數(shù)據(jù)
  163.         _nop_();
  164.         AD9850FQUD = 0;//AD9850FQUD上升沿將AD9850緩沖區(qū)的40位數(shù)據(jù)送入DDS Core
  165. }

  166. /********************
  167. **函數(shù):AD9850SetFre
  168. **功能:AD9850設(shè)定頻率控制字函數(shù)
  169. **參數(shù):Fre,float型,要設(shè)定的頻率,單位Hz
  170. **作者:Worrior
  171. **日期:2009-9-1
  172. ********************/
  173. void AD9850IISetFre(float Fre)
  174. {       
  175.         unsigned long FTW = 0;//要寫(xiě)入的32位頻率控制字(AD9850一次需要寫(xiě)入40位控制字)
  176.         unsigned char part1,part2,part3,part4;

  177.         if(Fre > 30000000)
  178.                 Fre = 30000000;
  179.         FTW = (unsigned long) (Fre * 34.3597384);//計(jì)算頻率控制字(公式:FTW=(2^32/fosc)*Fre)
  180.         /*以下將32位頻率控制字分解*/
  181.         part1 = (unsigned char) (FTW>>24);//取32~25位
  182.         part2 = (unsigned char) (FTW>>16);//取24~17位
  183.         part3 = (unsigned char) (FTW>>8); //取16~9位
  184.         part4 = (unsigned char) (FTW);          //取8~1位
  185.         /*以上將32位頻率控制字分解*/

  186.         AD9850FQUD = 1;
  187.         AD9850WCLK = 1;
  188.         AD9850DATAPORT = 0x00;//寄存器最高的八位只送0x00
  189.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  190.         _nop_();

  191.         AD9850WCLK = 1;
  192.         AD9850DATAPORT = part1;
  193.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  194.         _nop_();

  195.         AD9850WCLK = 1;
  196.         AD9850DATAPORT = part2;
  197.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  198.         _nop_();

  199.         AD9850WCLK = 1;
  200.         AD9850DATAPORT = part3;
  201.         AD9850WCLK = 0;//WCLK上升沿送數(shù)據(jù)
  202.         _nop_();

  203.         AD9850WCLK = 1;
  204.         AD9850DATAPORT = part4;
  205.         AD9850WCLK = 0;//AD9850WCLK上升沿送數(shù)據(jù)
  206.         _nop_();
  207.         AD9850FQUD = 0;//AD9850FQUD上升沿將AD9850緩沖區(qū)的40位數(shù)據(jù)送入DDS Core

  208. }
復(fù)制代碼
主程序:
  1. #include <reg52.h>
  2. #include "AD9850I.h"
  3. #include "hs0038.h"
  4. #include "lcd12864.h"


  5. void main()
  6. {
  7.         hs0038_init();               //HS0038初始化,使用了外部中斷0///定時(shí)器1
  8.         lcd12864_init();
  9.         AD9850Reset();
  10.         while(1)
  11.         {
  12.                 Get_Ircode_And_Dis();
  13.                 switch (ircode[2])
  14.                 {        /**************模式選擇****************/
  15.                                 case 0x07:xuanzekey();break;         
  16.                                 case 0x15:quedingkey();break;                
  17.                                  case 0x09:fanhuikey();break;               
  18.                         /*************頻率調(diào)整區(qū)***************/
  19.                                 case 0x0c:if(flag1==1) {f10Mhz();}; break;         
  20.                                 case 0x18:if(flag1==1) {f1Mhz(); };break;         
  21.                                  case 0x5e:if(flag1==1) {f100Khz();};break;         
  22.                                  case 0x08:if(flag1==1) {f10Khz(); };break;         
  23.                                  case 0x1c:if(flag1==1) {f1Khz(); } ;break;               
  24.                                 case 0x5a:if(flag1==1) {f100Hz();} ;break;                 
  25.                                  case 0x42:if(flag1==1) {f10Hz(); } ;break;                 
  26.                                 case 0x52:if(flag1==1) {f1Hz();  } ;break;
  27.                     /***************頻率確認(rèn)***************/
  28.                                 case 0x4a:        if(flag1==1)
  29.                                                         {
  30.                                                         pce1=0;
  31.                                                         pce2=1;
  32.                                                         pce3=1;
  33.                                                         AD9850ISetFre();
  34.                                                         };
  35.                                                         break;
  36.                         /***************AM調(diào)制*********************/
  37.                                 case 0x16:        pce1=1;                   //片選AD9850 I          實(shí)驗(yàn)板U1
  38.                                                         pce2=0;                   //片選AD9850 I          實(shí)驗(yàn)板U2
  39.                                                         pce3=1;
  40.                                                         AD9850IISetFre(1000.0);break;
  41.                                 case 0x44:if(flag2==1)
  42.                                                         {
  43.                                                     pce1=1;
  44.                                                         pce2=1;
  45.                                                         pce3=0;
  46.                                                         pwr=0;
  47.                                                         AM_mastepdown();
  48.                                                         };
  49.                                                         break;
  50.                                 case 0x40:  if(flag2==1)
  51.                                                         {
  52.                                                         pce1=1;
  53.                                                         pce2=1;
  54.                                                         pce3=0;
  55.                                                         pwr=0;
  56.                                                         AM_mastepup();
  57.                                                         };
  58.                                                         break;
  59.                         /***************FM調(diào)制*********************/
  60.                             case 0x19:AD9850IISetFre(5000.0);break;                        
  61.                                  default:break;
  62.                 }
  63.                 ircode[2]=0;                                                                            //注意一定要把ircode[2]清零。。。。。
  64. //                AD9850SetFre();
  65.         }
  66. }

復(fù)制代碼


小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表