|
|
View previous topic :: View next topic |
Author |
Message |
hhuurrkkaann
Joined: 08 Jan 2013 Posts: 14
|
How to get ASCII character from serial line... |
Posted: Mon Apr 18, 2016 5:27 am |
|
|
Hi, I start to learn ccs c nowadays and I have a question about getting characters from serial line (rs 232)...
As an example"
this is the sentence which sending with serial line:
$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,8,1.03,61.7,M,55.2,M,,*76
The numbers in the sentence are always changing of course...
baud rate is:9600 bps
I want to get the numbers; example "092750.000" or "00630.3372" and display them on LCD screen.
Could you show me a way...
thanks |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9246 Location: Greensville,Ontario
|
|
Posted: Mon Apr 18, 2016 5:57 am |
|
|
Easy way is to use the 'search' feature and scan the 'code library' for 'GPS code' or similar wording. there is complete programs in there....
Jay |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Mon Apr 18, 2016 7:14 am |
|
|
Hi,
It's a two-part problem - (1) receiving the data reliably, and (2) parcing the data to extract the individual data values contained in the NMEA message.
For the first part, I recommend you look at the CCS example program 'ex_sisr.c'. This is an example of an interrupt driven circular receive buffering scheme, which will be essential for reliable message reception. Get this done first, and make it 100% before moving on to the 2nd part. _________________ John
If it's worth doing, it's worth doing in real hardware! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19552
|
|
Posted: Mon Apr 18, 2016 7:43 am |
|
|
Lets go a step further.
Temtronic is right that there is code out there to extract the values, but this is generally designed to actually 'read' the numbers and you don't really need this.
Ezflyr is also right that buffering is vital.
However you then need to think for a moment. You don't actually have to extract the numbers. Look at how you 'know' that the first number is 92750.000?.
What you do if look at a 'line' of data. You 'know' that it is a line of data, since it begins with $GPGGA. Then you go to the first ',' and read the characters that follow, and this is the first value you want to display. You know the number has ended, when you see the character ',' again. Two more commas along, and then you see the next number you want.
So keep it simple. Use the serial buffer code as Ezflyr suggests.
Then have your code look for the '$' character. When it sees this you 'know' you are at the start of a line. Then just count commas till you get to the bit you want, and when you reach the required number of commas, start sending the received characters to your display. Stop when you see a comma again.
The number of commas you have already seen tells you which particular value you are at, and this can also then tell you 'where' you want the number to be put on your display.
You only need to display the characters from one comma to the next. If you want a little more elegance you can suppress the leading zeros. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|