APRS Tracker

APRS Tracker is a firmware for APRS beacons based on a PIC processor such as the well known Tinytrak. (Version 0.7 supported both the PIC16F84 as the PIC16F6xx, version 0.8 only works with the PIC16F628 or PIC16F648). It is distributed under the GNU GPL.

aprstracker aprstracker
Some images of my own home-build tracker

This software is also used for the KF161-Tracker, a tracker that can be build into a Bosch KF161 instead of the tone unit.

KF161-Tracker
KF161-Tracker

There are several reasons why I wrote this firmware instead of using one of the hex files available on the web.
I have a GPS receiver that outputs GPGGA messages and wanted a Tinytrak that could use them. I also wanted to build it myself and experiment with it. Experimentation is the most important aspect of my hobby and as such I want to be able to not only use my tracker but also to change it as I like. This is also the reason I published it under the GPL, I want others to be able to continue to experiment and learn from my experience and I can again learn from theirs. While searching for tinytrak sourcecode I did found a project called SOTT (Son of TinyTrak) by Michael Pendley K5ATM. Unfortunatly it also didn't understand GPGGA sentences and it was written for a very specific compiler I did not have access to. I decided not to port the code but to start over myself and use Michaels comments as a guide.

Download

The current version is version 0.8:

  • understands GPGGA and GPVTG sentences
  • does smartbeaconing (0.8 has improved smartbeaconing)
  • autodetects serial polarity (RS232 or TTL)
  • has 4800 and 9600 Baud support
  • is configurable via a serial null-modem cable
    Included is a config program for linux, please don't ask for a windows tool, I won't make it (if anyone really wants it it is not that hard to do yourself) Ok, so not everyboddy uses Linux yet... below you can download a floppy image I made with a menu controlled version of the config tool
  • reports course and speed
  • includes altitude reporting
  • Works with PIC16F84, PIC16F627, PIC16F628 and PIC16F648 controllers.
The digipeater path has a default of RELAY WIDE2-2, this should be enough for normal use. Please think carefully before changing it!!!!!! (In fact changing it isn't even implemented in the current config tool :)
aprstracker-0.8.tar.gz
aprstracker-0.7.tar.gz

Programming interface

atprogram.dsk is a floppy image containing a linux kernel and the config tool. Write this file to a floppy disk with a tool such as rawwrite and boot your computer with it. (It needs atleast a 386)
For the curious: The disk image contains a linux 2.4.20 kernel with just about everything stripped out and a modified atprogram (with some basic menu) compiled against dietlibc.

The programming protocol is relativly simple, connect a serial cross cable to the tracker on the gps port. To put the tracker in programming mode send the '!' character. The tracker will report itself with 'AT' followed by two version bytes. The first version byte is the firmware version, the second the ROM map version (All firmware versions with the same ROM map version number look the same to the programmer.) When in programming mode you can read and write the 64 bytes of internal eeprom memmory with the read command ('R' followed by the address, the tracker responds with one byte) and the write command ('W' followed by the address and the to be written byte, tracker responds with the data written). Any other character than 'R' and 'W' will return the tracker in normal operating mode.

This is the layout of the version 2 ROM map:
addresscontent
0x00 - 0x06 Destination address in AX.25 address format
0x07 - 0x0d Source address in AX.25 address format
0x0e - 0x1b Digipeater fields in AX.25 address format
This field is terminated by setting bit0 of the last byte of the last digipeater address.
(As one might have noticed the source, destination and digipeater fields are transmitted by the transmitter without modification)
0x1c Beacon interval in minutes
0x1d Tx delay, measured in flags (about 0.8ms)
0x1e Symbol table
0x1f Symbol id
0x20 - 0x47 Null terminated comment text
0x48 Minumum threshold for corner pegging (degrees)
0x49 Threshold slope for corner pegging (degrees/knot)
0x4a Time between other beacon & turn beacon (secs)
0x4b Fast beacon rate (secs)
0x4c Slow beacon rate (mins)
0x4d Speed below which SmartBeaconing is disabled (knots)
0x4e Speed above which we'll beacon at the fast rate (knots)

This is the layout of the version 1 ROM map:
addresscontent
0x00 - 0x06 Destination address in AX.25 address format
0x07 - 0x0d Source address in AX.25 address format
0x0e - 0x1b Digipeater fields in AX.25 address format
This field is terminated by setting bit0 of the last byte of the last digipeater address.
(As one might have noticed the source, destination and digipeater fields are transmitted by the transmitter without modification)
0x1c Beacon interval in minutes
0x1d Tx delay, measured in flags (about 0.8ms)
0x1e Symbol table
0x1f Symbol id
0x20 - 0x3f Null terminated comment text

INET: Jeroen Vreeken, pe1rxq@amsat.org
AX.25: pe1rxq@pi8zaa