This is a project that I started back late 2003 when I just starting to learn PIC programming. I wanted to building something that actually did somthing useful. This project is based on a PIC16F84. I actually came up with this idea and then after doing some searching I found that a few people had the same idea. But, I wanted to build my own that I could call mine, developed by me. The whole idea is, I have several GPS units with no display and I wanted an easy way to see my position. I have the option with the HamHUD II to see this, but it uses up precious display space that I rather use to display some APRS related information instead. So, I need a way to take the NMEA data comming out and display it in a simple format that can be read easily while driving down the road.
The circuit it'self is pretty simple, take in the data on one pin, parse it, format it and then display it to a 4x20 LCD module (Hitachi Chipset). That is the basic idea, but I might add in somthing like a mechanical encoder that would allow for changing options or changing settings in the display unit. This might be as simple as a SPDT (Singe Pole Double Throw) switch if the options are as simple as two settings.
Here is the schematic. I used a 4 Bit configuration for the LCD to PIC wiring. This all that would be required for this application. Plus, the 16F84 does not have a lot of port pins, so I have to use them wisely. You can see the GPS data is comming in on PORT A PIN 1. The LCD data goes out on PORT B PINS 0-3. The LCD's Register Select (Rs) is on PORT A PIN 2 and the LCD's Enable (E) is on PORT A PIN 3. In the original design, I had included a MAX232 level converter to do the TTL to Serial conversion before it came into the PIC. I found a serial routine that did software inversion and allowed me to eliminate the MAX232, so one less part. This is really nice because basically the entire circuit could be layed out on a board the same size as the 4x20 LCD.
Here is a breadboard version of the project. This just doesn't have the entire code loaded into it yet (I need to finnish writing it). I used a negative yellow LCD from Crystalfontz.
I got the LCD working with a simple routine in C. I read in a raw NMEA data string and displayed the first 20 characters. Now to write the rest.
Here is a closeup of the PIC and LCD lines breadboarded.
Here I have made some progress reading in the NMEA data and formatting it to a point where its useful. Look close and you can see the data on the GPS III+ matches what is on the LCD. I found that the serial routine was good enough that the UTC time only lagged by about a second.
Close up of the LCD with the backlight off.
And a close up of the LCD with the backlight on.
I still have some tweaking to do on the firmware such as "eating" the commas and cleaning up the parsing and display functions but I have made a long leap from what point I was at when I quit working on this project and what its at now. Keep checking back for updates and once the code is decent I will realease the HEX file for download.