Designed as a building block for receivers, synthesizers, ...
✈ Motivation
This board was designed to serve as a building block for receivers. As it is very universal, it mayst be used in a lot of other applications, too.
As all other, similiar (known) boards use the clock multiplier, this board has a 400 MHz LVDS crystal oscillator in order to keep the noise
as low as possible (Approx. 20 - 30 dB below the multiplier-solution, see datasheet, p. 10). The amplifier used is a GALI-6+ which has a gain of
12 dB at a supply voltage of + 5 V. Together with R15 this shall deliver an output power of + 13 dBm. To keep the form-factor small,
0603 components have been used. As their number is manageable, this might as well serve as a soldering exercise. (for advanced students :-)
✈ Performance
Using the recommended resistor (Rset = 3.9 kΩ), the output power is ≈ -4 dBm. In order to reach the desired +13 dBm, we finally
used a GALI-51+. The power consumption was 160 mA @ 5.0 V. Looks like the lowpass filter mayst need some optimisation ...
As the "digital garbage" is very dominant, another board, based on the Si570 shall be designed.
✈ Programming
Programming the AD9859 Daughterboard is just a matter of shifting in 5 bytes of data. Not a big deal. From top to bottom, one can see
CLK, DATA, I/O Update and Chip Select. As we used MSB first, here, you see the first byte on the left holding the address of the FTW0 at 0x04.
One sequence will take approx. 120 ms, most of the time is used for delays. If you are in a hurry, it can be made much faster ...
✈ Test Sketch for Arduino/Genuino UNO
Double click on code to select ...
/* /////////////////////////////////////////////////////////////
ARDUINO/Genuino (UNO) Test/Demo Sketch for AD9859 DaughterBoard,
https://www.changpuak.ch/electronics/AD9859-DaughterBoard.php
Software Version 1.0,
28.07.2016, Alexander C. Frank
//////////////////////////////////////////////////////////////*/
// /////////////////////////////////////////////////////////////
// DDS PINS
// /////////////////////////////////////////////////////////////
const int RESET = 13; // connected to Pin 20 of K2
const int CS = 12; // connected to Pin 19 of K2
const int CLK = 11; // connected to Pin 18 of K2
const int DIO = 10; // connected to Pin 17 of K2
const int IOUpDate = 9; // connected to Pin 9 of K2
unsigned long DDS_CLOCK = 400000000 ; // PLUS MINUS SOME PPM
unsigned long FREQ = 120527000 ; // YES, it's a birthday :-)
// /////////////////////////////////////////////////////////////
// CLOCK OUT ONE BYTE, MSB FIRST
// /////////////////////////////////////////////////////////////
void TransMIT(byte data)
{
byte pointer = 0b10000000 ;
for (int i=0; i<8; i++)
{
if ((data & pointer) > 0) { digitalWrite(DIO, HIGH); }
else { digitalWrite(DIO, LOW); }
delay(1);
digitalWrite(CLK, HIGH);
delay(1);
digitalWrite(CLK, LOW);
delay(1);
pointer = pointer >> 1 ;
}
}
void SetFrequency(unsigned long frequenz)
{
unsigned long FTW = (frequenz * pow(2, 24)) / ( DDS_CLOCK/256 ) ;
byte Splitter ;
digitalWrite(CS, LOW);
TransMIT(0x04); // ADDRESS FTW0
Splitter = FTW >> 24; TransMIT(Splitter);
Splitter = FTW >> 16; TransMIT(Splitter);
Splitter = FTW >> 8; TransMIT(Splitter);
Splitter = FTW ; TransMIT(Splitter);
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
}
void setup() {
pinMode(RESET, OUTPUT);
pinMode(CS, OUTPUT);
pinMode(CLK, OUTPUT);
pinMode(DIO, OUTPUT);
pinMode(IOUpDate, OUTPUT);
digitalWrite(RESET, LOW);
digitalWrite(CS, HIGH);
digitalWrite(CLK, LOW);
digitalWrite(DIO, LOW);
digitalWrite(IOUpDate, LOW);
digitalWrite(RESET, HIGH);
delay(20);
digitalWrite(RESET, LOW);
// /////////////////////////////////////////////////////////////
// INIT DDS
// /////////////////////////////////////////////////////////////
// CFR1
digitalWrite(CS, LOW);
TransMIT(0x00); // ADDRESS
TransMIT(0x00); // DEFAULT
TransMIT(0x00);
TransMIT(0x00);
TransMIT(0x00);
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
// CFR2
digitalWrite(CS, LOW);
TransMIT(0x01); // ADDRESS
TransMIT(0x18); // NOT USED
TransMIT(0x00);
TransMIT(0x00);
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
// ASF
digitalWrite(CS, LOW);
TransMIT(0x02); // ADDRESS
TransMIT(0x00); // DEFAULT
TransMIT(0x00);
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
// ARR
digitalWrite(CS, LOW);
TransMIT(0x03); // ADDRESS
TransMIT(0x00); // DEFAULT
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
// POW0
digitalWrite(CS, LOW);
TransMIT(0x05); // ADDRESS
TransMIT(0x00); // DEFAULT
TransMIT(0x00);
digitalWrite(CS, HIGH);
digitalWrite(IOUpDate, HIGH);
delay(1);
digitalWrite(IOUpDate, LOW);
// FTW0
SetFrequency(FREQ);
delay(9999);
FREQ = 10000000 ;
}
void loop()
{
// SWEEP A LITTLE ...
SetFrequency(FREQ);
FREQ += 100000 ;
delay(9999);
if (FREQ > 180000000) FREQ = 10000000 ;
}
// /////////////////////////////////////////////////////////////
// END OF FILE.
// /////////////////////////////////////////////////////////////
✈ Downloads
✈ Share your thoughts
The webmaster does not read these comments regularely. Urgent questions should be send via email.
Ads or links to completely uncorrelated things will be removed.
Your Browser says that you allow tracking. Mayst we suggest that you check that DNT thing ?