AD9832 DDS Sinewave (Based on MLabo's AD9834 DDS Sinewave)
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /*AD9834 DDS Test 2011/07/14 MLabo*/ 00002 /*AD9832 DDS Test based on 2011/07/14 MLabo, by Sakura,Fuyuno */ 00003 #include "mbed.h" 00004 00005 #define XTAL_FREQ ((double)16160000.0) 00006 00007 DigitalOut FSYN(p8); 00008 DigitalOut SCLK(p7); 00009 DigitalOut SDATA(p5); 00010 Serial pc(USBTX,USBRX); 00011 00012 void serial_out(uint16_t data) { 00013 FSYN = 0; 00014 data & 0x8000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00015 data & 0x4000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00016 data & 0x2000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00017 data & 0x1000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00018 data & 0x0800? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00019 data & 0x0400? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00020 data & 0x0200? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00021 data & 0x0100? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00022 data & 0x0080? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00023 data & 0x0040? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00024 data & 0x0020? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00025 data & 0x0010? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00026 data & 0x0008? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00027 data & 0x0004? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00028 data & 0x0002? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00029 data & 0x0001? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1; 00030 FSYN = 1; 00031 } 00032 00033 typedef union { 00034 uint32_t UI; 00035 uint8_t B[4]; 00036 } FREQDATA ; 00037 00038 void AD9832_Init(void) { 00039 FREQDATA FreqReg ; 00040 FreqReg.UI = 0 ; 00041 serial_out(0xF800); 00042 serial_out(0x3300 + FreqReg.B[3]); 00043 serial_out(0x2200 + FreqReg.B[2]); 00044 serial_out(0x3100 + FreqReg.B[1]); 00045 serial_out(0x2000 + FreqReg.B[0]); 00046 serial_out(0xC000); 00047 } 00048 00049 void AD9832_SetFreq(double freq) { 00050 FREQDATA FreqReg ; 00051 FreqReg.UI = (uint32_t)(freq * (double)(0x100000000UL) / (XTAL_FREQ) + 0.5); 00052 serial_out(0x3300 + FreqReg.B[3]); 00053 serial_out(0x2200 + FreqReg.B[2]); 00054 serial_out(0x3100 + FreqReg.B[1]); 00055 serial_out(0x2000 + FreqReg.B[0]); 00056 } 00057 00058 int main() { 00059 double freq ; 00060 char buf[256] ; 00061 int i,ptr ; 00062 00063 pc.baud(38400); 00064 SCLK = 1; 00065 SDATA = 0; 00066 FSYN = 1; 00067 AD9832_Init(); 00068 AD9832_SetFreq(60.0) ; 00069 while(1) { 00070 pc.printf("\r\nAD9832>"); 00071 ptr = 0; 00072 while(1) { 00073 if (pc.readable()) { 00074 i = pc.getc() ; 00075 if (i == 0x0D) { 00076 buf[ptr] = '\0' ; 00077 break ; 00078 } 00079 pc.putc(i) ; 00080 buf[ptr++] = i ; 00081 } 00082 } 00083 freq = atof(buf) ; 00084 pc.printf("\r\nFreq SET:%g",freq); 00085 AD9832_SetFreq(freq) ; 00086 } 00087 }
Generated on Sat Jul 16 2022 15:50:38 by 1.7.2