![]() |
Forum Index : Microcontroller and PC projects : VK16E GPS module
Page 1 of 2 ![]() ![]() |
|||||
Author | Message | ||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
hi, i'm playing around with a VK16E GPS module and seeing some unexpected results. while the GPS time is returned correctly, as are the number of satellites in view, the location (latitude and longitude) remain static once a fix has been obtained, even if i start walking around with the module. from one end of the driveway to the other (30m) i see no change in latitude or longitude. yet if i power the module down and restart it, then the location information updates. has anyone seen similar behaviour? i am using the $GPGGA sentence to obtain the information. is this the correct sentence to use? or do i need to send 'update' commands to the module to get it to get a fix from a new location? cheers, rob :-) |
||||
palcal![]() Guru ![]() Joined: 12/10/2011 Location: AustraliaPosts: 1993 |
Hi, I have used this module successfully, try using the GPRMC sentence. Paul. "It is better to be ignorant and ask a stupid question than to be plain Stupid and not ask at all" |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
have just tried using the $GPRMC sentence, but it reports exactly the same values for latitude and longitude. cheers, rob :-) |
||||
MicroBlocks![]() Guru ![]() Joined: 12/05/2012 Location: ThailandPosts: 2209 |
Can you post some of those sentences. There might be info in them that can explain it. Microblocks. Build with logic. |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
here is a sample of data as i walk down the driveway: $GPGGA,093928.205,4331.2730,S,17239.1438,E,0,00,,14.2,M,11.3,M,,0000*57
$GPGGA,093929.205,4331.2730,S,17239.1438,E,0,00,,14.2,M,11.3,M,,0000*56 $GPGGA,093930.205,4331.2730,S,17239.1438,E,0,00,,14.2,M,11.3,M,,0000*5E $GPGGA,093931.205,4331.2292,S,17239.1413,E,0,04,,16.3,M,11.3,M,,0000*5C $GPGGA,093932.205,4331.2333,S,17239.1415,E,0,04,,14.9,M,11.3,M,,0000*5B $GPGGA,093933.207,4331.2648,S,17239.1432,E,1,05,1.8,4.4,M,11.3,M,,0000*4F $GPGGA,093934.205,4331.2754,S,17239.1438,E,1,05,1.8,0.8,M,11.3,M,,0000*44 $GPGGA,093935.000,4331.2731,S,17239.1437,E,1,05,1.8,1.5,M,11.3,M,,0000*42 $GPGGA,093936.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4D $GPGGA,093937.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4C $GPGGA,093938.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*43 $GPGGA,093939.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*42 $GPGGA,093940.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4C $GPGGA,093941.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4D $GPGGA,093942.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4E $GPGGA,093943.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4F $GPGGA,093944.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*48 $GPGGA,093945.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*49 $GPGGA,093946.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4A $GPGGA,093947.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4B $GPGGA,093948.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*44 $GPGGA,093949.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*45 $GPGGA,093950.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4D $GPGGA,093951.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4C $GPGGA,093952.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4F $GPGGA,093953.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4E $GPGGA,093954.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*49 $GPGGA,093955.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*48 $GPGGA,093956.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4B $GPGGA,093957.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4A $GPGGA,093958.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*45 $GPGGA,093959.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*44 $GPGGA,094000.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*46 $GPGGA,094001.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*47 $GPGGA,094002.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*44 $GPGGA,094003.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*45 $GPGGA,094004.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*42 $GPGGA,094005.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*43 $GPGGA,094006.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*40 $GPGGA,094007.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*41 $GPGGA,094008.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4E $GPGGA,094009.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*4F $GPGGA,094010.000,4331.2723,S,17239.1435,E,1,05,1.8,1.8,M,11.3,M,,0000*47 $GPGGA,094011.000,4331.2723,S,17239.1435,E,1,06,1.4,1.8,M,11.3,M,,0000*49 $GPGGA,094012.000,4331.2723,S,17239.1435,E,1,06,1.4,1.8,M,11.3,M,,0000*4A |
||||
MicroBlocks![]() Guru ![]() Joined: 12/05/2012 Location: ThailandPosts: 2209 |
It says the data is valid, but the exact longitude/latitude every second is suspicious. Normally even when not moving it will change a tiny bit. The GPRMC sentence is used more for tracking as it also has heading and speed. It is also the sentence i use for my GPS trackers. The number of satellites (4,5,6) should give a good fix. Certainly not what you would expect, could it be an error in the code? Are values parsed and stored or is this a raw dump of the data. Maybe catching all the different sentences can help figuring out what is wrong. Microblocks. Build with logic. |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
note that the 'fix quality' value (7th field) is 1: 1 Fix quality: 0 = invalid
1 = GPS fix (SPS) 2 = DGPS fix 3 = PPS fix 4 = Real Time Kinematic 5 = Float RTK 6 = estimated (dead reckoning) (2.3 feature) 7 = Manual input mode 8 = Simulation mode would you expect this to be 4 (Real Time Kinematic) or 5 when the unit is in motion? i am wondering if the configuration is wrong. bearing in mind the unit is from ebay, so could well be surplus stock being sold off that has been configured for a specific application. |
||||
MicroBlocks![]() Guru ![]() Joined: 12/05/2012 Location: ThailandPosts: 2209 |
I have only ever seen a '1' for the fix quality. Very unfortunate that it does this. Did you try to take it for a larger distance (maybe by car) to see if the values change. Maybe it has a threshold for a minimum distance before it give a new lat/lon. I am not familiar with this GPS module in particular, but i have used lots of different ones and they all have the same standard messages. Any chance of getting some documentation? Microblocks. Build with logic. |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
mystery solved at 3am! this post by palcal: http://www.thebackshed.com/forum/forum_posts.asp?TID=7006 discusses what to do with the BOOT pin. i had been leaving this floating, assuming that since data was being produced by the module it could safely be ignored (after all, what sane manufacturer would not provide an internal pullup/down on a critical pin). however, after reading palcal and jman's discussion, i tried tying it to ground via a 100 ohm resistor (a value i just happened to have to hand). lo and behold, with the BOOT pin grounded the latitude and longitude values spring to life. and when the resistor dislodged, the values froze again. incidentally, pulling BOOT high seems to reset the module quite effectively. now what was that saying, "assumption is the prelude to disaster"? cheers, rob :-) ADDENDUM: grounding the BOOT pin doesn't work, nor does a 3k3 pulldown. something odd is going on, will go back to the 100 ohm resistor in the morning. |
||||
palcal![]() Guru ![]() Joined: 12/10/2011 Location: AustraliaPosts: 1993 |
Hi Robert, A data sheet can be found HERE . DON'T GO BY THE COLOURS for wiring. As the data sheet explains the default for the BOOT is 'floating'. On my module with the antenna side up and the wiring facing away from me the connections are NC, VCC, TX, RX, GND, NC. Only the four wires are connected the other two float. Paul. Edit. sorry that link doesn't work. I have the data sheet and can send if you need it. "It is better to be ignorant and ask a stupid question than to be plain Stupid and not ask at all" |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
Link faulty (Missing the : at the beginning). Try this one link I have a SIRF II module that was set to only change output if it had detected a move greater than 20-30 metres. This was to stop the usualy wandering that GPS outputs do when stationary. I am not sure if I can find the program I used to turn that 'feature' off. Can you take it for a longer walk? Jim VK7JH MMedit |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
that is sounding hopeful, i've only been testing over about 25m so far. i shall try and take it for a longer walk this evening - my neighbours already think i'm insane as i wander along the driveway with a netbook balanced in one hand. i have a program called SiRFDemo that seems to be able to do some configuration, could this be the program you used? i've downloaded the datasheet from this page: http://www.qrp-labs.com/ultimategps.html it seems to be same one linked to above. cheers, rob :-) |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
Thats the one. On page 67 of the users guide is this: Santa delivered my VK16E today so I will give it a try. Jim VK7JH MMedit |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
Page 71 of the users guide: It did the job for me. To use SRIFdemo, click on Action/Synchronise protocol and buad rate. This should put it in SIRF mode. Remember to switch it back to NMEA before exiting. Jim VK7JH MMedit |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
Caution!!!! I don't seem to be able to reset the baud rate to 9600 when going back to NMEA mode. It is currently set at 57600. Jim Edit: All is not lost. Under Action/Set main serial port, change it to 9600. You should be able to leave the SIRF protocol at 57600 and NMEA chages to 9600 but that did not work for me. Having both the same seems to be a safe way to go. ![]() VK7JH MMedit |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
brilliant TassyJim, the last two posts did the trick! now i just need to figure out if there is an NMEA command string to change the setting without needing to switch over to SiRF mode and back - i'll then need to program up a micromite to send the command as needed. btw, i'm mulling over doing an SC construction article on differential GPS. essentially, while the GPS location of a single receiver wanders around, the difference between two GPS receivers close by provides a far greater accuracy. i want to see if i can get down to sub-centimetre resolution. cheers, rob :-) |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
As far as I know, you have to be in SIRF mode to do any configuration. Differential GPS has been on my to-do list for some time. I want to put one on the tractor/mower with GPS and barometer (for elevation) and go for a drive around the paddocks. A second GPS & barometer will be at a fixed location. Merge the two files and do some 3D plotting. I did plot the local motocross track a long time ago but that was with one GPS only. It did give us a nice map though. For the record, I have left my BOOT pin floating. Jim VK7JH MMedit |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
i've found that pulling the BOOT pin high briefly causes a full fatory reset. i shall move back to leaving it floating too. the following link explains it all: http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=140673 seems like in 2011 someone else faced exactly the same problem. i've also been looking through an output log, along with the SiRF protocol datasheet, and with a bit of luck should be able to whip up a 'magic incantation' to change the configuration. note that in the above link there is mention of the static navigation mode switching back if the onboard battery goes flat while powered off. cheers, rob :-) |
||||
TassyJim![]() Guru ![]() Joined: 07/08/2011 Location: AustraliaPosts: 6283 |
That's a very useful link Rob. Jim VK7JH MMedit |
||||
robert.rozee Guru ![]() Joined: 31/12/2012 Location: New ZealandPosts: 2442 |
for anyone interested, here is a pascal code snippet to switch static navigation on or off on a SiRF GPS receiver: const ds1:array [1..26] of char='$PSRF100,0,9600,8,1,0*0C'#13#10;
ds2:array [1..10] of byte= // disable static navigation ($A0,$A2, // header $00,$02, // payload length (2 bytes) $8F,$00, // command + SN flag $00,$8F, // payload checksum $B0,$B3); // footer ds3:array [1..10] of byte= // enable static navigation ($A0,$A2, // header $00,$02, // payload length (2 bytes) $8F,$01, // command + SN flag $00,$90, // payload checksum $B0,$B3); // footer ds4:array [1..32] of byte= // return to NMEA mode ($A0,$A2, // header $00,$18, // payload length (24 bytes) $81,$02, // command + mode $01,$01, // GGA (1) (interval + CS flag) $00,$01, // GLL (interval + CS flag) $01,$01, // GSA (1) (interval + CS flag) $05,$01, // GSV (5) (interval + CS flag) $01,$01, // RMC (1) (interval + CS flag) $01,$01, // VTG (interval + CS flag) $00,$01, // MSS (interval + CS flag) $00,$01, // <unused> $00,$01, // ZDA (interval + CS flag) $00,$01, // <unused> $25,$80, // baud rate (9600) $01,$3A, // payload checksum (0x013A) $B0,$B3); // footer var put:DWORD; i,c:integer; begin WriteFile(ComFile,ds1,length(ds1),put,nil); // switch to SiRF mode sleep(200); Application.ProcessMessages; if CheckBox1.Checked then WriteFile(ComFile,ds3,length(ds3),put,nil) else WriteFile(ComFile,ds2,length(ds2),put,nil); sleep(200); Application.ProcessMessages; c:=0; // needed if we change any of the sentence settings for i:=5 to 28 do inc(c,ds4); // recalculate checksum on ds3 ds4[29]:=c div $100; // insert high byte ds4[30]:=c mod $100; // insert low byte WriteFile(ComFile,ds4,length(ds4),put,nil); // return to NMEA mode sleep(200) end; cheers, rob :-) |
||||
Page 1 of 2 ![]() ![]() |
![]() |
![]() |
The Back Shed's forum code is written, and hosted, in Australia. | © JAQ Software 2025 |