Saturday, December 15, 2018

200 W 20/30 dB attenuator with 100 Ohm / 30w resistors

Between buying a 200 W probe/head for the power meter, a pre-made 30dB attenuator or making this project I chose the last option, it will not have the same frequency range but it's a lot more fun and a little cheaper . This attenuator is a nice way of extending the range of my existing 2 W power head URY-Z2 until the 200W mark. I wanted 200 W because in the future I need to test the FT-102 capable of that value.

The end result for the impatient:

The main schematic for the 20dB part is bellow. I added a after a 10 dB attenuator on the output, that was made with smaller resistors since it just needs to handle part of the final 1.7W (see further down the power distribution in the attenuator).

Keep in mind that the previous schematic only handles around 80 W if using 30W resistors. Most of the power is burnt in the first shunt.
A simple test layout diagram:

 The attenuator is only composed of 100 Ohm resistors (cheaper than the 50 Ohm ones on the flea bay) with the two terminals isolated from ground, so it was nice exercise to calculate and attenuator under this limitation.

 In previous setup and at 50Mhz, the attenuation obtained:

Not bad since the calculated value it's not exactly 20 dB.

The power dissipation calculation:

(addendum: just realized the power on the first shunt is miscalculated, should be 100W on the 100Ohm resistor and a total of 66W on the series 100 ohm with the 2 parallel 100 ohm)
The X marks the resistors that will be under power at an input of 200 W so the 100 Ohm (on the input, left side of the first shunt) taking 80w (100W is the correct value, see addendum) is now composed of 4 resistors, capable now 120W dissipation in total.

..and are the 4 ones diagonally oriented on the left top.

For the ground plane I used copper plate with 0.6mm tick and it had to be partially soldered in the oven, the iron just could not make it, then on the final assembly the iron just had to do the final touch.

Final assembly inside view:
The end 10dB attenuator added is the "mesh" on the lower side of the picture/box.

For the final 10dB also a PI attenuator was chosen with these values: on the first and on the end shunt: 4 x 470 Ohm all in parallel with 1x 560 Ohm . For the series element: 3 x 220 Ohm all in parallel with 1x 2K7 Ohm resistor.

I include glued to the box a chart with the output value in function of the final attenuation, the measured one at 50Mhz (29.39 dB) and the calculated 30dB, this way if I don't set on the power meter the correction I just look at the table:

The VNA pass:

..still need to validate with more accurate power meter than the AD8307  from my homemade "VNA" and with a proper reference set, never the less looks OK for the type of construction involved.

So far I only tested with 100 W on the input, gets only mild warm for quick tests, for extended periods it might need to spread the resistors a little more and possibly include some thermal paste and better heat sink.

Approx cost of the project was as follows:

- N plugs: 3.20 €
- 30W Resistors (18) + 1/4W resistors : 12.00 €

- Box: 7.00 €
- Copper plate: 3.00 €
- Solder/paper/ink: 1.00 €

# Total #: 26.20 €

Have a great day!

The schematic changed

Sunday, December 02, 2018

Inside Trimble 65256 10 Mhz TCX Oscillator

To be honest... nothing much; it's a Vectron OCXO MC2001X4-046W and some power control circuit.


In relation to the Vectron module, look's like this is the data-sheet:

This is a 5V version of the Trimble 65256, most of the ones I've seen advertised are 12V versions, I am running it with 5V but found no diference in the marking's to the 12V versions...
Apparently mine is out of spec when I compared with a 10Khz derived from a GPS source... that could explain the low price they have now on the flea bay, served their life and got warned out/out of spec.

Bottom trace is the Trimble output divided by 1000 to give 10Khz

It's skipping forward around every 10s to the triggered top trace of the GPS 10Khz output. This is true for any of the control voltage range.

Have a nice week!

Saturday, October 27, 2018

Stand for the JBC T245 - AOYUE 2663B

In the beginning of this year I build a JBC tip controller for the T245 handle, it got a little cheaper than buying the original. Has been working nicely, in fact much better than any other iron i've used before (most of them, to be honest, was junk).
For the stand I've used an hold support but was not ideal because It was for a bigger sized iron.

Considered buying just the original stand part but was a it's a little bit pricier than expected, around 30 Eur just for the holder:

(model JBC 0012994)

Looking online I found another alternative and give it a go, was kind of risky since the sizing was not advertised, in any case, if would not fit the JBC then would fit some of my other iron's:

It's an AOYUE 2663B and it's advertised for the AOYUE brand soldering irons. The price was 12 Eur plus 5 Eur shipping, considering the parts included I don't find it a bad deal.

It turned out great and it's the perfect addition if you build your own JBC T245 controller and are on a budget.

Some pictures in use:

It also fit's nice on top of the heat controller box.
(solder is not included, all other parts yes) The brass sponge is even bigger that another one I had before.

It includes a tip holder which fit's the JBC ones. At the moment I only have one extra.
The mountings of the provided accessories are also ambidextrous which is good since I solder with my left hand.

The iron fits nice and it's easy to take and put back.

Whats "missing" now to build is the detector system for when the iron is in place in order to auto reduce temperature and extend tip live like on the original stations . That will probably be a next step.

Have a great day!

Sunday, October 07, 2018

Skylab SKM52 - C&Q 84 - GPS module

Had this Skylab SKM52 GPS module for some time, in the past I tested it but nothing special made with it.


 Another ref/name for the module is: C&Q 84

Data-sheet here:

Original idea was to use the pps output to discipline another oscillator but no need for the moment.

This is the pps out:

Lat/Lon display:

Time display:

Interesting enough I could never see the $GPZDA (date and time) ever coming out of the module (during debug output) as on the spec data-sheet, this display of data is just taken from the normal output string. ZDA string would give the microseconds.... probably not implemented.

The code made will scroll alternately between the the values of position and time.

Connections and module view:

Vcc   - Arduino 3v3 output
RX    - Arduino D4 (softserial)
TX    - Arduino D3 (softserial)
GND - Arduino GND
PPS out: connect to a LED with a resistor. PPS only outputs when there's a stable GPS signal.
Pin 10 on Arduino to a 1k resistor then anode of LED, cathode to ground and this will indicate a GPS fix


////////////////// code here bellow
 // read the SKM52 Skylabe GPS module (C&Q 84) via softserial and dumps lat/lon/time on the Arduino nano USB
// pin D3 on Arduino to TX and D4 to RX on the GPS module
// power to module from the 3v3 output on arduino.
// CT2GQV 20180922

// initialize the library with the numbers of the interface pins
#define I2C_ADDR    0x27
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C       lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);


unsigned long fix_age;

SoftwareSerial GPS(3,4);
TinyGPS gps;
void gpsdump(TinyGPS &gps);
bool feedgps();
void getGPS();
long lat, lon;
float LAT, LON;

int fix_detected=0; // no fix yet

int year;
byte month, day, hour, minutes, second, hundredths;

//For the dual display
long previousMillis = 0;
long interval = 3000; // 3 seconds
int a = 60;

void setup(){
  pinMode(10, OUTPUT);
  lcd.begin(16, 2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); // init the backlight
  lcd.setBacklight(1);        // Backlight on


void loop(){
  long lat, lon;
  unsigned long fix_age, time, date, speed, course;
  unsigned long chars;
  unsigned short sentences, failed_checksum;

  gps.get_position(&lat, &lon, &fix_age);
  gps.get_datetime(&date, &time, &fix_age);

  // do we have a fix or not
  if (fix_age == TinyGPS::GPS_INVALID_AGE) {
    Serial.println("No fix detected");fix_detected=0;
    digitalWrite(10, HIGH); delay (1); digitalWrite(10, LOW);
  } else if (fix_age > 5000) {
     Serial.println("Warning: possible stale data!");fix_detected=1;
    digitalWrite(10, HIGH); delay (10); digitalWrite(10, LOW);
  else  fix_detected=2; //Serial.println("Data is current.");
  // lcd.setCursor(0,1); lcd.print("fix: "); lcd.print(fix_detected);

  if (fix_detected==0 ||  fix_detected==1) {lcd.setCursor(0,0); lcd.print("WAITING FIX!!");};

// fix_detected=2; // for debug only to see output even without fix

  if (fix_detected==2) { // let's print gps data
    digitalWrite(10, HIGH); // set the green LED to allways on
   Serial.print("Lat : ");      Serial.print(LAT);
   Serial.print(" :: Lon : ");  Serial.print(LON);
   gps.crack_datetime(&year, &month, &day, &hour, &minutes, &second, &hundredths, &fix_age);
   Serial.print("::"); Serial.print(year);
   Serial.print("-"); Serial.print(month);
   Serial.print("-"); Serial.print(day);
   Serial.print("T"); Serial.print(hour);
   Serial.print(":"); Serial.print(minutes);
   Serial.print(":"); Serial.print(second);

   // every interval print the lat
   unsigned long currentMillis = millis();
   if (currentMillis - previousMillis > interval) {
    previousMillis = currentMillis;
    lcd.setCursor(0,0); lcd.print("Lat:"); lcd.print(LAT);
    lcd.setCursor(0,1); lcd.print("Lon:"); lcd.print(LON);
   lcd.setCursor(0,0); lcd.print("                ");
   lcd.setCursor(0,1); lcd.print("                ");
   lcd.setCursor(0,0); lcd.print(year); lcd.print("-"); lcd.print(month); lcd.print("-"); lcd.print(day);
   lcd.setCursor(0,1); lcd.print(hour); lcd.print(":"); lcd.print(minutes); lcd.print(":"); lcd.print(second);
   // no NMEA sentences see where it displays the hundreths...
   // probably needs module programing, says on the manual that outputs the $GPZDA date and time...
   // manual
   //  Serial.print("."); Serial.print(hundredths);
  }; // endif fix detected

void getGPS(){
  bool newdata = false;
  unsigned long start = millis();
  // Every 1 seconds we print an update
  while (millis() - start < 1000)
    if (feedgps ()){
      newdata = true;
  if (newdata)

bool feedgps(){
  while (GPS.available())
    if (gps.encode(
      return true;
  return 0;

void gpsdump(TinyGPS &gps)
  gps.get_position(&lat, &lon);
  LAT = lat;
  LON = lon;
    feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

//////////// Have a nice week!

Saturday, September 15, 2018

New AD8307 power meter

Having done previously two power meter's based on the AD8307, with analog display and with computer interface, decided to build one other unit more self contained and with a ref calibrator included.

Here's the outcome:

The circuit is a simple one:

Taken from here.The AD8307 output is connected to an Arduino analog input and computation is done in software, with output to the LCD and usb line.

Build process here:

 The slug repellent tape is excellent for RF blindage, only need's to have something bellow to give some more rigidity.
It brings the AD8307 noise level to -76dBm.

Board assembly:

The calibrator was based on the one here.

It's not spot on according to the Marconi and R&S but does an approximate job in case the input needs to be validated.

Bellow validating the 0 dBm output of the Marconi power meter:

1.5db down the reference is not bad (possible accounting 0.5 for the cable and plugs thenselfs).

20 dB attenuation of the 0 dBm signal:

..still of by at least 2.1 db down. The attenuator used was measured at 19.7db.

If I need more precision will use the other meter's I have:

For quick check in circuits with risk of blowing something it will be better to use the homemade one, the price different between an AD8307 and the other sensors is in the 20 fold at least.

The other power meter meter's I built before was this one:

from the post here.
The digital voltmeter, on top of the unit, does not display dBm instead the output of the opamp after the AD8307. So the compute dBm needs a table.

And the one inside this VNA

From this post.

The Arduino code used on the new AD8307 power meter is this one:

// AD8307 with LCD and serial output
// main code example from here:
// some changes made by CT2GQV - 2018
// version 20180915

// initialize the library with the numbers of the interface pins
#define I2C_ADDR    0x3F
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
LiquidCrystal_I2C       lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

//pwr sensor stuff
const int sensorpin = A0;

// serial print the voltage at the Arduino A0 / from,44216.0.html#13
void printDouble( double val, byte precision){
 // prints val with number of decimal places determine by precision
 // precision is a number from 0 to 6 indicating the desired decimial places
 // example: printDouble( 3.1415, 2); // prints 3.14 (two decimal places)

 Serial.print (int(val));  //prints the int part
 if( precision > 0) {
   Serial.print("."); // print the decimal point
   unsigned long frac;
   unsigned long mult = 1;
   byte padding = precision -1;
      mult *=10;
   if(val >= 0)
     frac = (val - int(val)) * mult;
     frac = (int(val)- val ) * mult;
   unsigned long frac1 = frac;
   while( frac1 /= 10 )
   while(  padding--)
   Serial.print(frac,DEC) ;

void setup() {
 Serial.begin(57600); // should be enough
// set up the number of columns and rows on the LCD
lcd.begin(16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE); // init the backlight
lcd.setBacklight(1);        // Backlight on

void loop() {
 // power in
 int sensorval = analogRead(sensorpin);

 // might need to read or match agains analog ref.
 //float voltage = (sensorval/1024.0) * 5.0;
 float voltage = (sensorval/1023.0) * 5.0;
 float pwr = ((voltage-0.269) * 40)-77;
 float volts = ((voltage-0.269) * 40);
 float pwrW = pow(10,((pwr-30)/10));
 float vts = sqrt(pwrW * 50);
 float ptp = vts * 2.828;
 lcd.print("Pwr ");
 lcd.print(pwr, 1);
 lcd.print("dBm   ");

// Serial.print(sensorval); Serial.print(" DAC   ");
printDouble(voltage,3); Serial.print(" Vdc   ");
Serial.print(pwr); Serial.println(" dBm");

if (vts > 0.9)
  lcd.print("rms  ");
  lcd.print(vts, 2); lcd.print("V  ");
  float ptp = vts * 2.828;
  //lcd.print(" p2p ");
  //lcd.print(ptp, 2);
 if (vts < 1 and vts > 0.001)
 vts = vts * 1000;
 lcd.print("rms  ");
 lcd.print (vts, 2);  lcd.print("mV  ");
 float ptp = vts * 2.828;
 //lcd.print(" p2p ");
 //lcd.print(ptp, 2);
 if (vts < .001)
 vts = vts * 1000000;
 lcd.print("rms  ");
 lcd.print(vts, 2); lcd.print("uV  ");
 float ptp = vts * 2.828;
 //lcd.print(" p2p ");
 //lcd.print(ptp, 2);


That's it, have a great day!

Sunday, August 26, 2018

New RF frequency generator for the shack

Nothing build here, next time!

Before going on holidays I had the idea to get an rf frequency generator of good quality to be used as a reference when testing circuits.
Previous I built one based on an Si5750, also used at times an AD9850 or a quick crystal circuit but nothing permanent and referenced.
Searching online, I found probably one of the cheapest 1Gz frequency generator available  that an ham near my QTH was selling. The looks are not perfect, it had in the past a not so caring previous owner but gives a precision frequency output. Now developed a fault in the output circuit which I suspect probably due to calibration data missing, so I hope. Still it outputs a constant signal but still need to measure to confirm specs.

Here it is:

The knob is not the original one and the bezel around the power button is not in good shape, parts that I probably replace one of this days:

Knob: 0078.1192.00

The fault that it has is error 4 and according to page 11 of SMY Service Manual

Error message "Err. 4"
Level control does not work correctly:

- Level overrange
- AM overrange
- Overrange with AM EXT DC
- 'Level-Preset' calibration faulty

I just hope it was not me making any wrong setting (did it once when selected external reference and was error'ing since nothing connected), in any case will check output and run the calibration details to see if it goes away....

For reference the routine and troubleshooting areas are

Service manual Level Error
A5 Output Unit OPUY01/02
A12 Power Module option SMY-B40
A6 Attenuator ATT01

Page 18 - Level-preset calibration is special function 45.

And some more pictures. By the way the frequency is bang on, only the level, still not measured, looks a bit low when an S9 is generated and connected to an uncalibrated radio in any case.

Have a nice week!

Thursday, June 14, 2018

Park Air Electronics Model 2100 DIP switch settings

Just got an email from a radio enthusiast living in the "small" island East of this one (I'm currently in Ireland just for reference). He was asking for the dip switch settings of the Park Air Electronics 2100 airband receiver since he has a model with similar programing.
I will share here all info I have since I'm pretty sure it will also be useful for me in the future (case I loose the papers).

Inside the receiver you can see the DIP switches for VFO programing:

The documentation I have and that helped me programing it and making a Arduino based controller for it:

Page 1:

Page 2:

Page 3:

..unfortunately the frequency excursion/programing without retuning of the VFO coil is too short (2Mhz) and made the external controller project useless as I documented here. If you follow the blog, I then used the code to control an Si5351 + airband receiver kit here.

Have a nice day Terry!