AD9834 DDS Sinewave

Dependencies:   TextLCD mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*AD9834 DDS Test 2011/07/14 MLabo*/
00002 #include "mbed.h"
00003 #include "TextLCD.h"
00004 
00005 TextLCD lcd(p24, p26, p27, p28, p29, p30); //Starboard Orenge
00006 DigitalOut FSYNC(p18);
00007 DigitalOut SCLK(p19);
00008 DigitalOut SDATA(p20);
00009 
00010 Timer timer;
00011 
00012 void serial_out(uint16_t data) {
00013 
00014     FSYNC = 0;
00015     data & 0x8000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00016     data & 0x4000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00017     data & 0x2000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00018     data & 0x1000? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00019     data & 0x0800? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00020     data & 0x0400? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00021     data & 0x0200? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00022     data & 0x0100? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00023     data & 0x0080? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00024     data & 0x0040? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00025     data & 0x0020? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00026     data & 0x0010? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00027     data & 0x0008? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00028     data & 0x0004? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00029     data & 0x0002? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00030     data & 0x0001? SDATA = 1 : SDATA = 0; SCLK = 0; SCLK = 1;
00031     FSYNC = 1;
00032 }
00033 
00034 int main() {
00035     float SetFreq;
00036     uint32_t temp, freqdata;
00037     uint16_t Uptemp, Lowtemp;
00038     int begin, end;
00039 
00040     SCLK = 1;
00041     SDATA = 0;
00042     FSYNC = 1;
00043 
00044     lcd.cls();
00045     lcd.locate(0,0);
00046     lcd.printf("AD9834 test" );
00047 
00048     timer.start();
00049     begin = timer.read_us();
00050     for ( freqdata = 0; freqdata < 16000000; freqdata++) {
00051 
00052         SetFreq = 5.592405 * (uint32_t)freqdata;
00053         temp = (uint32_t)SetFreq;
00054         Lowtemp = (uint16_t)(temp & 0x3FFF);
00055         Uptemp = (uint16_t)((temp/16384) & 0x3FFF);
00056         serial_out(0x2028);
00057         serial_out(Lowtemp + 0x4000);
00058         serial_out(Uptemp + 0x4000);
00059     }
00060     end = timer.read_us();
00061     lcd.locate(0,1);
00062     lcd.printf("%duS", end - begin);
00063     while (1) {}
00064 
00065 }