NOTE: I saw a wise crack (seemingly directed at me) on a web site about not being able to put your own call sign in the code for the 3DfixLCD start-up message. You could modify the source code but that assumes that the user can re-compile the code (and has a progarmmer). An easier way would be to simply ask me to program your call into the chip. I don't mind changing the start-up message for people who don't want to see MY call sign. I'll even remove the start-up message if you want.  Geeez!!!





 Download 4.09 Source - The latest released code with 6 digit Maidenhead

Download 3DfixLCD 4.09 Hex 









Download 4.10 Source The BETA code with 8 digit Maidenhead

 <<NOTE: The 8 digit Maidenhead code was removed because of a bug. I'm not going to bother to fix it as the memory on the PIC is tapped out. See my Color Display version if you want 8 digits.>>

Download schematic as a JPG

LCD Display Notes

In response to the article “A Simple GPS Stabilized Oscillator2” by N1JEZ, Mike Sequin I developed 3Dfix: a microcontroller which watched the GPS NMEA data stream and turned on an LED to indicate when the GPS had a 3D position fix3,4. After I told Mike that I had a simple solution to 3D fix determination without a laptop, he was happy but suggested it might be nice to actually be able to display some of the other GPS parameters such as position. I finished the 3Dfix chip and went right to work adding a display to it. This next project became 3DfixLCD.
Interfacing a microcontroller to a parallel-interfaced LCD is straight forward. Inexpensive displays such as those made by OPTREX can be purchased for around $15 or less.  The OPTREX displays can be interfaced using a nibble bus or 4 bits. This helps to limit the number of I/O lines used on the CPU leaving extra lines for other functions such as control buttons.
I used the same microprocessor as I did for the 3Dfix (PIC16F688) because it is inexpensive and doesn’t consume a lot of power. The 16F688 has only 12 I/O lines but by using the nibble interface for the LCD we have enough.
A problem with small microcontrollers is that their RAM is usually limited. Using a bigger processor with lots of RAM would be nice but bigger processors cost more money, consume more power and usually require expensive development tools.
Display Parameter Display NMEA Sentence Comment
Time 02:10:11 UTC GPGGA  
Latitude LAT  42 21.7678N GPGGA  
Longitude LON 073 15.1273W GPGGA  
Altitude ALT      331.0 M GPGGA  
Satellites Tracking Satellites 05 GPGSA  
3Dfix 3D Fix Obtained! GPGSA or not.
Position Dilution of Precision PDOP=1.17 GPGSA Three coordinates
Horizontal Dilution of Precision HDOP=1.40 GPGSA Two coordinates
Vertical Dilution of Precision VDOP=1.05 GPGSA Just Height
Maidenhead FN32ii Computed  

Table 1 LCD information displayed
For 3DfixLCD limited RAM means that we don’t have a lot of storage space to hold strings in memory in their entirety. One approach for this project might have been to read whole NMEA strings into memory and process them during the lull that occurs between the strings. With limited RAM, this approach wasn’t possible.
An approach that works for limited RAM is to develop a structure to the software that supports operating on the characters as they are received, one at a time. We ‘watch’ the characters in the string and only grab what is needed as it goes by. This ‘producer-consumer’ approach is relatively easy to implement and saves RAM.
I chose to use a two line sixteen character display. This is a compromise between small size and a larger display which could have displayed more information. A 2x16 display is just large enough to display latitude on one line and longitude on another; other NMEA data fits easily. 

Figure 1 - 3DfixLCD displaying latitude and longitude from NMEA data.
The hardware design includes two buttons that can be mounted on the project enclosure. The buttons allow you to change the display for each line. Each line can display anything that is extracted by the software from the NMEA strings. You can even display the same item on both lines. I did this to provide flexibility: you can display latitude and longitude or time and position fix type. Table 1 lists the displayable parameters I have programmed so far and their formats.
After the prototype software took shape, I designed a PCB. The first boards had a couple of mistakes but after a couple cuts and jumpers to fix my mistakes, they worked quite well. The PCB is designed to mate with the OPTREX DMC16204 LCD using a 15 pin 2mm pin strip. The overall size is 1.6” x 3.2”. With standoffs added the whole assembly has a thickness of just over 1 inch.
The board requires 7-12 volts DC for the LM78L05 regulator. The LCD requires 5 volts and so the microcontroller runs on 5 volts too. A pair of NPN transistors are used to level shift the TX signal from the GPS. This will work for a 3.3 volt or a 5 volt GPS.
The assembled unit is shown in Figure 1. I can provide a schematic and a programmed chip for anyone who wants to solder their own version on a protoboard. Depending on the interest, I may make PCBs available or even assembled units. Anyone who is interested can contact me at my call at the ARRL's domain.
I hope that 3DfixLCD will further enhance “A Simple GPS Stabilized 10 MHz Oscillator” and provide an alternate to a laptop when used in the field.
1. http://www.jrmiller.demon.co.uk/projects/ministd/frqstd.htm
2. A Simple GPS Stabilized 10 MHz Oscillator by Mike Seguin, N1JEZ; Proceedings of Microwave Update 2005 (ISBN: 0-87259-956-6)
3. 3Dfix; Tommy Sullivan, W1AUV; Proceedings of Microwave Update 2005 (ISBN: 0-87259-956-6).
4. 3Dfix; Tommy Sullivan, W1AUV; Proceedings of the Mid-Atlantic VHF Conference 2005 (ISBN: 0-87259-9523).

3DfixLCD Schematic