The white-yellow-red wires at the top are the audio output which I am feeding to a FCA202 ADC.
On the right you can see a 6 pin connector. This is a plagiarism of M0XPD's "RF bus", but carrying different signals as you can see below.
Schematic
The Softrock Lite ll SDR is driven with the output "TUNE" (0 output of the SI5351 module). The frequency can be set from 7000kHz to 7200kHz in 20kHz steps, but pushing the button on the left side. This sets the centre frequency of the display in DSP Radio running on the iMac.
DSP Radio listening to GB100ZZ the special event station, on 40m, celebrating Marconi transmissions from Devon UK.
Code
// SI5351 dds with LCD display, output is x4 display frequency to drive /4 IQ generator // ------ // DDS I2C SI5351 // SCL = A5 // SDA = A4 // address 0x60 // ------ // display I2C LCD 16 * 2 // o A5 SCL // o A4 SDA // o GND // o +5 // address 0x27 // ------ // RF bus // o GND // o from DSB // o TUNE out 0 // o SDR out 1 // o to DSB out 2 // o to TX out 2 CW/QRSS or DSB/WSPR #include "Wire.h" #include "Adafruit_SI5351.h" #include "LiquidCrystal_I2C.h" // PLL frequency, IQ multiplier #define XTAL 25 #define MULT 28 #define IQ 4 // outputs #define TUNE 0 #define SDR 1 #define CWDSB 2 // button pin 8 #define BUTTON 8 // dds object Adafruit_SI5351 dds = Adafruit_SI5351(); // LCD object LiquidCrystal_I2C lcd(0x27, 16, 2); float freq = 7000; // start TUNE freq kHz float prevfreq; void setup() { pinMode(BUTTON, INPUT_PULLUP); // button input lcd.init(); lcd.backlight(); dds.begin(); dds.setupPLLInt(SI5351_PLL_A, 28); // PLLA = 25 * 28 = 700MHz ddsout(freq); prevfreq = freq; show(freq); // display current TUNE frequency } void loop() { if(digitalRead(BUTTON) == LOW) // button pressed? { while(!digitalRead(BUTTON)); // wait button release if(freq == 7200) // if top of band { freq = 7000; // go to bottom } else { freq += 20; // increment by 20kHz } } if(freq != prevfreq) // if changed update ddsout(freq); show(freq); prevfreq = freq; } void ddsout(float f) { float plla; // PLLA freq float frac; float synth; long n; long m; int div; m = 100000; plla = XTAL * MULT; // 700MHz synth = plla/(freq/1000 * IQ); // MHz, x4 for IQ gen div = (int)synth; // get integer part frac = (synth - div) * m; // get fractional part n = (long) frac; dds.setupMultisynth(TUNE, SI5351_PLL_A, div, n, m); // out TUNE = PLLA/(div+n/m) dds.enableOutputs(true); } // display freq in MHz void show(float f) { lcd.setCursor(0, 0); lcd.print("Centre Frequency"); lcd.setCursor(4, 1); lcd.print(f, 0); lcd.setCursor(9, 1); lcd.print("kHz"); }
No comments:
Post a Comment