搜索
bottom↓
回复: 13

AD9852求救。。。刚做会DDS PCB 按照AD公司AD9854编写的程序。。输出不出来。。那位

[复制链接]

出0入0汤圆

发表于 2009-10-22 16:16:12 | 显示全部楼层 |阅读模式
波形一直出不来。。高手给看看。。

出0入0汤圆

 楼主| 发表于 2009-10-22 16:18:56 | 显示全部楼层
程序如下:
#define PIC18F6527
#include <pic18.h>
#include "typedefine.h"
#include "DDS.h"
/**********************************************************
//DDS AD9852 control register 0X1D~0X20
//ADDR 0X1D
bit  7   6   5     4     3     2      1    0
      NC NC  NC  COMPPD LOW CONTROL DACPD DIGPD  //00010000 0X10
                             DACPD
//ADDR 0X1E
bit  7      6       5        4     3     2     1     0   
      NC PLLRANGE   BYPASS  mult4 mult3 mult2 mult1 mult0 //01000100 0X44
                    PLL
//ADDR 0X1F
bit  7    6      5     4   3     2     1         0
     ACC1 ACC2 TRIANGE NC MODE2 MODE1 MODE0 INT/EXTUpclock //00000000 0X00
//ADDR 0X20
bit  7    6       5     4    3   2     1         0
     NC  BYPASS  OSKEN OSKINT NC NC LSBfirst SDOenable //01000000 0X40
         invsinc              
***********************************************************/
void init_dds(void)
{   
    DDS_UD = 0;
    LATC1=0;
    DDS_OSK = 1;
   // LATC3=1;
   // DDS_FSK = 1;              //No using
   // LATC2=1;
    DDS_RD = 1;
    LATC4=1;
    DDS_WR = 1;
    LATC0=1;                        //Forbit Write and Read
    //初始化相关控制I/O口
    MASTER = 1;               //DDS RESET for More than 10 SYS CLOCK
    LATC5=1;
    delay(15);
    MASTER = 0;
    LATC5=0;
    // 系统复位
    ;
    //写更新时序Update clock
    Command_data(0X2E,0X00);    //0X1D   COMP PD disabled 0X08
    Command_data(0X1E,0X22);    //0X1E   PLL Range=1;4*MULTIPLER FOR 160M
    Command_data(0X3E,0X00);    //0XIF   MODE0 for EXT Updata clock  //0X80
    Command_data(0X01,0X0C);    //0X20   OSKEN=0;OSKINT=0;BYPASSINVSINC=1   
    //写控制寄存器地址0X1D~0X20   
    //Command_data(0X1A,0X00);    //0X16   
    //Command_data(0X3A,0X00);    //0X17   
    //Command_data(0X06,0XC0);    //0X18  0XE0
    //Command_data(0X26,0XF8);    //0X19
    //delay(1000);
    //RC1 = 1;LATC1 = 1;
    //delay(15);
    //RC1 = 0;LATC1 = 0;          //Updata DDS Control Register for Constinue 8 SYS CLOCK
    //delay(1000);   
}

void Command_data(u08 DataAddress,u08 CommandData)
{
     
    PORTB = DataAddress;
    LATB = DataAddress;         //RB0~RB5 for A5~A0
    PORTE = CommandData;
    LATE = CommandData;         //RE0~RE7 for D7~D0  
    RC0 = 0; LATC0 = 0;                        
    RC0 = 1; LATC0 = 1;        //上升沿写地址和数据                          
}
   
void UpDate_FWord(void)
{
    Command_data(0X24,0X66);  //0X09 00 LSB 1/2FWT 80 00 00 00 00 00
    Command_data(0X04,0X66);  //0X08 00    160M 20 00 00 00 00 00
    Command_data(0X38,0X66);  //0X07 00  200M 19 99 99 99 99 99
    Command_data(0X18,0X66);  //0X06 00 //400000000000  
    Command_data(0X28,0X66);  //0X05 00   6 66 66 66 66 66
    Command_data(0X08,0X60);  //0X04 40 MSB  6 66 66 66 66 66
   //写DDS FWORD 地址:MSB 0X04~0X09 LSB//48Bits  
    DDS_UD = 1;LATC1 = 1;
    delay(15);
    DDS_UD = 0;LATC1 = 0;
}

void delay(u16 Tdata)
{
    while(Tdata--) {;};
}

void PSet_mv_AD9852Chan(void)
{
    Command_data( 0X19, 0XF0);   
    //0.5v--111111111111  0.0v---000000000000  4096 for 492mv
    Command_data( 0X39, 0X0FF);   //AMP Address 0X26,0X27
}

void PWriteAD9852Amp(void)
{
    Command_data( 0x21, 0XF0);   
    //0.5v--111111111111  0.0v---000000000000  4096 for 492mv
    Command_data( 0x11, 0X0FF);   //AMP Address 0X21,0X22
}

void UpDate_PWord(void)
{
    Command_data( 0x00,0X28);   //MSB  0x00
    Command_data( 0x20,0XAA);   //LSB  0x01 Phase1
   // DDS_UD = 1;LATC1=1;
    //asm("nop");
    //DDS_UD = 0;LATC1=0;
}

void PReadAD9854(u08 ucAdd)
{
    u08 tmp;
    DDS_RD = 0;
    PORTB = ucAdd;
    DDS_RD = 1;
    tmp = PORTE;
    if((tmp&&0X40)==1)  {RG2=0;LATG2=0;};
}

出0入0汤圆

 楼主| 发表于 2009-10-22 16:19:27 | 显示全部楼层
dds.h
#ifndef _DDS_h_
#define        _DDS_h_

#define PIC18F6527
#include <pic18.h>
#include "typedefine.h"

//函数定义
extern void init_dds(void);             //DDS初始化函数
extern void delay(u16 Tdata);           //延时程序
extern void UpDate_FWord(void);         //设置频率控制字
extern void UpDate_PWord(void);   //设置相位控制字
extern void UpDate_AWord(u08 *AWord);   //输出幅度控制
extern void Command_data(u08 DataAddress,u08 CommandData);//并行模式下写DDS寄存器地址和数据
extern void PWriteAD9852Amp(void);  // 输出幅度控制
extern void PSet_mv_AD9852Chan(void);
extern void PReadAD9854(u08 ucAdd);

//常量定义
#define  DDS_WR  RC0
#define  DDS_UD  RC1
#define  DDS_FSK RC2
#define  DDS_OSK RC3
#define  DDS_RD  RC4
#define  MASTER  RC5

//变量定义
//const u08 FWord[6] = {0X40,0X00,0X00,0X00,0X00,0X00};  //40M
//const u08 PWord[2]={0X50,0X55};  //30
u08 AWord[2];
u08 PWord1,PWord2;
u08 AWord1,AWord2;
#endif

出0入0汤圆

 楼主| 发表于 2009-10-22 16:19:46 | 显示全部楼层
#define PIC18F6527
#include <pic18.h>
#include "typedefine.h"
#include "main.h"
extern void init_device(void);
extern void UpDate_FWord(void);
extern void init_dds(void);
extern void PWriteAD9852Amp(void);
extern void UpDate_PWord(void);
extern void delay(u16 Tdata);
extern void PReadAD9854(u08 ucAdd);
extern void PSet_mv_AD9852Chan(void);
void main(void)
{  
   OSCTUNE = 0X40;
   OSCCON = 0X70;
   init_device();
   init_dds();
   delay((u16)2000);
   UpDate_PWord();
   UpDate_FWord();
   PWriteAD9852Amp();
   PSet_mv_AD9852Chan();
   RC1 = 1;LATC1=1;
   delay(12);
   RC1 = 0;LATC1=0;
   while(1);
}

出0入0汤圆

 楼主| 发表于 2009-10-22 16:20:23 | 显示全部楼层
单片机I/O口初始化
#include <pic18.h>
#include "typedefine.h"
#include "init.h"

void init_device(void)
{   
    ADCON1 = 0X0F;   //ANOLOG bits forbit
    INTCON =0X00;  
    INTCON2=0X00;
    INTCON3=0X00;
    //I/O A/B/C/D/E/F/G
    PORTA = 0X00;
    LATA  = 0X00;
    TRISA = 0B00000000;     
    PORTB = 0X00;
    LATB  = 0X00;
    TRISB = 0X00;     //RB0~RB5 for DDS ADDR Bits(A5~A0)
    PORTC = 0X00;
    LATC  = 0X00;
    TRISC = 0B10000000;
    PORTD = 0X00;
    LATD  = 0X00;
    TRISD = 0B00100000;
    PORTE = 0X00;
    LATE  = 0X00;
    TRISE = 0X00;    //RE0~RE7 for DDS DATA Bits(D7~0)
    PORTF = 0X00;
    LATF  = 0X00;
    TRISF = 0B00000000;
    PORTG = 0X00;
    LATG  = 0X00;
    TRISG = 0B00100000;
}

出0入0汤圆

 楼主| 发表于 2009-10-22 16:20:44 | 显示全部楼层
希望高手指点指点

出0入0汤圆

 楼主| 发表于 2009-10-22 16:22:33 | 显示全部楼层
程序基本上结合AD公司AD9854的汇编程序和网上流传的DDS测试程序写的。。现在大脑一片空白。。望高手指正

出0入0汤圆

 楼主| 发表于 2009-10-22 16:30:03 | 显示全部楼层
外部用单端40M晶振,4倍频。。想输出4MHZ的频率

出0入0汤圆

发表于 2009-10-22 17:40:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-22 20:03:01 | 显示全部楼层
DDS关注

出0入0汤圆

 楼主| 发表于 2009-10-23 08:06:07 | 显示全部楼层
呵呵。。。DDS可以跑了。。软件没问题。大家可以把它做测试软件吧。。不过做DDS方面。。硬件一定要注意哟。。发热量很大。

出0入0汤圆

发表于 2011-8-1 23:37:10 | 显示全部楼层
回复【10楼】gg_sun321
-----------------------------------------------------------------------

我用你的程序  没有结果的   能够知道一下么?
我的QQ  :  465248129  谢谢啦

出0入0汤圆

发表于 2012-4-23 13:30:02 | 显示全部楼层
你有ISIS 7 Professional仿真图没?发给我,我试试,邮箱:240923760@qq.com     谢谢...

出0入0汤圆

发表于 2014-4-7 19:10:25 | 显示全部楼层
最新9854 DDS模块增加美观实用的散热片,新增2013年全国大学生电子竞赛E题正交扫频源完整例程(可实现题目1~40M扫频功能,并可以通过按键和液晶屏设置和显示扫频参数)。
详情请见:http://item.taobao.com/item.htm?id=8643082098
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 06:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表