I intend to expand it soon to include a tuning input (maybe push buttons, may be a knob...?) and a display of the frequency (that should be easy).
The module I used was just $3.5 on eBay!! And it is on sale from numerous suppliers in China - plus on in UK for £103!!! Clown.
Here's the setup
It is extremely easy to use the module, just four connections if in the serial communications mode set by pulsing FQ high.
This is the code
// DDS-9850 module programmer
#define W_CLK 8 // Pin 8 CLK
#define FQ_UD 9 // Pin 9 FQ
#define DATA 10 // Pin 10 DATA
#define RESET 11 // Pin 11 RST
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
void setup()
{
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD); // this pulse enables serial mode
}
void loop()
{
sendFrequency(14.23e6); // freq MHz e6
while(1);
}
// transfers a byte, a bit at a time, LSB first via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1)
{
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
// frequency calc from datasheet page 8 = * /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(freq & 0xFF);
}
tfr_byte(0x000); // Final control byte, all 0
pulseHigh(FQ_UD);
} I have so far only tested it by generating the 14.230MHz signal you can see it is programmed for and listening on an experimental SSTV receiver that I have nearly completed - more news soon.
No comments:
Post a Comment