AD9832 DDS Sinewave (Based on MLabo's AD9834 DDS Sinewave)

Dependencies:   mbed

Committer:
mio
Date:
Mon May 28 00:21:06 2012 +0000
Revision:
0:df9eb1db9177
Child:
1:323280ad1468
Add "Change Freq" interface by mbed pc-serial

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mio 0:df9eb1db9177 1 /*AD9834 DDS Test 2011/07/14 MLabo*/
mio 0:df9eb1db9177 2 /*AD9832 DDS Test based on 2011/07/14 MLabo, by Sakura,Fuyuno */
mio 0:df9eb1db9177 3 #include "mbed.h"
mio 0:df9eb1db9177 4 #include "TextLCD.h"
mio 0:df9eb1db9177 5
mio 0:df9eb1db9177 6 #define XTAL_FREQ ((double)16160000.0)
mio 0:df9eb1db9177 7
mio 0:df9eb1db9177 8 DigitalOut FSYNC(p8);
mio 0:df9eb1db9177 9 DigitalOut SCLK(p7);
mio 0:df9eb1db9177 10 DigitalOut SDATA(p5);
mio 0:df9eb1db9177 11 Serial pc(USBTX,USBRX);
mio 0:df9eb1db9177 12
mio 0:df9eb1db9177 13 void serial_out(uint16_t data) {
mio 0:df9eb1db9177 14 FSYNC = 0;
mio 0:df9eb1db9177 15 data & 0x8000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 16 data & 0x4000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 17 data & 0x2000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 18 data & 0x1000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 19 data & 0x0800? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 20 data & 0x0400? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 21 data & 0x0200? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 22 data & 0x0100? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 23 data & 0x0080? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 24 data & 0x0040? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 25 data & 0x0020? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 26 data & 0x0010? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 27 data & 0x0008? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 28 data & 0x0004? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 29 data & 0x0002? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 30 data & 0x0001? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
mio 0:df9eb1db9177 31 FSYNC = 1;
mio 0:df9eb1db9177 32 }
mio 0:df9eb1db9177 33
mio 0:df9eb1db9177 34 typedef union {
mio 0:df9eb1db9177 35 uint32_t UI;
mio 0:df9eb1db9177 36 uint8_t B[4];
mio 0:df9eb1db9177 37 } FREQDATA ;
mio 0:df9eb1db9177 38
mio 0:df9eb1db9177 39 void AD9832_Init(void) {
mio 0:df9eb1db9177 40 FREQDATA FreqReg ;
mio 0:df9eb1db9177 41 FreqReg.UI = 0 ;
mio 0:df9eb1db9177 42 serial_out(0xF800);
mio 0:df9eb1db9177 43 serial_out(0x3300 + FreqReg.B[3]);
mio 0:df9eb1db9177 44 serial_out(0x2200 + FreqReg.B[2]);
mio 0:df9eb1db9177 45 serial_out(0x3100 + FreqReg.B[1]);
mio 0:df9eb1db9177 46 serial_out(0x2000 + FreqReg.B[0]);
mio 0:df9eb1db9177 47 serial_out(0xC000);
mio 0:df9eb1db9177 48 }
mio 0:df9eb1db9177 49
mio 0:df9eb1db9177 50 void AD9832_SetFreq(double freq) {
mio 0:df9eb1db9177 51 FREQDATA FreqReg ;
mio 0:df9eb1db9177 52 FreqReg.UI = (uint32_t)(freq * (double)(0x100000000UL) / (XTAL_FREQ) + 0.5);
mio 0:df9eb1db9177 53 serial_out(0x3300 + FreqReg.B[3]);
mio 0:df9eb1db9177 54 serial_out(0x2200 + FreqReg.B[2]);
mio 0:df9eb1db9177 55 serial_out(0x3100 + FreqReg.B[1]);
mio 0:df9eb1db9177 56 serial_out(0x2000 + FreqReg.B[0]);
mio 0:df9eb1db9177 57 }
mio 0:df9eb1db9177 58
mio 0:df9eb1db9177 59 int main() {
mio 0:df9eb1db9177 60 double freq ;
mio 0:df9eb1db9177 61 char buf[256] ;
mio 0:df9eb1db9177 62 int i,ptr ;
mio 0:df9eb1db9177 63
mio 0:df9eb1db9177 64 pc.baud(38400);
mio 0:df9eb1db9177 65 SCLK = 1;
mio 0:df9eb1db9177 66 SDATA = 0;
mio 0:df9eb1db9177 67 FSYNC = 1;
mio 0:df9eb1db9177 68 AD9832_Init();
mio 0:df9eb1db9177 69 AD9832_SetFreq(60.0) ;
mio 0:df9eb1db9177 70 while(1) {
mio 0:df9eb1db9177 71 pc.printf("\r\nAD9832>");
mio 0:df9eb1db9177 72 ptr = 0;
mio 0:df9eb1db9177 73 while(1) {
mio 0:df9eb1db9177 74 if (pc.readable()) {
mio 0:df9eb1db9177 75 i = pc.getc() ;
mio 0:df9eb1db9177 76 if (i == 0x0D) {
mio 0:df9eb1db9177 77 buf[ptr] = '\0' ;
mio 0:df9eb1db9177 78 break ;
mio 0:df9eb1db9177 79 }
mio 0:df9eb1db9177 80 pc.putc(i) ;
mio 0:df9eb1db9177 81 buf[ptr++] = i ;
mio 0:df9eb1db9177 82 }
mio 0:df9eb1db9177 83 }
mio 0:df9eb1db9177 84 freq = atof(buf) ;
mio 0:df9eb1db9177 85 pc.printf("\r\nFreq SET:%g",freq);
mio 0:df9eb1db9177 86 AD9832_SetFreq(freq) ;
mio 0:df9eb1db9177 87 }
mio 0:df9eb1db9177 88 }