A port of AD9850/51 code from Arduino source. This port allows direct input of the frequency in Mega Hertz rather than a series of Hex digits as in Liam Goudges program.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
alan_matheson
Date:
Sun Feb 09 23:13:55 2014 +0000
Child:
1:44d13dabc8e9
Commit message:
Initial port of AD9850 program from Arduino

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Feb 09 23:13:55 2014 +0000
@@ -0,0 +1,85 @@
+#include "mbed.h"
+
+/* 
+ * A simple single freq AD9850 Arduino test script
+ * Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
+ * Modified for testing the inexpensive AD9850 ebay DDS modules
+ * Pictures and pinouts at nr8o.dhlpilotcentral.com
+ * 9850 datasheet at http://www.analog.com/static/imported-files/data_sheets/AD9850.pdf
+ * Use freely
+ */
+ 
+ 
+ //efine W2_CLK      // connect to AD9850 module2 word load clock pin (CLK) 
+ //efine W1_CLK 12   // connect to AD9850 module1 word load clock pin (CLK)
+ //efine FQ_UD p5    // connect to freq update pin (FQ)
+ //efine DATA 10     // connect to serial data load pin (DATA)
+ //efine RESET 9     // connect to reset pin (RST).
+ 
+ #define pulseHigh(pin) {pin = 1; pin = 0; }
+
+
+
+ // configure data pins for output
+  DigitalOut FQ_UD(p8);
+  DigitalOut W_CLK(p7);
+  DigitalOut DATA(p5);
+  DigitalOut RESET(p15);
+  
+  
+
+ 
+ // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
+void tfr_byte_module1(char data)
+{
+  for (int i=0; i<8; i++, data>>=1) {
+  DATA = (data & 0x01);
+  pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
+  }
+}
+
+void tfr_byte_module2(char data)
+{
+  for (int i=0; i<8; i++, data>>=1) {
+    DATA =  (data & 0x01);
+    pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
+  }
+}
+
+
+// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
+void sendFrequency(double frequency) {
+  int32_t freq = frequency *1e6 * 4294967295/125000000;  // note 125 MHz clock on 9850
+  for (int b=0; b<4; b++, freq>>=8) {
+    tfr_byte_module1(freq & 0xFF);
+  }
+  tfr_byte_module1(0X38);   // Final control byte, all 0 for 9850 chip
+ }
+
+
+int main()
+{
+double frequency;
+
+// Initialise the AD9850 module
+ pulseHigh(RESET);
+ pulseHigh(W_CLK);
+ pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
+
+
+
+
+
+while(1)
+  {
+   frequency = 10.0034;
+     {
+      sendFrequency(frequency);
+      pulseHigh(FQ_UD);
+     wait(5.0);
+          } 
+ }
+
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Sun Feb 09 23:13:55 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f
\ No newline at end of file