Forum Index
HomeZBasic Home   Forum RulesForum Rules   Forum FAQForum FAQ   MemberlistMemberlist   UsergroupsUsergroups   RSS FeedRSS Feed
Site SearchSite Search   LinksLinks   DownloadDownload   Digests and SubscriptionsDigests and Subscriptions
ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in   RegisterRegister
ETEK GPS Module

 
Post new topic   Reply to topic    Forum Index -> ZX-24
Author Message
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 17:27 PM    Post subject: ETEK GPS Module Reply with quote

Hi Guys

Im using a ETEK EB-85A gps module, and just need a bit of advice on communicating with it. I have data coming into the zx-24n fine but I need to send some config packets to change settings.

This is the manual for packet forming http://www.sparkfun.com/datasheets/GPS/MTK%20Packet_User%20Manual.pdf

Im having problems sending them, If I try to send the following for example, I don't get the response confirmation package back, so something must be wrong.

I thought it would just be something like this, where the command to send is...
$PMTK000*32<CR><LF>

Code:
Call PutQueueStr(com2RXQueue, "$PMTK000*32")


Any ideas whats wrong with that, does PutQueueStr include <CR> and <LF> at the end by default?

Thanks

Ben
Back to top
dkinzer
Site Admin


Joined: 03 Sep 2005
Posts: 2499
Location: Portland, OR

Posted: 05 August 2008, 17:59 PM    Post subject: Re: ETEK GPS Module Reply with quote

sturgessb wrote:
does PutQueueStr include CR and LF at the end by default?
It does not. That would limit the usefulness of the routine because you don't necessarily want an EOL on every string you send to a queue. Note, also, that the documentation for PutQueueStr() doesn't mention anything about extra characters appended so the safer assumption would be that it does not do so.

The simplest way to append a CR and LF to a string is to use the "string append" operator with a constant, e.g.
Code:
Const CRLF as String = Chr(&H0d) & Chr(&H0a)
...
Call PutQueueStr(com2RXQueue, "$PMTK000*32" & CRLF)

Since the ZBasic compiler performs constant folding, there is no run-time penalty for using code like this. The compiler notices that the two string components are constant and replaces the expression with the equivalent single string.

An alternate method that you may wish to use is:
Code:
Const CRLF as String = Chr(&H0d) & Chr(&H0a)
...
Call PutQueueStr(com2RXQueue, "$PMTK000*32")
Call PutQueueStr(com2RXQueue, CRLF)
Note that this results in slightly larger and somewhat slower code.
Back to top
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 18:28 PM    Post subject: Reply with quote

Thanks Don, although there must still be something wrong. I send it with the CRLF at the end and I get the same results as before, nothing back and the GPS stops outputting any data.

Has anyone in the forum used this GPS module?

Thanks

Ben
Back to top
dkinzer
Site Admin


Joined: 03 Sep 2005
Posts: 2499
Location: Portland, OR

Posted: 05 August 2008, 18:37 PM    Post subject: Reply with quote

I just noticed that your example code refers to com2RXQueue. I would usually use a name like that for data received from an external device. In contrast, I would use com2TXQueue for a transmit queue, ie. data being sent to an external device.
Back to top
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 19:00 PM    Post subject: Reply with quote

good catch, problem may be as simple as that silly mistake!
Back to top
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 19:27 PM    Post subject: Reply with quote

is there any way to calculate the checksum value of a string easily?
Back to top
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 21:06 PM    Post subject: Reply with quote

no worries, found the answer here

http://www.zbasic.net/forum/about531.html
Back to top
dkinzer
Site Admin


Joined: 03 Sep 2005
Posts: 2499
Location: Portland, OR

Posted: 05 August 2008, 21:31 PM    Post subject: Reply with quote

sturgessb wrote:
no worries, found the answer here

I would recommend a slightly modified rendition of that routine as given below. The changes are:
  • Using the optional second parameter of Asc() to retrieve the desired character from the string. This avoids calling Mid() to produce a single character string multiple times.
  • A local variable is introduced to hold the trimmed string. As originally written, if the passed string had leading whitespace the wrong characters would be used to compute the checksum. This step could be avoided if the caller passed a string that was already trimmed.

Code:
Function NMEA_Checksum(sentence as String) As String
  Dim i as Integer
  Dim sum as Integer = 0
 
  Dim str as String
  str = Trim(sentence)
  For i = 2 To Len(str) - 2
    sum = sum Xor CInt(Asc(str, i))
  Next i
 
  NMEA_Checksum = Mid(cstrHex(sum), 3, 2)
End Function
Back to top
sturgessb



Joined: 25 Apr 2008
Posts: 246
Location: Norwich, UK

Posted: 05 August 2008, 23:05 PM    Post subject: Reply with quote

great, thanks Don!
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Forum Index -> ZX-24 Time synchro. with the server - Timezone/DST with your computer
Page 1 of 1

 


All content Copyright © 2005-2012 Elba Corp. All Rights Reserved.
Opinions expressed in posts are those of the author and not necessarily those of Elba Corp.
Powered by phpBB © 2001, 2005 phpBB Group