WB8WGA's Simple Inexpensive TNC



In 2005 Bob Ball published an article in QEX magazine describing a small and inexpensive modem-less TNC using a PIC 16F88 that can be built for under 25€.

A terminal node controller (TNC) is a device used by amateur radio operators to participate in AX.25 packet radio networks [12] [13]. It is similar in function to the Packet Assembler/Disassemblers used on X.25 networks, with the addition of a modem to convert baseband digital signals to audio tones [11].

This TNC implements only parts of the AX.25 protocol, to encode and decode Unnumbered Information frames, used in the APRS system.


It has two working modes:

  • can be used as a regular TNC in which a command line interpreter is available at the serial port (but without the connected mode);
  • and as an APRS tracker when connected to a serial RS-232 GPS receiver.

This project is my implementation of Bob Ball's TNC for which I designed a very small PCB with a 9 pin SUB-D and a 6 pin mini-din connectors, for Computer/GPS and radio respectively.


Design and Implementation

The TNC schematic is almost a replica of Bob Ball's main schematic from the article and includes several improvements made by many others over the years:

The circuit itself needs about 18mA while running and most GPS received don't require more than 50mA. The voltage regulator is therefore a 78L05 capable of delivering 100mA which is enough and has a lower quiescent current than a regular 7805.



The schematic is entirely based on Bob Ball's design and includes the enhancements referred earlier.


Parts list

The full parts list is provided on this table.

Part number Description
C1 22p
C2 22p
C3 100n
C4 100n
C5 100n
C6 100n
C7 100n
C8 1u/25V
C9 1u/25V
C10 1u/25V
C11 1u/25V
C12 220u/25V
C13 100u/10V
C14 1n
D1 Green 3mm LED
D2 1N4148
D3 1n4148
D4 1n4148
D5 Red 3mm LED
J1 Jack
J2 DB9-Male 90º
J3 6 pin PS2 PCB female
J4 2 pins jumper with cap (GPS)
J5 2 pins jumper for one-wire expansion
Q2 2n7000 TO-92
R1 1K
R2 2K
R3 3K9
R4 8K2
R5 1K
R6 100K
R7 10k
R8 1K
R9 2K2
R10 470
R11 1K
R12 10K
R13 10K
R14 470
R15 100k
R16 4K7
T1 BC547 TO-92
U2 78L05 TO-92
U4 DS18B20 TO-92
X1 20MHz Crystal



A PDF with the PCB tracks can be downloaded from this link. To keep the PCB single sided, the three red tracks from the top layer are to be replaced with wires.

The PCB is very compact and can be seen here:



PCB after etching

One of the first prototypes assembled and tested
but without the temperature sensor


The front and rear connectors: 


front panel


back panel

Radio connector mini-din 6 pins Serial Port DTE and DC input

 The serial port is a DTE so a GPS can be connected to the TNC without a null-modem cable changing the TX and RX pins. However the serial port does not provide power to the GPS receiver. If you need to power it via this port, please connect a wire from pin 4 of the serial port to pin 4 of the mini-din radio connector.

The GPS receiver I use has an extra power plug so I never needed to power it from the serial port.

The radio connector pins have these signals:



When I started this project two versions of the software were available for free. I tested both supplied by Bob Ball, V1.08 and V2.00. The first version is the one mentioned in the article which works very well either in standalone as in GPS mode. The second version is an upgrade to the first version and includes extra code to use a Dallas 18S20 temperature sensor, so temperature values can be added to the beacon text using escaped characters:

I've implemented several enhancements to his latest version:



There are two modes of operation as referred in Bob Ball's article: command line interactive mode (J4 removed) and GPS mode (J4 inserted).

To start, connect a serial null-modem serial cable between the computer and TNC and run a terminal emulation program on the computer. Configure the serial port with 9600bps, 8N1 for V1.08 or 4800bps, 8N1 for V2.xx and leave the jumper J4 out.


Basic configuration for both modes

Set your call address with MYCALL.



Set the destination address of UI frames with UNPROTO:


Using repeaters (e.g. for mobile stations or fixed stations in isolated areas):

This path will give you one hop using fill-in wide1 repeaters and two hops using wide2 repeaters.


And finally enter the number of minutes between beacons. Use short values like 1 or 2 minutes for mobile stations connected to the GPS receiver and longer periods like 10 to 30 minutes for fixed stations with a static beacon:



Setting the beacon text for a stand-alone configuration

To send APRS beacons while in command line interactive mode, define the BTEXT string with an APRS formatted string and set the BEACON broadcasting period to 10 minutes or so.

Here's an example BTEXT string to configure the TNC for a fixed station (no GPS receiver connected):

The message contains:

The symbol defined by / and % is a DX Cluster as define in APPENDIX 2 of the APRS Protocol Reference. Many other symbols are available by selecting different combinations for those two characters. A symbol table also exists in G4HYG Cross Country Wireless APRS TNC Digi Tracker Operating Manual [14]


Configuring extra parameters to use the TNC as digipeater

This TNC can also repeat APRS packets or other UI frames it receives, if the destination path matches the address configured in MYALIAS and DIGIpeater is ON. To enable the digipeater, configure both parameters:


Configure the GPS sentence to use the TNC in GPS mode (J4 inserted)

When in GPS mode (GPS jumper inserted) the TNC transmits GPS frames it receives from its serial port. To use this mode first the TNC must be configured via the command line interpreter, so start the TNC without the GPS jumper inserted and configure it with the following instructions:

Then select one of the gps frames to transmit:

$GPRMC is the biggest frame but includes position, speed and direction. $GPGLL and $GPGGA include the position and are smaller. More information on the nmea gps sentences can be found at NMEA data website [10].

Since in GPS mode the beacon text is the nmea sentence from the GPS receiver, there is no way to place the symbol information there. There is, however, another way to select the symbol to represent the TNC. Set a different UNPROTO address with the symbol encoded.

This is how:

Replacing the above nn with 86 or 30 selects a mini-van symbol or a car symbol, respectively.

Far more symbols exist and, as stated before, a symbol table can be found on Chris G4HYG APRS Digi Tracker Operating Manual [14].


To save the configuration to the eeprom so it will remain stored after powering down the TNC, use the perm command:

And that's it, now disconnect and reconnect power to the TNC with the GPS J4 jumper inserted and it will start broadcasting your position and possibly speed and direction.


Using the improved versions v2.10 and v2.20 while in GPS mode (J4 inserted)

While in GPS mode these versions also transmit the BTEXT beacon string either alternately (v2.10) or after five GPS sentences (v2.20). Configuring the BTEXT string as a status sentence we may send more information like temperature measurements, QRA, mission, etc. while in GPS mode.

To configure the BTEXT as a status sentence place the > symbol as its first character. Example:

Thus we have:

Don't forget to save the configuration using the perm command and you're set to go out and enjoy your TNC!



Over the years this little PCB has been made a little everywhere all over the world. On this page are pictures and videos I can find on the web of other people building this TNC. Go there and have a look.



Original QEX article files from the publisher

Bob Ball's firmware V1.08 (original version, also available in [1])
Bob Ball's firmware V2.00 (version to use with a DS18S20, also available in [7])

My updated firmware V2.10 (interleaves status frames with $GP*** frames and reads temperature from a DS18B20 sensor)
My updated firmware V2.20 (sends a status frame after five $GP*** frames and reads temperature from a DS18B20 sensor)

Gianfranco IZ8EWD's blog with improved firmware (firmware with kiss mofr and other goodies) (local copy 2.3.1, old 2.3.0)

PCB tracks (PDF file with tracks mirrored)
PCB top silk screen (component side PDF file also mirrored)

Eagle schematic and pcb files (may be used with the freeware version available at Cadsoft)



[1] (not working as of 2012) Bob Ball's Inexpensive TNC website (you can read the paper [2] on this URL)

[2] Ball, Bob, "WB8WGA, An Inexpensive Terminal Node Controller for Packet Radio", QEX, Mar/Apr 2005

[3] Klaus H. Hirschelmann Mini-TNC (TNC with simplified RS232 level shifter)

[4] Bob Ball's errata (local copy)

[5] Andrew Errington ZL3AME PIC-based TNC

[6] Lebanon OD5 APRS glossary website

[7] G4HYG Cross Country Wireless APRS TNC Digi Tracker website

[8] Latest APRS guidelines

[9] APRS Protocol Reference V1.01 (local copy)

[10] NMEA data website

[11] Wikipedia definition of Terminal Node Controller (TNC)

[12] Wikipedia definition of AX.25

[13] AX.25 link access protocol for amateur packet radio

[14] G4HYG Cross Country Wireless APRS TNC Digi Tracker Operating Manual

[15] Gianfranco IZ8EWD's MiniTNC blog (and firmware)


Published on Tuesday 2008/09/23, last modified on Friday 2020/01/17