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  . 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 .
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:
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.
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.
The full parts list is provided on this table.
|D1||Green 3mm LED|
|D5||Red 3mm LED|
|J3||6 pin PS2 PCB female|
|J4||2 pins jumper with cap (GPS)|
|J5||2 pins jumper for one-wire expansion|
The PCB is very compact and can be seen here:
|PCB after etching||
One of the first prototypes assembled and tested
The front and rear connectors:
|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.
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 
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:
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 .
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 .
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.
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!
Original QEX article files from the publisher
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)
 Bob Ball's Inexpensive TNC website (you can read the paper  on this URL)
 Ball, Bob, "WB8WGA, An Inexpensive Terminal Node Controller for Packet Radio", QEX, Mar/Apr 2005
 NMEA data website