Thursday, March 30, 2017

Boxing the LC meter

Got one of those "cheap" LC meters from the usual online shopping site:
The unit reference as advertized is:
"LC100-A High Precision Digital inductance Capacitance L/C power Meter module"
I might add: just doesn't make toasts but better than sliced bread...






Quality of the meter is not bad and looks quite accurate, at least I measured some marked capacitors and inductors and was in the specified values/range.
The only lower construction quality part was the alligator cable that was delivered with the meter, it was not soldered, just crimped, that's been fixed already:



So far it has helped me to identify some cap's that lost marking and confirming inductors for filters.

The box used is a box for housing electrical stuf with water projection protection (not needed) and was used mainly because it's plastic, relatively cheap and I could make all the holes with a knife.

It ended up like this:

I used very short cabling for the leads so it does not influenciate much the measure.

Before every measure or changing ranges a calibration/zeroing is needed, here's the procedure:

* Inductance: Short the terminals, press the reset (red button), insert the inductor and then measure

* Capacitance: Open the terminals, press the reset (red button), insert the component and measure

Inside:

Power is provided by an usb cable directly to the board. The power switch was set to always on.

Another view:


In the mean time I wrote the knobs function directly on the plastic cover since I kept forgetting.
After the multimeter this is probably the second most used test equipment here, really handy.

Have a nice day!



Thursday, February 02, 2017

More filters II

Some long time ago I bough a board with some SSB/AM filters atached, the idea was to remove and use the filters for some receiver. Upon receiving it, thought it would be nice to use the board itelf since it cointained what looks like an IF chain of a receiver. Never had the time to reverse engineering it.

The board is this one as on the original post:



Some other sellers on the "eb/seller" site are just advertizing the filters, I have another filter kit that got already in separated state from the mainboard.

Today I got an email from Szilard - HA6VSR that kindly provided links, that he found, to the diagram and description. The diagram looks like what I was expecting (even better) except I tough the AM filter was for AM, in fact is used as a first filter in chain for the 9Mhz SSB ones as per the diagram from the link bellow:

I think it will be easy to make a receiver with this, time permits...

The links, courtesy of Szilard:

Description:
http://www.radioamator.ro/articole/view.php?id=1089
Schematic:
http://www.radioamator.ro/articole/files/1089/Filter_Schaltplan_A3.sch.pdf

Have a nice day!



Friday, January 20, 2017

Bubble display QDSP-6064 and MAX7219

Last year got some small "calculator" bubble shaped 4 * 7 seg. led displays thinking it could be nice for a frequency display or some other stuff.

I was just missing the IC for serial connection/display driver since the Arduino has not enough pin's for the job.

The MAX7219 display driver arrived this week and without further I did the needed connections according to data sheet, sort of, it worked first time with only two switched segments, promptly corrected.

Each DIL display has set of 4 digits so bellow I'm using two set's.


The outcome of the software/hardware combination:



The display connection/aka "rats nest":



Full picture with Arduino:



MAX7219 pin-out and connection example:




QDSP-6064 display pin-out:



Schematic:


The resistor for current limiting on the MAX IC (38K) was placed without any calculation only to be conservative. Setting the bright to "4" on the code (lc.setIntensity(0,4);) is more than enough for good readability.

Additional lecture:

MAX7219: http://tronixstuff.com/wp-content/uploads/2010/07/max7219.pdf

QDSP-6064: http://cdn.sparkfun.com/datasheets/Components/LED/BB_QDSP_DS.pdf

Arduino code for display testing:

///
// test code for bubble display HP QDSP-6064 and max7219
#include "LedControl.h"
#include "Wire.h"

#define PIN_DIN          12 // pin 1  on MAX72XX
#define PIN_CLK          11 // pin 13 on MAX72XX
#define PIN_LOAD         10 // pin 12 on MAX72XX

int di1=0; // first digit from Right to left is DIG0 on max7219
int di2=1;
int di3=2;
int di4=3;
int di5=4;
int di6=5;
int di7=6;
int di8=7; // left most digit is DIG7 on max7219

LedControl lc = LedControl(PIN_DIN, PIN_CLK, PIN_LOAD, 1);

void setup()
{
  // MAX72XX is in power-saving mode on startup, we have to do a wakeup call;
  lc.shutdown(0,false);
  lc.setIntensity(0,4);
  lc.clearDisplay(0);

  lc.setDigit(0,di1,0,true);   // if true then show the decimal point  / DIG0
  lc.setDigit(0,di2,1,true);   // digit number 2 / "address" 1 / DIG1
  lc.setDigit(0,di3,2,true);
  lc.setDigit(0,di4,3,true);
  lc.setDigit(0,di5,4,true);   
  lc.setDigit(0,di6,5,true);
  lc.setDigit(0,di7,6,true);
  lc.setDigit(0,di8,7,true);
}

void loop()
{
// do nothing here, the display was on during setup...
}

///

In the mean time I loaded code for a frequency counter. That will be part of another project.

Have a nice weekend!

Sunday, December 04, 2016

Arduino Scalar Network Analyser - boxed and DDS/power meter mode code.

I jut boxed the Arduino "network analyser" following previous post and also changed the code so it can also double as a standalone power meter and VFO.

Here's measuring the output from the AD9850 in "DDS/meter" mode. DDS out on the left BNC and AD8307 input on the right, labels will be placed!

Still need to calibrate the power meter in the code, it's not correct, the scope was showing more output power than the -52 dBm on display.

Here's the noise floor of the AD8307:
 the value is more in-line with the IC spec's, in any case still needs calibration.
 
Frequency can be change by means of the rotary encoder (red on the right) and the mode between the VNA and DDS/power meter is changed by the black press button. Default mode on start-up is VNA/computer control mode like bellow:


Inside during first stages boxing, AD8307 is inside the screened box:

Code is bellow:
------
// AD9850 and AD8307 VNA
//
// for manual control and computer control with DIY60MHzSNA.py
// direct link for python software here: http://www.changpuak.ch/electronics/Arduino/NWA-DUE/DIY60MHzSNA.zip
// for the ad8307 and buffer amp, here: http://rheslip.blogspot.ie/2015/08/the-simple-scalar-network-analyser.html
//
// with LCD code and dds code from my vlf_receiver with ad9850
//
// From the original code and description bellow:
// http://www.changpuak.ch/electronics/Arduino-Shield-TOBI.php
//
// Ricardo / CT2GQV / 2016


#include   // Comes with Arduino IDE
#include
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// 0x3f the yellow lcd  
  
int AD8307 = A0;  // for the Uno
char inputcmd[100];  // serial data input
int cmdindex=0;

#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 BUTTON_MODE 7 // digital pin 7 to change from computer control to manual control.
int mode=0; // starts on mode 0, VNA then if mode 1 will be manual control for power meter and dds oscillator
int val=1; // keeps the mode value of the button, starts high due to pull up resistor
int lastmode = 0;

#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

// encoder addon
 // from http://bildr.org/2012/08/rotary-encoder-arduino/
 int encoderPin1 = 3; // D3 nano
 int encoderPin2 = 2; // D2 nano
 int encoderSwitchPin = 4; //push button switch // D4
 volatile int lastEncoded = 0;
 volatile long encoderValue = 0;
 long lastencoderValue = 0;
 int lastMSB = 0;
 int lastLSB = 0;

int station_number = 0; // start station from the stations array... code from vlf receiver
int maxstations = 11;
// pre populated common test frequencies
double stations[11]={ 1000000,   10101000, 9000000 ,  455000,  8000000,     18160000,   77500,      14200000,   4000000,   666000 ,  518000,};
//                    wwv         rtty      9Mhz IF    455 IF    IF vlf        17m         dcf         20m         IF 4Mhz   rdp        navtex
int fstep = 5; // frequency step Hertz
int last_station = station_number;  // last station equals startup station number

 double Freq = 10000000;
 double BFO = 0;       // needs calibration 2.3Khz to be in freq // 249.73 - 252 AM
 double fcomp = 2390; //  2.3 frequency diff for sideband and ad9850 offset from real.
 double lastFreq = 0; // keeps the last freque for not refreshing constantly the display

float dbmvalue=0; // to update on the LCD


 void updateEncoder(){
  int MSB = digitalRead(encoderPin1); //MSB = most significant bit
  int LSB = digitalRead(encoderPin2); //LSB = least significant bit
  int encoded = (MSB << 1) |LSB; //converting the 2 pin value to single number
  int sum  = (lastEncoded << 2) | encoded; //adding it to the previous encoded value
  // update frequency, + or - depending on BFO side + or - 8 Mhz injection so allways increment to the same side // reverse in the last if statement
  if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) {encoderValue ++; Freq+=fstep;};
  if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) {encoderValue --; Freq-=fstep;};
  lastEncoded = encoded; //store this value for next time
 
  newfreqtoad9850(); // update the ad9850 with the new frequency 
}

void newfreqtoad9850() // sets new f on ad9850 and add-s remove the compensation for the offset
  {
 // sendFrequency(Freq-fcomp);  // fcomp is the error of the ad9850 and also compensates the filter. can be calculated if removed and beat agains a know freq.
  // here we use the setfrequency of the original code and not the vlf code.
 SetFrequency(Freq-fcomp);
  };


void dBm_power()
{
  // needs calibration.....
  float dBm=0;
  int i;
  for (i=0;i<20 analogread="" average="" br="" dbm="" float="" i="" nbsp="">  dBm=dBm/i;
  // dBm = dBm - 869; // original code
  dBm = dBm - 869;
  dBm = ( dBm * 0.1014342 ) - 6.6 ;   
  Serial.print(" "); // may help Python parser
  Serial.print(dBm);
  Serial.println(" "); // may help Python parser
  dbmvalue = dBm; // we need to pass this value to an outside variable to update lcd when mode = 1
}
void raw_power()
{
  Serial.print(" "); // may help Python parser
  Serial.print(analogRead(AD8307));
  Serial.println(" "); // may help Python parser
}
  // 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 data="" i="">>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
  }


// frequency calc from datasheet page 8 = * /2^32
// my original code was senfrequency();
void SetFrequency(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 for 9850 chip
  pulseHigh(FQ_UD);  // Done!  Should see output
}


void setup()
{
 Serial.begin(9600);  
 pinMode(encoderPin1, INPUT);
 pinMode(encoderPin2, INPUT);
 pinMode(encoderSwitchPin, INPUT);
 digitalWrite(encoderPin1, HIGH); //turn pullup resistor on
 digitalWrite(encoderPin2, HIGH); //turn pullup resistor on
 digitalWrite(encoderSwitchPin, HIGH); //turn pullup resistor on  
 attachInterrupt(0, updateEncoder, CHANGE);
 attachInterrupt(1, updateEncoder, CHANGE);
 pinMode(FQ_UD, OUTPUT);
 pinMode(W_CLK, OUTPUT);
 pinMode(DATA, OUTPUT);
 pinMode(RESET, OUTPUT);
 pinMode(BUTTON_MODE, INPUT); // mode button connected to digital 7
 pulseHigh(RESET);
 pulseHigh(W_CLK);
 pulseHigh(FQ_UD);  // this pulse enables serial mode - Datasheet page 12 figure 10
 SetFrequency(stations[station_number]);
 //SetFrequency(1000000); // 1 MHz default using the original code, wen mode is dds it will start on 10Mhz
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("VNA    CT2GQV");
lcd.setCursor(0,1);
lcd.print("USB    2016");
}

void loop()   // Arduino superloop - where everything gets done
{
  char ch;
long int temp;
// VNA computer control
if (mode == 0) {
   if (lastmode==0) { // we need to print mode again on lcd
   lcd.begin(16,2); lcd.setCursor(0,0);lcd.print("VNA    CT2GQV");
   lcd.setCursor(0,1);  lcd.print("USB    2016"); }
   lastmode=1;  // no need to update the previous info on display
// serial command interpreter
// enter a number to set the frequency, anything else shows power
  while (Serial.available()) {
    ch=(char)Serial.read();
    if (((ch >= '0') && (ch <= '9')) || ((ch >= 'A') &&
            (ch <= 'Z'))) inputcmd[cmdindex++]=ch;
    if (ch == '\n') {    // parse command if its a newline
      inputcmd[cmdindex]=0; // terminate the string
      if ((temp=atol(inputcmd)) > 0) SetFrequency(temp);
      else dBm_power(); 
      //else raw_power();  // python has trouble with floats
      cmdindex=0; // reset command line     
    }
  } // end while
}; // end mode 0 VNA
// end VNA computer control

// read the digital button for going down (to change mode)
  val = digitalRead(BUTTON_MODE);  // read input value
  if (val == LOW) { // button press so lets change mode
   temp = mode; // just dummy variable that keeps mode so we can change it..
   lastmode = 0; // keeps the last mode just to help if something needs to be updated on the lcd to save cycles.
    if (mode == 1) { temp=0; };  // we switch temp so then we can switch mode to be equal to mode, if not next line will reverse.
    if (mode == 0) { temp=1; };
    mode = temp; // now we can switch mode safely
    if (mode == 1) {  Serial.println(" -60 "); } // this will give a -60 spike on the DIYVNA display..no need since the lcd will show also
    if (mode == 0) {  Serial.println(" -40 "); }
    delay(250); // software debounce...
   }

// DDS control and power meter
if (mode == 1) { // read the power and print on lcd and serial
  delay(90); // let's not refresh to fast...
  dBm_power(); // outputs to serial the ad8307 meter and keeps dbmvalue variable

  //if frequency "channel"  is called
  if(digitalRead(encoderSwitchPin)){
    //button is not being pushed
  }else{
    station_number++; if (station_number > maxstations)station_number=0;
    Freq=stations[station_number];
    SetFrequency(stations[station_number]);
    delay(250); // software debounce...
  }
 
 // if mode change on last iteraction then print the following, if not, no need.
 if (lastmode == 0) {    // neans last mode was VNA so we need to put everything in lcd
   lcd.setCursor(0,0);
   lcd.print("f:              "); lcd.setCursor(3,0); lcd.print((Freq/1000),3);// change latter to show the frequency
   lcd.setCursor(0,1);
   lcd.print("dBm: ");
  } // end if
 // this what we need allways to print if frequency changed
 if (lastFreq != Freq) {   lcd.setCursor(3,0); lcd.print((Freq/1000),3); lastFreq=Freq; }
 // we can print dbm value all the time, flicker is not noticable
  lcd.setCursor(5,1); lcd.print(dbmvalue);
  lastmode = 1; // now that previously we cleared the display no need to do again on next time.
}
// end DDS control and power meter


} // end main loop... that's it!

-----
LCD connected as bellow:




Have a nice week!





Tuesday, November 08, 2016

Arduino Scalar Network Analyser - proof of concept

Got this idea since needed to check the low-pass filter performance of the Bitx on LF

Basically followed the projects from the following links:

http://rheslip.blogspot.ie/2015/08/the-simple-scalar-network-analyser.html
http://www.changpuak.ch/electronics/Arduino-Shield-TOBI.php

Here's a quick deployment for testing:



Didn't implemented all the parts and according to schematics shown in the previous url's since it was just a proof of concept.
Basically what I did was the AD9850 DDS without buffer and the AD8307 log detector connected to the Arduino running the code changed to conform my AD9850 connection and the Python aplication running on PC.

On the previous image one AM 9Mhz crystal filter is placed between the DDS output and the log detector input. The software running on PC takes care of setting the sweep on the DDS and collection of power level from the AD8307, generating the power to frequency graph (or vice-versa).


So without correct termination and calibration you can get an idea of the filter bandwith.

Tested with an 8 Mhz  crystal in series and this is the result:


If on a full sweep sometimes it's not perceptible where where the "peak" is:


 Just for fun a 47 Ohm resistor in series betwen the DDS and Log detector:






As refered I had to change the Arduino code to fit my DDS connections and the way dds set frequency.
In addition to that since the Python code on the PC is using a fixed com port I setup the arduino to come up allways as /dev/ttyArduino.
In the future I might box it up and tighten the loose ends, that is; include the buffer amp on the DDS, probably changing the code to allow also a manual sweep...

In the mean time my changed code on the python script (DIY60MhzSNA.py) bellow:

# change this to the appropriate serial port for your setup
SERIALPORT = "/dev/ttyArduino"

Link to download: http://www.changpuak.ch/electronics/Arduino/NWA-DUE/DIY60MHzSNA.zip

Since I use Linux (didn't tested the code on win...that is; on legacy OS :)
and for it to come up allways on /dev/ttyArduino if you use recent kernels/distro you might want to add a file on your /etc/udev/rules.d/ with the following contents:

SUBSYSTEM=="tty",ENV{ID_SERIAL}=="1a86_USB2.0-Serial", SYMLINK+="ttyArduino"

Change your serial to whatever you have (look for dmesg output) or look for the documentation on udev, otherwise look for the port when Arduino is connected and change the Python code.
To run the code just: python DIY60MHzSNA.py

Arduino connection to DDS (re-used from other projects):


...output of AD8307 is going to Arduino A 7



Arduino code bellow (watch out on copy past since blogger tends to break formatting):

// AD9850 and AD8307 VNA
//
// for manual control and computer control with DIY60MHzSNA.py
// direct link for python software here: http://www.changpuak.ch/electronics/Arduino/NWA-DUE/DIY60MHzSNA.zip
// for the ad8307 and buffer amp, here: http://rheslip.blogspot.ie/2015/08/the-simple-scalar-network-analyser.html
// 
// Code changed by Ricardo - CT2GQV - 2016
// From the original code and description bellow:
//
// AD9851 DDS and AD8307 power meter
// sept 2013 RH
// small adjustments to match this project:
// http://www.changpuak.ch/electronics/Arduino-Shield-TOBI.php
// 02.11.2015 Alexander Frank
  
int AD8307 = A7;
char inputcmd[100];  // serial data input
int cmdindex=0;

#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); }

void dBm_power()
{
  float dBm=0;
  int i;
  for (i=0;i<20 analogread="" average="" br="" dbm="" float="" i="" nbsp="">  dBm=dBm/i;
  dBm = dBm - 869;
  dBm = ( dBm * 0.1014342 ) - 6.6 ;   
  Serial.print(" "); // may help Python parser
  Serial.print(dBm);
  Serial.println(" "); // may help Python parser
}
void raw_power()
{
  Serial.print(" "); // may help Python parser
  Serial.print(analogRead(AD8307));
  Serial.println(" "); // may help Python parser
}
  // 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 data="" i="">>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);   //after each bit sent, CLK is pulsed high
  }


// frequency calc from datasheet page 8 = * /2^32
// my original code was senfrequency();
void SetFrequency(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 for 9850 chip
  pulseHigh(FQ_UD);  // Done!  Should see output
}


void setup()
{
  Serial.begin(9600);  
  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 - Datasheet page 12 figure 10
  SetFrequency(1000000); // 1 MHz default
}

void loop()   // Arduino superloop - where everything gets done
{
  char ch;
  long int temp;


// serial command interpreter
// enter a number to set the frequency, anything else shows power
  while (Serial.available()) {
    ch=(char)Serial.read();
    if (((ch >= '0') && (ch <= '9')) || ((ch >= 'A') &&
            (ch <= 'Z'))) inputcmd[cmdindex++]=ch;
    if (ch == '\n') {    // parse command if its a newline
      inputcmd[cmdindex]=0; // terminate the string
      if ((temp=atol(inputcmd)) > 0) SetFrequency(temp);
      else dBm_power(); 
      //else raw_power();  // python has trouble with floats
      cmdindex=0; // reset command line     
    }
  }
}



-- That's it, a nice little project for some tracing fun! I would prefer a "R&S" but there's no budget :)

Have a nice week!







Sunday, October 23, 2016

FT-7

Nothing special, just me, never learn...

Some time ago I got an Yaesu FT-7 from a friend to repair/check along with an FL-110 companion amp.

I swapped something for the FL-110, fixed the FT-7 and handed it to is owner.

3 weeks ago saw one for sale and in good condition... so why not..I already have the RF amp for it (the amp was intended for the Speaky transceiver)!

Here's what arrived in the post office:





With mic, manual and power cable:
 ...but not the tuner.

And bellow the FL-110 amp I have in Portugal along with my friend's FT-7:

 That's it... another radio in the shack...

...In the mean time started another project:



When finish will post more details... hopefully still this year.


Have a nice week!

Sunday, October 16, 2016

Bitx on Low Frequency / Long Wave receiver

    The number of LF receivers (mainly for NAVTEX on 518) I made only has parallel with the number of Airband ones.
This receiver originally was made in a breadboard but I was having some reception problems and didn't like the appearance, so, ordered a Bitx 20 PCB from India and reused the components. Basically it's very similar to the Bitx design with only small changes.
After completly built I discovered the reception problem I was having, on the prototype board was one of those pesky CFL lamps. Discovered that already on testing phase of this new one after one day when my daughter turned on the lamp from the hallway, which was allways on when I did the tests on the previous board. This "new" one was having the exact same issue, lots of noise. Live and learn. Never mind, I think this one is much more "clean" inside.



Well, has I was saying is a Bitx 20 PCB and schematic (without the TX part) but using ADE-1 mixer and with an AD9850 DDS as VFO.
Input filter is a 500Khz low pass (or arround that, still needs validation) and the RF input is on the mixer IF port because is the only input/output on the ADE-1 that can go to 0 Khz and less than 1Mhz.
In practice 0 Khz is not obtained since it will beat against the VFO and BFO, also noticed that bellow 20Khz it starts to appear a lot of "artefacts" (so it looks like) due to being close of the BFO

I have been having some fun receiving time signal stations, LW stations and even stations on the 500Khz fringe. That include 60Khz MSF from UK, 77.5 Khz DCF 77 from Germany, on the LW: RTE from Ireland, BBC UK, RTF France, and MW: RNE from Spain on 558Khz. Also allready received NAVTEX on 518 Khz.

(here still in prototype tests showing VFO frequency for DCF 77 station)
"IF" is also different from the original Bitx, I used 8Mhz as my IF after selecting crystals for the filter.

On to more details:

The input filter:
After the filter it will go to the 2SC2570 preamp and only then to the mixer as on Bitx, I also tested with an 2N3904 replacing the 2SC and it also worked. Next step will also include a switch to bypass the preamp and a switch to use an active antenna injecting 12 V on the line.

The ADE-1 placement as per original design:
Note: pin 2 and 3 of the ADE-1 should swapped from the original schematic if you want LF range or the "normal" range/arrangement of the mixer.

Schematic with the mixer part:
Ignore the circuit outside the green box's since I used the original Bitx on the other parts, it's just to show the ADE-1 connection on the VFO and BFO side.

The inside of the "rig":
..still a proper antenna connector needs to be placed.

The Arduino code used for control of the VFO is just an adaptation of other code I made for other project. Basically navigates by press of the encoder betwen fixed channels and then you can fine tune the frequency of that channel. No provision for saving, also will not post code, if needed ask, I can provide.

The DDS connection to Arduino is like this, just use the "green" part, I'm to lazy to draw, so I reused AD7C nice schematic for display purposes:





The channels I programed so far in code are:

double stations[9]={ 8518000,        8490000,        8077000,     8018000,   8059300,      8198000,   8252000,   8162000 ,  8558000,};
 String ids[9] = {    "Navtex 518",   "Navtex 490",   "DCF 77.5",  "18Khz",   "MSF60",      "BBC",     "RTE",    "TDFrance" ,"RNEsp   "};

Note, I programmed directly the VFO frequency on the stations array.




Antenna I used so far is just a indoor single loop with 70 x 70 cm and no matching directly to the input filter.
Volume is a litle on the low side, I think mainly due to low gain of the antenna and low noise of the Bitx design.


Have a nice week!