2004 Edubot Serial String Help (TTL in)

Hi everyone,
I’ve been fooling around with this code for awhile and I’m at a total loss as to what I can try next. Here’s what I aim to do:
-I have an RS232 GPS device that is tested and known good.
-I have a TTL to RS232/RS232 to TTL conversion board that is tested and known good
-I want to read, and ultimately parse, the data string (but don’t know about C string parsing). For now, I would be happy with printing it out from the RS232 (feed in TTL and out to PC).

I tried Kevin’s serial code, but it never actually seemed to read the data. A few times, I got it to “acknowledge” that it captured something (just a simple print if this portion is reached), but it never printed it properly. It also only did it once per boot of the board. How does the EDU know when a string is coming in? I know I can use interrupts, but that seems like an awful lot of trouble to set up a reader for a GPS device.

Does anyone have experience with this? Sample code, perhaps?
I’d post what I have, but its mostly the default serial code, with the parameters changed to 4800 baud.

Thanks,
Josh

Anyone with experience with circular read buffers? I’m completely at a loss here.

The TTL runs at 115,200bps by default and most GPS devices run at 9600bps. You need to intialize the serial port at 9600 or convert 9600 to 115,200.

I don’t know what to change in the code to properly initialize the port for 9600.

If its the BAUD then you will need to open serial_ports.c, and find the Init_Serial_Port_Two;

The current code should look like this:


void Init_Serial_Port_Two(void)
{
	// Start by initializing the serial port with code 
	// common to receive and transmit functions
	**SPBRG2 = BAUD_115200**;	// baud rate generator register [251]
							//
	**TXSTA2bits.BRGH = 1**;	// high baud rate select bit (asynchronous mode only) [248]
							//  0: low speed
							//  1: high speed
							//


You need to change the TXSTA2bits.BRGH to 0, and SPBRG2 = BAUD_9600.

When your finished the code should look like this:


void Init_Serial_Port_Two(void)
{
	// Start by initializing the serial port with code 
	// common to receive and transmit functions
	**SPBRG2 = BAUD_9600**;	// baud rate generator register [251]
							//
	**TXSTA2bits.BRGH = 0**;	// high baud rate select bit (asynchronous mode only) [248]
							//  0: low speed
							//  1: high speed
							//


I haven’t tested this code, but I think its correct.

Yes, you’re right. 4800 baud is another common baud rate used by GPS receivers.

-Kevin

For fun, a few years ago I wrote some EDU-RC code to parse the GPS GGA message and write the current GPS time, which is very accurate, to a serial LCD display. To get you started, have a look at the Camera_Handler() and Camera_State_Machine() functions in camera.c for one way to parse serial data.

-Kevin

Thanks guys, I think I missed the high speed option when I changed my baud rate. I’ll try that tonight and see if it does anything different, and then take a look at the camera parsing code.