increase/decrease freq by 0.1 MHz over serial
[Arduino] / AD9850 / AD9850.ino
index 19a1cef..a52ac68 100644 (file)
@@ -7,14 +7,16 @@
  * Use freely
  */
  
- #define W_CLK 8       // Pin 8 - connect to AD9850 module word load clock pin (CLK)
- #define FQ_UD 9       // Pin 9 - connect to freq update pin (FQ)
- #define DATA 10       // Pin 10 - connect to serial data load pin (DATA)
- #define RESET 11      // Pin 11 - connect to reset pin (RST).
+#define W_CLK 8       // Pin 8 - connect to AD9850 module word load clock pin (CLK)
+#define FQ_UD 9       // Pin 9 - connect to freq update pin (FQ)
+#define DATA 10       // Pin 10 - connect to serial data load pin (DATA)
+#define RESET 11      // Pin 11 - connect to reset pin (RST).
  
- #define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
+#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
+
+double user_freq = 1.e6; // 10.e6
  
- // transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
+// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
 void tfr_byte(byte data)
 {
   for (int i=0; i<8; i++, data>>=1) {
@@ -22,8 +24,9 @@ void tfr_byte(byte data)
     pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
   }
 }
+
  
- // frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
+// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
 void sendFrequency(double frequency) {
   int32_t freq = frequency * 4294967295/125000000;  // note 125 MHz clock on 9850
   for (int b=0; b<4; b++, freq>>=8) {
@@ -31,7 +34,12 @@ void sendFrequency(double frequency) {
   }
   tfr_byte(0x000);   // Final control byte, all 0 for 9850 chip
   pulseHigh(FQ_UD);  // Done!  Should see output
+  
+  Serial.print("Freq = ");
+  Serial.print((frequency / 1.e6), 4);
+  Serial.println(" MHz");
 }
+
  
 void setup() {
  // configure arduino data pins for output
@@ -43,9 +51,23 @@ void setup() {
   pulseHigh(RESET);
   pulseHigh(W_CLK);
   pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
+  
+  Serial.begin(9600);
+  sendFrequency(user_freq);
 }
+
+double freq_step = 1.e5; // 0.1 MHz
+
 void loop() {
-  sendFrequency(10.e6);  // 10.e6 freq
-  while(1);
+  if (Serial.available()) {
+     int inByte = Serial.read();
+     Serial.println(inByte, DEC);
+     if (inByte == 43 || inByte == 61) { // + or =
+       user_freq += freq_step;
+       sendFrequency(user_freq);
+     } else if ( inByte == 45 ) {
+       user_freq -= freq_step; 
+       sendFrequency(user_freq);
+     }
+  }
 }