Saturday, January 27, 2018

Echophone EC-1B: Chicks dig it?


I attended the Michigan Antique Radio Club's annual Winter show earlier today with my friends Sean, WX8L and Mark, N8IAJ.  Always a decent show that seems to always be accompanied by bitter cold weather, the turn-out today was the best I can recall, helped, no doubt, by temperatures in the upper 40s and rare Michigan Winter Sunshine.  That always puts me in the mood to purchase some really nasty derelict to put right over the remaining Winter evenings, and there was lots of potential fodder at this show!

For these projects, I look for the stuff that most sane people would consider too far gone.  I don't know why, I guess I'm just at the point where I've gotten bored with "normal" repairs - I mean, after 40 years and too many capacitor replacement jobs to remember, I like the challenge of taking on something that's really screwed-up.  

And I found it:  A trashed Echophone EC-1B for the outrageous price of $10.  How could I say no?

I don't know much of the Hallicrafters/Echophone back story, but Hallicrafters manufactured the EC-1 under the Echophone name during WWII and marketed them heavily toward those serving in the military, with many of the advertisments featuring Private Hogarth, who, to me, looks a lot like Radar from the M*A*S*H* series. Evidently, the EC-1 made ol' Hogarth a hit with the ladies.  Yep, nothing get's the estrogen frothing like an inexpensive shortwave radio.  

Anyway.... I get somewhat nostalgic over the EC-1B because it's essentially the same as the Hallicrafters S-41G, one of which I spent many hours listening to when I was about 12.  Unfortunately, that radio succumbed to my overestimation of my technical skills at the time; I took it apart and never put it back together.  So, I've been looking for another for some time, but all that I've found were either hopelessly rusted (for some reason, these sets are prone to rust) or priced beyond what I wanted to spend. 

So, when I saw that this one, in spite of being rough, was fairly rust free, even the bodged electrolytics dangling from the chassis didn't dissuade me from making the purchase.


Looking at it from below deck, it's relationship to the later S-38 series is obvious.  Like the original '38, it's a six-tube transformerless superhet that covers from 540 KHz to 30 MHz in three bands.  Unlike the '38s with a letter suffix, it has a "real" BFO based around a 12SQ7 in a Hartley circuit that works reasonably well.  Where it differs from the '38 is the bandspread circuit; the '38 used a separate section on the tuning cap, where the EC-1B/S-41G(W) used a somewhat hokey variable inductance scheme; a powdered iron "slug" is moved through the tube containing the oscillator inductors by a series of strings and pulleys.  Kind of a Rube Goldberg arrangement, but it works well enough and allowed them to keep the costs down by using a standard broadcast tuning cap.

As you can see in the photo, this set suffers from some pretty poorly executed attempts at repair, which, apparently, caused some pretty serious release of the magic smoke:


Since these sets are simple, it only took a couple hours to set things right; I replaced the filters in a safe and professional manner, and replaced all of the old waxed-paper caps and a couple of out-of-spec resistors.  Once that was done, I powered the set and was rewarded with loud and clear reception on the local broadcast and shortwave bands.  Cool!

There were a few other problems, but none terribly serious.  The volume pot was open at the ground end, so I replaced it with one from my stash.  The audio was also intermittent, which was caused by a broken connection at the base of the 35L6 tube, so I replaced that as well.  The most perplexing problem was the BFO - it was oscillating at about 1.5 MHz!  The BFO coil had been replaced with the wrong value, but no big deal, I just added some parallel capacitance to bring the circuit into range and it's working well.

Imperfect as these rigs are, they're pretty hard to kill.  I think I've got about three hours into this one and it's already playing like a champ, but there's still more to do:

- Dial drive needs serious cleaning and re-lubrication.
- Bottom panel is missing; will make one out of 20ga steel.
- Finish is poor - will repaint and apply new decals (already ordered from Radio Daze).
- Chassis isolation grommets need replacement.
- Need to make or source a new rear cover.

So, yeah, I'll have a lot of time and a few bucks into a receiver that's not really cut-out for actual ham-band use, but it's all about the fun of breathing life into something that's long been left for dead.




Monday, January 22, 2018

SDR-2018: Minor success!

If you've been following this project, you know that I've been "stuck" on a software issue (I can almost hear Bill snickering) and haven't made any progress for several weeks.  Well, I've finally found that there is indeed light at the end of the tunnel, and it's not necessarily an oncoming train!

The problem is due entirely to my unfamiliarity with the Python language, and without that knowledge base, editing the Quisk hardware file for my application has been hit and miss, with more misses than hits.  To overcome this, I've been giving myself a crash-course on Python, and it's starting to pay-off.

Specifically, where I've been stuck is in sending/receiving a PTT signal between Quisk and my hardware, which emulates a Yaesu FT857D.  Quisk shares frequency and mode information over the CAT link just fine, but, in an exchange with Jim, N2ADR, I learned that Quisk doesn't poll hamlib for the PTT signal - that has to be asserted by the remote device.  I suppose that I could have rewritten the Arduino code to do that, but I got to thinking about all those unused GPIO lines on the Pi, which seemed almost made to order for this sort of thing.  But, without adequate Python knowledge, my efforts were futile.

After spending a few weeks boning-up on Python, tonight I had a fleeting moment of lucidity and started to understand what I needed to do to my Quisk hardware file in order to get it to set a GPIO pin HIGH when Quisk's on-screen PTT button is active.  Eureka! 

I've still got to write the code to allow Quisk to respond to a PTT signal coming from my hardware, but I think I know how to do that now and will hit it again tomorrow.

For those who are curious or have masochistic tendencies, here's my current draft hardware file:

# This is a hardware file to test reading and writing PTT status from/to GPIO.
#
# Version (test001) creates a key threading class that is called from the
# OnButtonPTT function to write "keyed" or "dekeyed" to the terminal
# depending on the current status of the PTT screen button.
# Version test002 implements writing PTT OUTPUT to GPIO
#
# It also uses the hamlib library to communicate with the radio hardware:
# If you change the frequency in Quisk, the change is sent to rigctld.  This hardware
# will query (poll) rigctld for its frequency at intervals to see if the rig changed
# the frequency.  If it did, the change is sent to Quisk.
#
# These are the attributes we watch:  Rx frequency, mode

from __future__ import print_function

DEBUG = 0


import socket, time, traceback
import _quisk as QS
import RPi.GPIO as GPIO

from quisk_hardware_model import Hardware as BaseHardware



class Hardware(BaseHardware):
  def __init__(self, app, conf):
    BaseHardware.__init__(self, app, conf)

# assign "keythread" to represent Key_Thread class:
    self.keythread = Key_Thread()
    self.hamlib_rigctld_port = 4532        # Standard rigctld control port
    self.hamlib_poll_seconds = 0.2        # Time interval to poll for changes
    self.hamlib_connected = False
    self.radio_freq = None
    self.radio_mode = None
    self.quisk_freq = None
    self.quisk_vfo = None
    self.quisk_mode = 'USB'
    self.received = ''
    self.toggle = False
    self.time0 = 0
  def open(self):
    ret = BaseHardware.open(self)
    self.hamlib_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.hamlib_socket.settimeout(0.0)
    self.ConnectRigctld()
    return ret
  def close(self):
    #Kill keythread and close GPIO:

    if self.keythread:
        self.keythread.stop()
    self.hamlib_socket.close()
    self.hamlib_connected = False
    return BaseHardware.close(self)
  def ConnectRigctld(self):
    if self.hamlib_connected:
      return True
    try:
      self.hamlib_socket.connect(('localhost', self.hamlib_rigctld_port))
    except:
      return False      # Failure to connect
    self.hamlib_connected = True
    if DEBUG: print("rigctld connected")
    return True         # Success
  def ChangeFrequency(self, tune, vfo, source='', band='', event=None):
    self.quisk_freq = tune
    self.quisk_vfo = tune -5000
    if DEBUG: print('Change', source, tune)
    return self.quisk_freq, self.quisk_vfo
  def ReturnFrequency(self):
    # Return the current tuning and VFO frequency.  If neither have changed,
    # you can return (None, None).  This is called at about 10 Hz by the main.

    return self.quisk_freq, self.quisk_vfo
  def ChangeMode(self, mode):        # Change the tx/rx mode
    # mode is a string: "USB", "AM", etc.
    if mode == 'CWU':
      mode = 'CW'
    elif mode == 'CWL':
      mode = 'CW'
    elif mode[0:4] == 'DGT-':
      mode = 'USB'
    self.quisk_mode = mode
    if DEBUG: print('Change', mode)
  def OnButtonPTT(self, event):
    btn = event.GetEventObject()
    if btn.GetValue():
      QS.set_PTT(1)
# Execute "keyed" function from Key_Thread class:
      self.keythread.keyed()
    else:
      QS.set_PTT(0)
# Execute "dekeyed" function from Key_Thread class:
      self.keythread.dekeyed()
  def ChangeBand(self, band):
    # band is a string: "60", "40", "WWV", etc.
    pass
  def HeartBeat(self):    # Called at about 10 Hz by the main
    if not self.hamlib_connected:    # Continually try to connect
      try:
        self.hamlib_socket.connect(('localhost', self.hamlib_rigctld_port))
      except:
        return
      else:
        self.hamlib_connected = True
        if DEBUG: print("rigctld Connected")
    self.ReadHamlib()
    if time.time() - self.time0 < self.hamlib_poll_seconds:
      return
    self.time0 = time.time()
    if self.quisk_mode != self.radio_mode:
      self.HamlibSend("|M %s 0\n" % self.quisk_mode)
    elif self.quisk_freq != self.radio_freq:
      self.HamlibSend("|F %d\n" % self.quisk_freq)
    elif self.toggle:
      self.toggle = False
      self.HamlibSend("|f\n")        # Poll for frequency
    else:
      self.toggle = True
      self.HamlibSend("|m\n")        # Poll for mode
  def HamlibSend(self, text):
    if DEBUG: print('Send', text, end=' ')
    try:
      self.hamlib_socket.sendall(text)
    except socket.error:
      pass
  def ReadHamlib(self):
    if not self.hamlib_connected:
      return
    try:    # Read any data from the socket
      text = self.hamlib_socket.recv(1024)
    except socket.timeout:    # This does not work
      pass
    except socket.error:    # Nothing to read
      pass
    else:                    # We got some characters
      self.received += text
    while '\n' in self.received:    # A complete response ending with newline is available
      reply, self.received = self.received.split('\n', 1)    # Split off the reply, save any further characters
      reply = reply.strip()        # Here is our reply
      if reply[-6:] != 'RPRT 0':
        if DEBUG: print('Reject', reply)
        continue
      try:
        if reply[0:9] == 'set_freq:':        # set_freq: 18120472|RPRT 0
          freq, status = reply[9:].split('|')
          freq = int(freq)
          if DEBUG: print('  Radio S freq', freq)
          self.radio_freq = freq
        elif reply[0:9] == 'get_freq:':    # get_freq:|Frequency: 18120450|RPRT 0
          z, freq, status = reply.split('|')
          z, freq = freq.split(':')
          freq = int(freq)
          if DEBUG: print('    Radio G freq', freq)
          if self.quisk_freq == self.radio_freq:
            self.radio_freq = freq
            self.ChangeFrequency(freq, self.quisk_vfo, 'hamlib')
        elif reply[0:9] == 'set_mode:':    # set_mode: FM 0|RPRT 0
          mode, status = reply[9:].split('|')
          mode, z = mode.split()
          if DEBUG: print('  Radio S mode', mode)
          self.radio_mode = mode
        elif reply[0:9] == 'get_mode:':    # get_mode:|Mode: FM|Passband: 12000|RPRT 0
          z, mode, passb, status = reply.split('|')
          z, mode = mode.split()
          if DEBUG: print('    Radio G mode', mode)
          if self.quisk_mode == self.radio_mode:
            if self.radio_mode != mode:        # The radio changed the mode
              self.radio_mode = mode
              self.quisk_mode = mode
              if mode in ('CW', 'CWR'):
                mode = 'CWU'
              self.application.OnBtnMode(None, mode)        # Set mode
        else:
          if DEBUG: print('Unknown', reply)
      except:
        if DEBUG: traceback.print_exc()

class Key_Thread:
    def __init__(self):
        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(10,GPIO.OUT)

    def keyed(self):
        #print("Keyed")
        GPIO.output(10, GPIO.HIGH)
    def dekeyed(self):
        #print("De-Keyed")
        GPIO.output(10, GPIO.LOW)
    def stop(self):
        #Enter code to reset GPIO here:
        print("Key_Thread Stopped")
        GPIO.cleanup()

Tuesday, January 16, 2018

Learning Python

In my quest to learn Python, I came across a great (and free: My favorite price) interactive tutorial at This Site.  I'm impressed - quite a bit has somehow penetrated my thick skull in just the few hours that I've spent working the lessons thus far.

What is working for me are the exercises at the end of each lesson; they require you to creatively apply the concepts presented in the lesson, and, if you make a mistake, will show you the part of the code that's broken, but leave it to you to fix it. 

I wanted to share this because I reckon that I'm not the only one who learns best by doing, and this site is working for me.

Sorry, no radio related images today, just a picture of a very irritated cat.  You've heard of Grumpy Cat?  Meet Psycho Kitty.

 


Saturday, January 13, 2018

Flashback: RME-45

It's been quite a couple of weeks!  On New Years Day, I had the pleasure of being interviewed by Eric, 4Z1UG, for an episode of his excellent QSO Today podcast, which subsequently "aired" on January 7.  I imagine Eric's listeners responded in one of two ways:

1 - Who's this clown?
2 - N8NM? He still owes me money!

But, seriously, it was an honor.  To look back to some of those who've been featured in past episodes, many of whom are people who've had a marked influence on me and my amateur "career", it's nothing less than humbling.

Then, this morning, I hear my friends at SolderSmoke mention me during the same segment as Jeff Damm - wow!

And then I sit down and try to figure out why the SDR-2017/18 won't do what I want it to.  Python.  I suppose it's a great language, but I don't speak it, and, after nearly a month of hacking away at it, I've determined that I need to step back and start learning it from the ground up.  I'm a slow learner, this could take a while.

But, in the meantime, enough about me; let's talk about an old receiver: the RME-45.

Why you don't combine Ambien and Ebay.

I first became aware of this model about 25 years ago, when I was purchasing another old radio from a local collector and saw one that he had in his hoard.  What a dial!  But, since I'd already given over all my cash, I didn't ask if it were for sale, just filed the information with the intent to own one some day.  That came about five years ago, when I made the mistake of combining prescription drugs and Ebay.  Drugs are bad, just say no.  I really don't know what prompted me to pull the trigger on this deal, but I did, and a week later unpacked the wreck shown above.  At least I didn't pay much for it, at least not on the initial purchase.

Oh, but that dial!

Realistically, this should have been scrapped for parts; it had a lot of parts missing (and a few added), was rusted and dented, and, worst of all, had taken a significant "whack" to the tuning shaft, which destroyed the ball-drive and damaged the multi-section tuning cap. Ouch.

So, I'm looking at this thing, wondering what the hell I'm going to do with it, when I get this brilliant idea: Let's strip it down completely and rebuild it Heathkit style.

I'll let the pictures do the talking, but a few points of interest:
  • The ball-drive dial mechanism was replaced with one from a junked Philco 38-8 chassis, surprisingly little machining was necessary.
  • I filled the extra hole in the panel with JB Weld.
  • The wrinkled finish was simulated by spraying on a coat of Rust-O-Leum textured paint, then spraying a thin, blue-grey color coat over the top of it.
  • Yeah, I painted the chassis to cover up significant mouse-pee damage.
  • I had to make a new cover panel for the gear drive out of 22 GA steel.  This was bent-up old-school, in a vise.
  • During disassembly, I took approximately 200 pictures so that I'd know how every part was installed and every wire routed.
  • Repairing bent and broken four gang variable capacitors is hard.
  • Loctal tubes are cool!
Top view of chassis "before".  It looks better in the pic than it did in person. Mice had been busy using it as a toilet.

The stripped and painted bare chassis.

Starting to come together.

A little more progress.

The crystal filter module, ready for installation.

 First received signals were of my friend Don, K8BB, who's only a couple miles from me and was booming in at 60+ over!

As it is today.  Someday, I swear I'll get to silk-screening the labels, but as one of RME's founders said when asked why the controls on a prior model weren't labeled: "If you don't know what they do, you've got no business buying one."

So, how does it work?  Truthfully, it's outstandingly mediocre.  The performance is on-par with something like an NC-57 or S-40, the only real advantage it has over those rigs is the crystal filter, which works like that on an SX-42 but isn't quite as effective.  But it's got that great dial, and the tuning rate is adequate.  This is an early production model and has the dual-rate tuning system - the center of the the tuning knob is a slow rate, the outer concentric much quicker. 

The rig's OK, but for the same kind of money (and real-estate, it's a large box!) something like an NC-183 would have been a better value. 

73!

Tuesday, January 2, 2018

Non Sequitur #2 - Sweep generator for FM Alignment

Happy 2018!



Work on the SDR-2017 is continuing, though progress has been slow and fraught with frustration.  It pains me to say this, but it's mainly due to that "black box" stuff that N2CQR warns about - Linux and Quisk are fighting with my sound devices.  I'll get 'em whipped into shape, but in the meantime figured I'd share a project from a few years ago:

I've worked on enough old radios to where I can usually align the AM circuitry by-ear; I know where the local stations are on the dial and what to expect for sensitivity and selectivity.  AM is fairly easy because, for the large part, you're adjusting for maximum smoke.  FM is a little more tricky, though.  Yeah, it's possible to align by ear, but I find it actually faster and easier to align the IF and discriminator stages with a sweep generator, RF probe and scope.   But, my sweep generator was old, large and kind of a pain to use, so I built a small, stripped-down unit that didn't take up more bench space than the radio I was working on.


For those who may be new to the hobby, a sweep generator is an oscillator that repeatedly "drifts" from one frequency to another over a certain period of time, then abruptly "tunes" back to the frequency where it started.  When used in conjunction with an oscilloscope and detector probe, it allows one to view the shape, or bandpass, of a tuned circuit.  There are some great YouTube videos demonstrating the procedure, so rather than go into the procedure here, I'll focus on the circuit I threw together.

The heart of the circuit is a voltage-controlled-oscillator (VCO) based around Q4, that, at the center of it's control voltage range, runs at 10.7 MHz.  The 555 Timer is configured as a sawtooth-wave generator that serves as a common timebase for the VCO and "X" axis of an oscilloscope (via buffer U1B); the gain of U1C determines the sweep width, or differential between the high and low frequencies of the generator, and U1D adds a bias voltage to the ramp to scale the signal to tune the oscillator as desired. 

The circuitry around U1A, Q1 and Q2 is, I think, kind of cute.  I wanted to be able to indicate, on the screen of the scope, where 10.7 MHz would be on the X-axis, and came up with the rather crude but effective thought that, if I paused the timebase for just a couple milliseconds at any given point, it would light the screen phosphors a little brighter than the others - in other words, create a "blip" on the screen.  So, U1A is a comparator that, when the ramp waveform reaches a certain threshold (set by R2), stalls the ramp generator just enough to increase the intensity at that point.  Unfortunately, it doesn't photograph well, but you can almost, kind of see it at the peak of the waveform in the picture below:


The picture above and the one at the top of the page show the frequency response curves of properly adjusted IF stages.  This is done by applying the sweep generator signal at the input to the stage and monitoring the output with a simple, diode detector probe (connected to the scope's Y axis.)  The stages are "tweaked" for maximum amplitude at the marker (blip) frequency (10.7 MHz.)

The next shot shows what's called the "S-Curve" response of a properly aligned discriminator (detector) stage.  Again, the sweep generator is connected upstream, but this time the scope is connected, using a regular scope probe, to the output of the discriminator.
Again, the marked didn't photograph well, but you can almost see it right in the middle of the "S".  When the IF and discriminator are adjusted correctly, the positive and negative portions of the signal will be at their peak amplitudes, indicating that the IF's are adjusted for max.  They'll also be of equal (but, obviously, opposite) amplitude with their zero-crossing  point right at 10.7 MHz, indicating that the discriminator is in harmony with the IF passband.  If you have the volume of the set turned up, it'll sound like a motorboat or a long, impressive fart, depending on how your mind works.


The finished product is shown above.  The knobs are pretty self explanatory - marker is adjusted to put a "blip" right at 10.7 MHz, Width controls the difference between the lowest and highest frequencies of the oscillator (+/- a couple hundred KHz max) and level adjusts the output of the generator to suit the circuit under test.  Even at it's minimum setting, it may be higher than needed for some measurements, hence the stack of in-line attenuators.

The enclosure is a from a defunct PC power supply; I stripped it of it's guts, made front and rear panels from #22 aluminum stock and sprayed it with some Rust-Oleum hammertone paint.  Almost looks professional - close enough for me!

73 - Steve N8NM

Tuesday, December 19, 2017

Non Sequitur: Parts Scrounging and 6L6 Transmitter

MOPA rig with N3ZI VFO
A recent post on the SolderSmoke Blog got me thinking about the time-honored amateur tradition of building things out of parts obtained curbside.

I think I was probably eight or nine years old when I began lugging home and systematically dismantling junked radio and TV sets, something that became almost an obsession with me in my pre-teen years.

People threw away some cool stuff in the early 1970s, when one could count on harvesting at least one old black and white television set from among the household rubbish set out for collection, and I got good at retrieving them.

Garbage night was something of a weekly holiday; I'd rush home from school, grab my bike and begin hovering the neighborhood, hoping to catch someone in the process of dragging one of the old behemoths to the curb.  If my reconnaissance mission were successful, the next challenge faced was getting the thing home.  With smaller sets, I found that I could dismount my steed and precariously balance my bounty on the seat and handlebars of my Sting-Ray bicycle.  Larger, console sets posed a greater challenge, because I'd have to zip home, grab a wheelbarrow and zip back before someone else claimed my prize.  Much to my parent's dismay, my success rate was pretty decent.

With the derelict safely on the workbench, I'd begin the laborious disassembly process.  Every part would be identified, carefully unsoldered (no lead clipping for this kid!) and added to my ever expanding inventory.   Tubes were carefully sorted and stored in egg cartons, resistors, capacitors and small inductors were taped to index cards and categorically filed for easy retrieval, while the crown jewels: transformers, would be stashed under my bed in old shoe boxes.

Meanwhile, I'd be pouring over the various books and magazines, dreaming of building some of the featured projects.  Unfortunately, I wasn't quite there yet.

I wonder whatever happened to all that junk?  I should ask my mother.

Fast forward another 35 years.  While I don't practiced "Alley Picking" like I did as a kid, I had somehow amassed another hoard of salvaged parts.  But, this time, thanks to skills acquired over time and the endless resources available on the web, I knew I'd be able to do something with them.

In the search for candidate projects, I came across an article from the September 1964 Electronics Illustrated on KH6SKY's web page that described a simple 6V6 CW transmitter built from junkbox parts, appropriately named "The Scrounger".

The Scrounger was built on an inverted cake pan, which, enjoying cake as I do, appealed to me.  So, I built my first Scrounger prototype, which was reasonably faithful to that described in the EI article.  The damned thing actually worked, and I made quite a few contacts until disaster struck:  I accidentally set some papers down on my J-38 without a crystal in the rig and zorched the transformer.

That unfortunate incident taught me of the importance of protective bias, and armed with this knowledge, I set about building the improved version of the transmitter pictured at the top of this entry.

Unlike the original Scrounger, this version employs a 6AG7 and 6L6 in a Master-Oscillator-Power-Amplifier (MOPA) circuit, complete with bandswitching and a PI output network.  Of course, I added protective bias and changed from cathode to grid keying. 

Having addressed those "shortcomings" of the original Scrounger, I became dissatisfied with being limited to crystal control, so I added a synthesized VFO based around one of N3ZI's AD9850 boards.  Since the AD9850 doesn't have enough "oomph" to drive the transmitter, I added another 6AG7, making the rig a three tube affair.

It's actually a pretty decent little rig now, but has a much different character than my first version, mainly because it uses mostly new and Eastern Bloc surplus parts rather than those scrounged from the junk.  It's still got soul, but it's of a different nature.

I've still got the remnants of my original Scrounger, I should rebuild it someday.

Friday, December 15, 2017

Back to the SDR rRig: Band and Low-Pass Filter Boards

I doubt anyone really likes winding toroids, and I'm no exception.  But, unless you're in a position to hire someone to do it for you, you gotta suck it up and get it done, which is what I've been doing for the last three nights.

Below is a pic of the nearly completed bandpass filter and low-pass filter boards for the SDR-2017.   Nothing high-tech about 'em, just capacitors, coils and relays.


I think I mentioned in a prior entry that I'd basically stolen the basic design of the filters from those used in the IC-735, though I did massage them a bit using LT-Spice.

If you look carefully at the boards, you'll see that I'm using Manhattan style construction using small round pads.  I kind of stumbled onto the idea of making these pads after ordering some el-cheapo PCB stock that doesn't like being cut with shears, which is how I've always made Manhattan pads in the past. 

Amongst my seldom used tools is the hole-punch set pictured below.  I found that, by inserting the PCB stock into the punch upside-down, I was able to consistently knock-out perfect circles in various sizes.  I've used Rex Harper's ME Pads and like them, so to pay tribute to Rex, I call these "My Pads".

Hole punch used to create Manhattan Pads. 1/8" pad shown near the face of the ball-peen hammer.

Inverted cheapo PCB stock in punch. I found it necessary to punch the stock from the backside, otherwise the phenolic tended to shatter.