AD9852求救。。。刚做会DDS PCB 按照AD公司AD9854编写的程序。。输出不出来。。那位
波形一直出不来。。高手给看看。。 程序如下:#define PIC18F6527
#include <pic18.h>
#include "typedefine.h"
#include "DDS.h"
/**********************************************************
//DDS AD9852 control register 0X1D~0X20
//ADDR 0X1D
bit7 6 5 4 3 2 1 0
NC NCNCCOMPPD LOW CONTROL DACPD DIGPD//00010000 0X10
DACPD
//ADDR 0X1E
bit7 6 5 4 3 2 1 0
NC PLLRANGE BYPASSmult4 mult3 mult2 mult1 mult0 //01000100 0X44
PLL
//ADDR 0X1F
bit7 6 5 4 3 2 1 0
ACC1 ACC2 TRIANGE NC MODE2 MODE1 MODE0 INT/EXTUpclock //00000000 0X00
//ADDR 0X20
bit7 6 5 4 3 2 1 0
NCBYPASSOSKEN 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); //0X180XE0
//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 00200M 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 MSB6 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--1111111111110.0v---0000000000004096 for 492mv
Command_data( 0X39, 0X0FF); //AMP Address 0X26,0X27
}
void PWriteAD9852Amp(void)
{
Command_data( 0x21, 0XF0);
//0.5v--1111111111110.0v---0000000000004096 for 492mv
Command_data( 0x11, 0X0FF); //AMP Address 0X21,0X22
}
void UpDate_PWord(void)
{
Command_data( 0x00,0X28); //MSB0x00
Command_data( 0x20,0XAA); //LSB0x01 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;};
} 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);
//常量定义
#defineDDS_WRRC0
#defineDDS_UDRC1
#defineDDS_FSK RC2
#defineDDS_OSK RC3
#defineDDS_RDRC4
#defineMASTERRC5
//变量定义
//const u08 FWord = {0X40,0X00,0X00,0X00,0X00,0X00};//40M
//const u08 PWord={0X50,0X55};//30
u08 AWord;
u08 PWord1,PWord2;
u08 AWord1,AWord2;
#endif #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);
} 单片机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;
} 希望高手指点指点 程序基本上结合AD公司AD9854的汇编程序和网上流传的DDS测试程序写的。。现在大脑一片空白。。望高手指正 外部用单端40M晶振,4倍频。。想输出4MHZ的频率 mark DDS关注 呵呵。。。DDS可以跑了。。软件没问题。大家可以把它做测试软件吧。。不过做DDS方面。。硬件一定要注意哟。。发热量很大。 回复【10楼】gg_sun321
-----------------------------------------------------------------------
我用你的程序没有结果的 能够知道一下么?
我的QQ:465248129谢谢啦 你有ISIS 7 Professional仿真图没?发给我,我试试,邮箱:240923760@qq.com 谢谢... 最新9854 DDS模块增加美观实用的散热片,新增2013年全国大学生电子竞赛E题正交扫频源完整例程(可实现题目1~40M扫频功能,并可以通过按键和液晶屏设置和显示扫频参数)。
详情请见:http://item.taobao.com/item.htm?id=8643082098
页:
[1]