* 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) {
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) {
}
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
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);
+ }
+ }
}