A $30 Mobile APRS Radio

The Motorola Radius SM-series radios are discontinued land-mobile radios (FCC Part 90) that are available used for under $50. The VHF models can be converted to work on the 2m band, making them an inexpensive option for a dedicated APRS radio.

This article goes over the features of the radio, what you will need to set it up as a dedicated APRS/packet radio, how to program it for the 2m ham band, and my failed attempt to make it work for 9600 baud.

Making these work isn’t for everyone. You have to be a little technically adventurous. But if you want a mobile packet radio for very little money, this could be for you.

Read more here: https://nbviewer.jupyter.org/github/mobilinkd/MotorolaSM50/blob/master/MotorolaSM50.ipynb

Test Fixtures

Mobilinkd TNC3 test fixture and PCB

The test fixture created for programming and testing the TNC3 has been a great time-saver. Pogo pins on the test fixture mate with test points on the bottom of the TNC3 PCB. These are then brought out to header pins that can be attached to an oscilloscope, logic analyzer, frequency counter, or any other manner of test and development equipment.

However, all is not perfect.

TNC3 on test fixture with ST/Link debugger.

I was reminded today that a test fixture, when used, becomes part of the overall circuit. And for sensitive analog circuits, this can cause problems.

Today I spent a few hours re-discovering the impact the test fixture has on the TNC3 audio output circuitry.

Distorted 9600 baud output.

The TNC3 has a fairly wide audio output range, about 3 orders of magnitude or about 60dB. The low range, below about 100mV peak to peak, uses an attenuator (basically a voltage divider).

When the audio output attenuator is disabled, which is required for 9600 baud modulation, serious distortion was occurring in the audio output. This only occurred when on the test fixture.

Audio distortion with no modulating signal.

The clue that led to the to the source of the problem was capturing the noise alone, without a modulating signal. Note frequency counter on the oscilloscope (upper right) in the above image.

32 768 Hz is the frequency of the low speed oscillator on the TNC3.

Distorted audio output signal with low speed clock signal.

The test points for the audio attenuator and the clock are next to each other. Their signals run parallel across the test fixture.

This couples digital noise at a very sensitive point in the analog circuitry.

When the attenuator is enabled, this noise is connected directly to ground so it doesn’t affect the audio. When disabled, the signal conducts straight into the audio path.

Clock pin disabled; clean audio output.

Disabling the clock output pin in the TNC3 firmware eliminates the noise when on the test fixture; we get a clean output signal.

And, in its place, we now see a faint hint of the audio signal being coupled to the (now unused) clock signal.

Lesson learned. One must understand the impact a test fixture will have on a DUT. And one must pay just as much attention to proper design principles when laying out a test fixture as one does when designing the device itself.

Arduino KISS TNC

Create a Mobilinkd TNC on a breadboard for just a few dollars.

The Mobilinkd TNC1 started its life, as with many things these days, as an Arduino project.  It quickly took on a life of its own, first gaining Bluetooth capabilities when I discovered the latent abilities of APRSdroid.  And then gaining a battery and recharging circuitry before finally ending up as a product that could be mass-produced.

Join us at https://groups.io/g/mobilinkd for questions and help on assembling this project.

But underneath it all is still the Arduino project that it started out as.  With a few minor tweaks to the firmware to remove the Bluetooth and battery bits, the same firmware that runs in the Mobilinkd TNC1 will run on an Arduino.


The TNC doesn’t use Bluetooth, so you cannot use it with APRSdroid, but you can use other packet and APRS software on your computer over the Arduino’s USB serial port.

Shopping List

Here are the things you will need for this project:

  • Small Breadboard (IB401 w/Jumper Wires – $5; Amazon)
  • Arduino Nano v3 (Generic Arduino Nano v3.0 – $12; Amazon)
  • 10KOhm Resistor (Qty 3)
  • 100KOhm Resistor
  • 1KOhm Resistor
  • 2.2KOhm Resistor (maybe)
  • 10nF Capacitor
  • 100nF Capacitor
  • NPN Transistor (PN2222 or equivalent)
  • 3.5mm 4-pole jack (SparkFun BOB-11570 – $4)
  • TNC cable for your radio (~$10; Mobilinkd)
  • 3.5mm 4-pole extension cable (optional but recommended – $7; Amazon)

The resistors, capacitors and transistor cost just a few cents in total if you have them lying around.  Otherwise you can find a various starter kits that include the breadboard and a set of electronic components for around $20.

You can skip the 4-pole connector and wire a cable directly into the board if you want to save yourself a few bucks.

You will also need a computer (Linux, Windows or OS X) and a mini-USB cable to load the Mobilinkd firmware onto the Arduino and to run the APRS or packet software.

Getting Started

Take a look at the breadboard.  The pin rows are numbered from 1 to 30.  And the pin columns in the middle are labelled “a” through “j”.  There are power rails along either edge.  We will only be using the power rail closest to the “j” column for this project (the top two rows, red and blue,  in the diagrams below.)


Plug the Arduino Nano into one end of the board.  The Arduino pins should start at row 1.

Breadboard TNC_bb_1

3.5mm Connector

Plug the 3.5mm connector into the other end, in column “a”, pins 27-30. The SparkFun connector will facing out the rear of the breadboard.

(The pinout on the SparkFun connector is different than the TRRS connector that I used in the picture at the top of this article.  Some of the parts in this tutorial will be in different places on the board than what is shown there.)

Breadboard TNC_bb_2

(Big shout out to Rick Waldron for the BOB-11570 connector component for Fritzing.)

Just note the following:

  • Sleeve is ground.
  • Ring2 is audio out (TX)
  • Ring1 is PTT
  • Tip is audio in (RX)

PTT Circuitry

Plug the transistor into column “a”, rows 21-23.  The flat part of the transistor is facing the nearest rail.

  • Emitter in a:21
  • Base in a:22
  • Collector in a:23

Run a wire from e:23 (Collector) to the negative rail (Ground).  Plug one end of the the 1KOhm resister into e:22 (Base) and the other into g:22.  Run a wire from j:22 to j:3 (Arduino D10) .  And then run a wire from e:21 to e:28 (3.5mm Ring 1).

Breadboard TNC_bb_4

PTT (Alternate)

If your radio does not use a separate PTT signal, you will need one additional component.  You will need 2.2KOhm resistor.  Instead of a wire from e:21 to e:28, you will need to plug the 2.2KOhm resistor from d:21 to d:17, and then run the wire from e:17 to e:29.  This multiplexes the PTT signal on the audio output line.  If you are using this with an Icom, Yaesu or Alinco HT, this is likely what you need.

Breadboard TNC_bb_4b

Audio Output

The TNC generates audio using PWM (pulse-width modulation).  This is filtered by the radio’s audio circuitry into a nice smooth audio waveform.

Plug the 100nF capacitor into e:29 (3.5mm Ring 2) and f:29, jumping the middle of the board.  Plug the 100KOhm resistor from g:29 to g:25.  Connect a 10KOhm resistor from j:25 to the negative rail (Ground).  Then run a wire from i:26 to i:7 (Arduino D6).

Breadboard TNC_bb_5

The two resistors form a voltage divider that takes the 0-5V audio output and reduces that to 0-500mV.

Audio Input

The TNC uses the ADC on the Arduino to capture the audio input, which is then decoded.

Plug the 10nF capacitor into e:27 (3.5mm Tip) and f:27, jumping the middle of the board as we did with the audio output.  With the remaining two resistors, plug one into j:27 and the negative rail (Ground), and the other into i:27 and the positive rail (5V).  Be careful not to short the resistors.  Run a wire from h:27 to a:4 (Arduino A0).

Breadboard TNC_bb_6

In case you are wondering, the pair of resistors are there to add a 2.5V DC offset to the audio signal.  This is needed because the audio signal comes in at about +/-1V.  The ADC on the Arduino can only handle input voltages between 0-5V.  With the offset, we get an audio signal that varies from 1.5-3.5V.

Power & Ground

Run a wire into a:12 (Arduino 5V) into the positive rail (5V).  Run a wire from i:12 (Arduino GND) to the negative rail (Ground) and from a:14 (Arduino GND) to the negative rail.  It is always a good idea to tie all of the ground connectors to the ground rail.  Finally, run a wire from e:30 to the negative rail.  This ties the 3.5mm connector’s sleeve to ground.

Breadboard TNC_bb_7


That’s it for the hardware!  Go through the instructions one more time.  Make sure the wiring matches and that there are no shorts (easy to do with the bare wires on the discrete components).  If everything looks OK, we are ready to proceed to uploading the TNC firmware.

Firmware Installation

For this you will need  a program called “avrdude” and the firmware from the Mobilinkd GitHub site.  These instructions are going to assume that the firmware is being installed from a Linux host, but the process is very similar on Windows and Apple OS X.  The major difference is that “avrdude” is available as an easily installed component of most Linux distributions.  Getting and installing avrdude for Windows or OS X is a little more involved.

Download the firmware from the GitHub site.


You should have a file called “mobilinkd-473-arduino.hex”.

Plug the mini-USB cable from you computer to the Arduino.  Find the USB serial port being used.  It will typically be /dev/ttyUSB0.  On my computer it is /dev/ttyUSB1 because another USB device is plugged in.

Run the following command to upload the firmware:

avrdude -c arduino -p m328p -P /dev/ttyUSB1 -b 57600 -U mobilinkd-473-arduino.hex

You should see the TX/RX LEDs flash for a bit as the firmware is uploaded, and you are done.

You now have a fully functional KISS TNC with a USB serial port.  It has PTT signalling that, depending on how the circuit is configured, will work for just about any radio.

Leave the cable plugged into the TNC because this is how your computer will be communicating with the TNC.

Connect Your Radio

Before plugging in your radio, please be careful with RF around computers and in your shack.  The wires on the breadboard and the leads on the components are all small antennas.  It is best if you have an external antenna, keeping the RF well away from you work area.  Or you can use a dummy load while testing.  If you have neither of those things, please at least set your radio to low power.

Plug the extension cable into the 3.5mm jack on the breadboard.  Plug your TNC cable into your radio, making sure it has a ferrite bead on it.  Then plug the TNC cable into the extension cable.

Running APRS Software

The last step of the process is to run APRS software on your computer.  That is a bit outside the scope of what I had intended for this article.  Xastir is an easy-to-use GUI app on Linux.  Just set your software to connect to a KISS TNC on the same COM port that you used when you uploaded the firmware.  Set the serial port to 38400, 8N1.

If you are on Windows or Linux, you should be able to use the Mobilinkd TNC configuration programs to adjust the TX volume and monitor the RX volume, as well as set the various KISS parameters.