DDS AD9832 and DPM AD5235 Control Test Program

Dependencies:   mbed

Committer:
mio
Date:
Wed May 30 01:41:50 2012 +0000
Revision:
0:fd709b6d9199
DDS and DPM Control Test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mio 0:fd709b6d9199 1 /*AD9834 DDS Test 2011/07/14 MLabo*/
mio 0:fd709b6d9199 2 /*AD9832 DDS Test based on 2011/07/14 MLabo, by Fuyuno,Sakura */
mio 0:fd709b6d9199 3 /*AD5235 DPM Test based on AD9832 DDS Test by Fuyuno,Sakura */
mio 0:fd709b6d9199 4 /*AD5235 DPM and AD9832 DDS Test by Fuyuno,Sakura */
mio 0:fd709b6d9199 5 #include "mbed.h"
mio 0:fd709b6d9199 6
mio 0:fd709b6d9199 7 // Signal pair(SCLK:SCLKD,SDATA:SDI) may share same pins....
mio 0:fd709b6d9199 8 // Usage : 38400bps 8N1 , '*' cmd is change control target
mio 0:fd709b6d9199 9
mio 0:fd709b6d9199 10 // SPI for DPM
mio 0:fd709b6d9199 11 DigitalOut CS(p8);
mio 0:fd709b6d9199 12 DigitalOut SCLK(p7);
mio 0:fd709b6d9199 13 DigitalOut SDI(p5);
mio 0:fd709b6d9199 14
mio 0:fd709b6d9199 15 // SPI for DDS
mio 0:fd709b6d9199 16 DigitalOut FSYN(p14);
mio 0:fd709b6d9199 17 DigitalOut SCLKD(p13);
mio 0:fd709b6d9199 18 DigitalOut SDATA(p11);
mio 0:fd709b6d9199 19
mio 0:fd709b6d9199 20 Serial pc(USBTX,USBRX);
mio 0:fd709b6d9199 21
mio 0:fd709b6d9199 22 #define XTAL_FREQ ((double)16160000.0)
mio 0:fd709b6d9199 23
mio 0:fd709b6d9199 24 void serial_out(uint16_t data) {
mio 0:fd709b6d9199 25 FSYN = 0;
mio 0:fd709b6d9199 26 data & 0x8000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 27 data & 0x4000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 28 data & 0x2000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 29 data & 0x1000? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 30 data & 0x0800? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 31 data & 0x0400? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 32 data & 0x0200? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 33 data & 0x0100? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 34 data & 0x0080? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 35 data & 0x0040? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 36 data & 0x0020? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 37 data & 0x0010? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 38 data & 0x0008? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 39 data & 0x0004? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 40 data & 0x0002? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 41 data & 0x0001? SDATA = 1 : SDATA = 0; SCLKD = 0; SCLKD = 1;
mio 0:fd709b6d9199 42 FSYN = 1;
mio 0:fd709b6d9199 43 }
mio 0:fd709b6d9199 44
mio 0:fd709b6d9199 45 typedef union {
mio 0:fd709b6d9199 46 uint32_t UI;
mio 0:fd709b6d9199 47 uint8_t B[4];
mio 0:fd709b6d9199 48 } FREQDATA ;
mio 0:fd709b6d9199 49
mio 0:fd709b6d9199 50 void AD9832_Init(void) {
mio 0:fd709b6d9199 51 FREQDATA FreqReg ;
mio 0:fd709b6d9199 52 FreqReg.UI = 0 ;
mio 0:fd709b6d9199 53 serial_out(0xF800);
mio 0:fd709b6d9199 54 serial_out(0x3300 + FreqReg.B[3]);
mio 0:fd709b6d9199 55 serial_out(0x2200 + FreqReg.B[2]);
mio 0:fd709b6d9199 56 serial_out(0x3100 + FreqReg.B[1]);
mio 0:fd709b6d9199 57 serial_out(0x2000 + FreqReg.B[0]);
mio 0:fd709b6d9199 58 serial_out(0xC000);
mio 0:fd709b6d9199 59 }
mio 0:fd709b6d9199 60
mio 0:fd709b6d9199 61 void AD9832_SetFreq(double freq) {
mio 0:fd709b6d9199 62 FREQDATA FreqReg ;
mio 0:fd709b6d9199 63 FreqReg.UI = (uint32_t)(freq * (double)(0x100000000UL) / (XTAL_FREQ) + 0.5);
mio 0:fd709b6d9199 64 serial_out(0x3300 + FreqReg.B[3]);
mio 0:fd709b6d9199 65 serial_out(0x2200 + FreqReg.B[2]);
mio 0:fd709b6d9199 66 serial_out(0x3100 + FreqReg.B[1]);
mio 0:fd709b6d9199 67 serial_out(0x2000 + FreqReg.B[0]);
mio 0:fd709b6d9199 68 }
mio 0:fd709b6d9199 69
mio 0:fd709b6d9199 70 void serial_out24(uint32_t data) {
mio 0:fd709b6d9199 71 CS = 0;
mio 0:fd709b6d9199 72 data & 0x800000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 73 data & 0x400000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 74 data & 0x200000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 75 data & 0x100000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 76 data & 0x080000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 77 data & 0x040000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 78 data & 0x020000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 79 data & 0x010000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 80 data & 0x008000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 81 data & 0x004000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 82 data & 0x002000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 83 data & 0x001000? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 84 data & 0x000800? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 85 data & 0x000400? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 86 data & 0x000200? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 87 data & 0x000100? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 88 data & 0x000080? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 89 data & 0x000040? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 90 data & 0x000020? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 91 data & 0x000010? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 92 data & 0x000008? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 93 data & 0x000004? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 94 data & 0x000002? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 95 data & 0x000001? SDI = 1 : SDI = 0; SCLK = 0; SCLK = 1;
mio 0:fd709b6d9199 96 CS = 1;
mio 0:fd709b6d9199 97 }
mio 0:fd709b6d9199 98
mio 0:fd709b6d9199 99 // Writes data X to the RDAC1 register,
mio 0:fd709b6d9199 100 void AD5235_SET(int chan,int value) {
mio 0:fd709b6d9199 101 uint32_t cmd ;
mio 0:fd709b6d9199 102 cmd = 0xB00000 | ((chan == 1) ? 0x010000 : 0x000000) | (value & 0x03FF) ;
mio 0:fd709b6d9199 103 serial_out24(cmd);
mio 0:fd709b6d9199 104 }
mio 0:fd709b6d9199 105
mio 0:fd709b6d9199 106 void AD5235_SAVE(int chan) {
mio 0:fd709b6d9199 107 uint32_t cmd ;
mio 0:fd709b6d9199 108 cmd = 0x200000 | ((chan == 1) ? 0x010000 : 0x000000) ;
mio 0:fd709b6d9199 109 serial_out24(cmd);
mio 0:fd709b6d9199 110 }
mio 0:fd709b6d9199 111
mio 0:fd709b6d9199 112 int main() {
mio 0:fd709b6d9199 113 double freq = 60.0;
mio 0:fd709b6d9199 114 int val ;
mio 0:fd709b6d9199 115 char buf[256] ;
mio 0:fd709b6d9199 116 int i,ptr ;
mio 0:fd709b6d9199 117
mio 0:fd709b6d9199 118 int chan = 1 ;
mio 0:fd709b6d9199 119
mio 0:fd709b6d9199 120 pc.baud(38400);
mio 0:fd709b6d9199 121 SCLK = 1;
mio 0:fd709b6d9199 122 SDI = 0;
mio 0:fd709b6d9199 123 CS = 1;
mio 0:fd709b6d9199 124
mio 0:fd709b6d9199 125 SCLKD = 1;
mio 0:fd709b6d9199 126 SDATA = 0;
mio 0:fd709b6d9199 127 FSYN = 1;
mio 0:fd709b6d9199 128
mio 0:fd709b6d9199 129 AD9832_Init();
mio 0:fd709b6d9199 130 AD9832_SetFreq(freq) ;
mio 0:fd709b6d9199 131 while(1) {
mio 0:fd709b6d9199 132 while (1) {
mio 0:fd709b6d9199 133 pc.printf("\r\nAD5235>");
mio 0:fd709b6d9199 134 ptr = 0;
mio 0:fd709b6d9199 135 while(1) {
mio 0:fd709b6d9199 136 if (pc.readable()) {
mio 0:fd709b6d9199 137 i = pc.getc() ;
mio 0:fd709b6d9199 138 if (i == 0x0D) {
mio 0:fd709b6d9199 139 buf[ptr] = '\0' ;
mio 0:fd709b6d9199 140 break ;
mio 0:fd709b6d9199 141 }
mio 0:fd709b6d9199 142 pc.putc(i) ;
mio 0:fd709b6d9199 143 buf[ptr++] = i ;
mio 0:fd709b6d9199 144 }
mio 0:fd709b6d9199 145 }
mio 0:fd709b6d9199 146 if (buf[0] == '*') break ;
mio 0:fd709b6d9199 147 val = atoi(buf) ;
mio 0:fd709b6d9199 148 AD5235_SET(chan,val) ;
mio 0:fd709b6d9199 149 //AD5235_SAVE(chan) ;
mio 0:fd709b6d9199 150 pc.printf("\r\nRVAL SET to Chan %d to %04X",chan,val);
mio 0:fd709b6d9199 151 }
mio 0:fd709b6d9199 152 while(1) {
mio 0:fd709b6d9199 153 pc.printf("\r\nAD9832>");
mio 0:fd709b6d9199 154 ptr = 0;
mio 0:fd709b6d9199 155 while(1) {
mio 0:fd709b6d9199 156 if (pc.readable()) {
mio 0:fd709b6d9199 157 i = pc.getc() ;
mio 0:fd709b6d9199 158 if (i == 0x0D) {
mio 0:fd709b6d9199 159 buf[ptr] = '\0' ;
mio 0:fd709b6d9199 160 break ;
mio 0:fd709b6d9199 161 }
mio 0:fd709b6d9199 162 pc.putc(i) ;
mio 0:fd709b6d9199 163 buf[ptr++] = i ;
mio 0:fd709b6d9199 164 }
mio 0:fd709b6d9199 165 }
mio 0:fd709b6d9199 166 if (buf[0] == '*') break ;
mio 0:fd709b6d9199 167 freq = atof(buf) ;
mio 0:fd709b6d9199 168 pc.printf("\r\nFreq SET:%g",freq);
mio 0:fd709b6d9199 169 AD9832_SetFreq(freq) ;
mio 0:fd709b6d9199 170 }
mio 0:fd709b6d9199 171 }
mio 0:fd709b6d9199 172 }