A few years back I built a QRSS transmitter (for slow morse and WSPR) based on a recycled DLink DSL-502T router running OpenWRT and connected to an Si570 DDS module. (http://www.quicktrip.co.nz/jaqblog/home/44-si570qrss)
This worked well for a while but eventually the DSL-502T failed and would no longer connect to the network. Not great for a time synchronized QRSS transmitter that relied on NTP service.
The replacement is a Hans Summers Ultimate 3 QRSS kit. (http://www.hanssummers.com/ultimate3.html). The Ultimate 3 is a combination microcontroller and AD9850 DDS module that if connected to a GPS providing 1PPS and $GPRMC NMEA sentences will generate time synchronized messages in a number of formats with no requirement for network connectivity.
In my parts bin I had several Ashtech g8 GPS modules. The Ashtech g8 is a late 1990's GPS module designed for integration into OEM equipment. I picked up a several at an Amateur Radio junk sale a few years back and hadn't really put them to use.
The g8 meets the requirements for the Ultimate 3 by providing the required 1PPS signal and $GPRMC sentence. Unfortunately the default configuration on power up does not send $GPRMC and instead sends $GPGGA and $GPVTG at 4800 baud. The startup configuration can be changed by connecting via the serial interface, changing the configuration and saving to backup memory but to retain this (and the GPS almanac for fast power on) when the power is cycled requires a 2.7v-5.5v power source on the V_BACKUP line.
With fast startup not critical for this application and not wanting to worry about backup batteries going flat, I decided to go with a different approach and use a microcontroller to reconfigure the g8 on power up.
With a number of other applications for GPS in the shack I also decided to buffer the 1PPS and Serial outputs of the g8 and make these available for use other than the Ultimate 3. This is done using a standard 74LS buffer. More on this in the next article.
The GPS configuration is handled by an AVR ATTiny2313A with the code written in C using AVRStudio with the compiled code using 508 bytes (28%) of the available flash memory.
The approach is as follows:
- Wait 5 seconds on startup for things to settle
- Start receiving serial data from the GPS at 4800 baud looking for 0x0D, 0x0A,$ indicating the GPS is in the default configuration sending data at 4800 baud
- Configure the GPS to send data at 9600 baud using the command $PASHS,SPD,A,5
- Start receiving serial data from the GPS at 9600 baud looking for 0x0D, 0x0A,$ indicating the GPS speed configuration command worked correctly
- Configure the GPS to stop sending $GPGGA and $GPVYG (actually stop all data) using the command $PASHS,NME,ALL,A,OFF
- Configure the GPS to start sending $GPRMC using the command $PASHS,NME,RMC,A,ON
I have included the code here should it be useful for anyone wanting to perform similar configuration but note that your GPS may require different commands.
ATTiny2313A and 74LS buffer. The ATTiny2313A can be run from an internal oscillator with no external crystal and capacitors required but they were already on the board after an aborted attempt to get C code to run correctly on old AT90S2313 parts from the junk box. The LED's are for debugging and indicate the current state machine step.
Alternate view showing the Ultimate 3 and the g8 GPS module.