I recently obtained a Yaesu VX-8DR, primarily for use on SOTA activations. The radio has the six metre band, which is a bonus as SOTA is presently running a six metre challenge. It’s a nice little radio with lots of features, especially the APRS integration.
On some more remote SOTA trips, we have used APRS over 3/4G when it was available. So, the VX-8DR with APRS was a possible supplement or replacement for APRS. The only problem is that the VX-8DR doesn’t come with a GPS receiver and the GPS option has a hefty price tag. To add GPS, an adaptor is required that sits atop the radio and anchors to the antenna base. The adaptor itself is quite expensive. The GPS plugs into this adaptor.
Having a look on the web, it turns out that the GPS receiver used on the VX-8DR has a non-standard NMEA interface based on GGA and RMC messages but with some subtle differences in fields. This means that you cannot just interface a standard GPS receiver to the radio and expect it to work.
The NMEA comms software algorithm in the radio is not very tolerant of any deviations to the format from the Yaesu GPS. For instance, it expects three decimal places for some fields and will not process two decimal places. I came across this project by David Fannin which uses an arduino to process the standard GPS messages from a UBlox GPS and convert them to the Yaesu protocol. It looked like a great place to start, although the end solution had to be reasonably compact.
I had a look on Ebay and found some UBlox Neo 6m receivers at very cheap prices, I bought two, one from China for $13 delivered and one locally for $25 delivered. The local one had a battery backup and a slightly taller antenna connected via a plug and socket. The Chinese one has the antenna directly connected to the module, although it is a little more compact and doesn’t have an LNA. The GPS receivers are 56 channel so they should perform better than the 12 channel unit that is supplied as an option for the VX-8DR.
Both receivers worked fine on arrival, and they worked nicely indoors. BTW, the serial port levels are 3.3V, so an FTDI type interface with these levels must be used. My interface came from a VX-8DR programming lead purchased from Ebay. The cable was cut in half, one half was used to connect the GPS to the radio, and the other end for an experimental 3.3V USB serial interface for the PC. As the UBlox GPS is a 3.3V unit, I ran the Arduino Nano at 3.3V instead of 5V so that everything was level compatible. The Arduino ran fine at 3.3V even with the 16MHz clock.
The power to the GPS was accidentally reversed while testing. A little puff of smoke rose, and the power was ripped off quickly. The GPS still worked, so must have just half cooked a resistor. As expected, the GPS from China did not remember any of its configuration settings or satellite data when power cycled. The strange thing is that this receiver has a flash chip on it, but it doesn’t seem to store any settings. Maybe it has a design error and was sold cheaply due to this.
The Ublox can be monitored and configured by this great program from Ublox. It is very comprehensive and can monitor and change many settings. David’s Arduino NMEA converter program was restored to defaults and worked fine between the Ublox and VX-8DR.
Now the challenge was to package it up somehow and keep it small. The radio connector supplies 3.3V from its own regulator inside the radio, but the programming lead that was purchased for the radio plug did not bring out the pin for 3.3V, so for the moment, I decided to power the GPS from a small LiPo battery externally. The Arduino Nano, GPS receiver and the battery all fit in a small project box about 48 mm x 78 mm x 20 mm.
There are two screws on the battery that hold the belt clip on. The idea is to take off the belt clip and use these screws to fix the box to the rear of the battery. Earlier I was going to use a quadrifilar helix Sarantel antenna on the top side of the box, but I found that the patch antenna with the GPS worked fine, even while oriented on its side. This kept things a little simpler.
The whole thing works fine, although the battery inside the box must be switched off when not in use. The next step is to power the box from the VX-8DR 3.3 V rail on the accessory connector, although before that, the GPS box needs to be made smaller and the Arduino replaced with an Atmega328 with minimum components. ideally I would like the make the GPS box about 10-15mm high.
The code has now been been put into a stand alone 328.
The GPS conversion code was transferred to an Atmega328 from the junkbox. The Arduino boot code was loaded into it using Optiloader. The code from Optiloader was downloaded to an Arduino Uno which downloads the boot code to the Atmega328. This saves a little bit of physical space and drops the current consumption a little due to the lack of USB chip that was on the Nano.
To upload to the 328, I just use the 3.3V FTDI cable on the USB port of the PC. When downloading from Arduino IDE, you have to hit reset on the 328 just when the IDE starts downloading to the chip as the DTE line is not used for reset. The battery and regulator shown in the schematic will eventually be replaced by 3.3V from the VX-8DR.
The next step might be to implement power up and down of the UVblox GPS from the Arduino to save power. The location reports only need to be sent say, every 5 -10 minutes and the GPS can sleep for a lot of this time. The GPS is quite sensitive and re-acquires quickly. So far the GPS receiver uses about 56mA at 3.3V when locked and the Atmeg328 another 10mA which is a little more than originally budgeted for. The GPS without the LNA uses 33mA when locked. The GPS has various power management settings yet to be explored.