Results
Our design turned out to be very robust, yet very simple to understand. The scheme we used to
control the menu selections was very structured, making it easy to add features and transition
between different menu screens. By storing and manipulating a few global state variables, we
were easily able to implement the different features of the device. Timing was not an issue with
this project since none of the features were very time sensitive. The only feature that needed to
be time accurate was the clock, which was controlled by timer1. Thus, the clock was accurate
for our purposes.
Although our database consisted of a small set of cities and interstates, there is a large potential
for usability of our project in a commercial setting. The database is easily expandable, subject
to memory limitations, and the functionality is easily extendable.
We first tested our device in Manual mode and all of the features worked as expected. We did
not notice any bugs or glitches in our implementation. In order to test our device in NMEA mode,
we needed a GPS receiver capable of outputting NMEA sentences through an RS232 connection.
In place of a GPS receiver, we obtained a GPS simulator software that outputted configurable
NMEA sentences through the COM port of a PC. As a result, we were able to connect the PC
to our device and test our features under a variety of circumstances, such as constantly changing
position. Again, our device worked as expected and we are convinced that our device is compatible
with any commercially available GPS receiver capable of producing output to the above specification.
One issue we encountered while developing our device was memory limitations. The memory
available for implementing our device was limited, due to the large amount of information stored
in the database. We made an initial guess as to how many cities we could afford to represent in
our map and it turned out to be very close to the maximum number of cities we could store, given
the set of features we wanted to implement. There was a point at which we ran out of RAM due to
the information we needed to store. To rectify this, we reorganized our memory usage so that we could
utilize available flash memory. Flash memory turned out to be an issue also as we implemented more
and more features. Since the instructions are stored in flash and we had a lot of conditions to handle,
we had to eliminate some of the features we originally intended so our program could fit on the chip.
Click here to see pictures demonstrating our project