Uncategorized

Neo 6M / 8M set rates

Asked 
Active today
Viewed 49 times
-1

Hi i’m tryng to change the update rate of my gps tracker(neo 6m ublok) i know the byte that i need to send are 0xB5,0x62,0x06,0x08,0x06,0x00,0xC8,0x00,0x01,0x00,0x01,0x00,0xDE,0x6A

i’ve tried echo -e "\xB5\x62\x06\x08\x06\x00\xC8\x00\x01\x00\x01\x00\xDE\x6A" > /dev/ttyAMA0

and with the service stopped i also tryed with a program in c

#include <stdio.h>
        #include <fcntl.h>   /* File Control Definitions           */
        #include <termios.h> /* POSIX Terminal Control Definitions */
        #include <unistd.h>  /* UNIX Standard Definitions          */ 
        #include <errno.h>   /* ERROR Number Definitions           */

        void main(void)
        {
                int fd;/*File Descriptor*/

                printf("\n +----------------------------------+");
                printf("\n |        Serial Port Write         |");
                printf("\n +----------------------------------+");

                /*------------------------------- Opening the Serial Port -------------------------------*/

                /* Change /dev/ttyUSB0 to the one corresponding to your system */

                fd = open("/dev/ttyAMA0",O_RDWR | O_NOCTTY | O_NDELAY); /* ttyUSB0 is the FT232 based USB2SERIAL Converter   */
                                                                        /* O_RDWR Read/Write access to serial port           */
                                                                        /* O_NOCTTY - No terminal will control the process   */
                                                                        /* O_NDELAY -Non Blocking Mode,Does not care about-  */
                                                                        /* -the status of DCD line,Open() returns immediatly */                                        

                if(fd == -1)                                            /* Error Checking */
                   printf("\n  Error! in Opening ttyUSB0  ");
                else
                   printf("\n  ttyUSB0 Opened Successfully ");


                /*---------- Setting the Attributes of the serial port using termios structure --------- */

                struct termios SerialPortSettings;      /* Create the structure                          */

                tcgetattr(fd, &SerialPortSettings);     /* Get the current attributes of the Serial port */

                cfsetispeed(&SerialPortSettings,B9600); /* Set Read  Speed as 9600                       */
                cfsetospeed(&SerialPortSettings,B9600); /* Set Write Speed as 9600                       */

                SerialPortSettings.c_cflag &= ~PARENB;   /* Disables the Parity Enable bit(PARENB),So No Parity   */
                SerialPortSettings.c_cflag &= ~CSTOPB;   /* CSTOPB = 2 Stop bits,here it is cleared so 1 Stop bit */
                SerialPortSettings.c_cflag &= ~CSIZE;    /* Clears the mask for setting the data size             */
                SerialPortSettings.c_cflag |=  CS8;      /* Set the data bits = 8                                 */

                SerialPortSettings.c_cflag &= ~CRTSCTS;       /* No Hardware flow Control                         */
                SerialPortSettings.c_cflag |= CREAD | CLOCAL; /* Enable receiver,Ignore Modem Control lines       */ 


                SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY);          /* Disable XON/XOFF flow control both i/p and o/p */
                SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);  /* Non Cannonical mode                            */

                SerialPortSettings.c_oflag &= ~OPOST;/*No Output Processing*/

                if((tcsetattr(fd,TCSANOW,&SerialPortSettings)) != 0) /* Set the attributes to the termios structure*/
                    printf("\n  ERROR ! in Setting attributes");
                else
                    printf("\n  BaudRate = 9600 \n  StopBits = 1 \n  Parity   = none");

                /*------------------------------- Write data to serial port -----------------------------*/

                char write_buffer[] = "A";      /* Buffer containing characters to write into port           */
                unsigned char packet[] = { 0xB5,  0x62, 

        0x06, // 

        0x08, // 

        0x06, // length

        0x00, // 

        0x64, // measRate, hex 64 = dec 100 ms

        0x00, // 

        0x01, // navRate, always =1

        0x00, // 

        0x01, // timeRef, stick to GPS time (=1)

        0x00, // 

        0x7A, // CK_A

        0x12, // CK_B

    };
                int  bytes_written  = 0;        /* Value for storing the number of bytes written to the port */ 
                //for(int i=0;i<14;i=i+1){
                //      printf(packet[i]);
//}
                bytes_written = write(fd,packet,sizeof(packet));/* use write() to send data to port                                            */
                                                                             /* "fd"                   - file descriptor pointing to the opened serial port */
                                                                             /* "write_buffer"         - address of the buffer containing data              */
                                                                             /* "sizeof(write_buffer)" - No of bytes to write                               */
                char buf [100];
int n = read (fd, buf, sizeof buf);
                printf(buf);
                printf("\n  %s written to ttyUSB0",write_buffer);
                printf("\n  %d Bytes written to ttyUSB0", bytes_written);
                printf("\n +----------------------------------+\n\n");

                close(fd);/* Close the Serial port */

        }

and with python

import serial
#from serial import Serial

import time

import string

import pynmea2

port="/dev/ttyAMA0"
ser=serial.Serial(port, baudrate=9600 ,   parity=serial.PARITY_NONE,

  stopbits=serial.STOPBITS_ONE,

  bytesize=serial.EIGHTBITS,)

#serdata= bytearray([0xB5,0x62,0x06,0x08,0x06,0x00,0xC8,0x00,0x01,0x00,0x01,0x00,0xDE,0x6A,0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x2B]) #0x06"0x00"0xC8"0x00"0x01"0x00"0x01"0x00"0xDE"0x6A"

#serdata= bytearray([0xB5,0x62,0x06,0x08,0x06,0x00,0xC8,0x00,0x01,0x00,0x01,0x00,0xDE,0x6A])
#print(serdata)
ser.write(b"$PUBX,40,GLL,0,0,0,0*5D\r\n")
#ser.write(bytes([181,98,6,8,6,0,100,0,1,0,1,0,122,18])) # 5hz
#ser.write(b'$PUBX,40,GLL,1,0,0,0,0,0*5D')
#ser.write(serdata)
#ser.flush()
#ser.write(bytearray([181, 98, 6, 1, 8, 0, 240, 1, 0, 0, 0, 0, 0, 1, 1, 43])) #GxGLL off
#serdatadi=bytearray([0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x39])
#serdatadi2=bytearray([0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x40])
#print(serdatadi2)
#ser.write(b"0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x39")
#ser.write(serdatadi2)
#ser.write(serdatadi3)
#ser.write(b"0xB5,0x62,0x06,0x01,0x08,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x24")
#ser.write(b'\xb5b\x06\x08\x06\x00\x1e\x00\x01\x00\x00\x003l')
while True:

        #port="/dev/ttyAMA0"

        #ser=serial.Serial(port, baudrate=9600, timeout=0.5)

        dataout = pynmea2.NMEAStreamReader()
        newdata=ser.readline()
        print(newdata)

        #print(newdata[0:6] == "$GPRMC")
        if (newdata[0:6] == b"$GPRMC"):
                print("vivo")
                newmsg=pynmea2.parse(newdata.decode("utf-8"))
                print(newmsg)
                lat=newmsg.latitude

                lng=newmsg.longitude

                gps = "Latitude=" + str(lat) + "and Longitude=" + str(lng)

                print(gps)

but nothig change the navigation update rate of the device

all of the byte code came from the manual of the device
https://www.u-blox.com/sites/default/files/products/documents/u-blox6_ReceiverDescrProtSpec_%28GPS.G6-SW-10018%29_Public.pdf

and this

https://medium.com/@cglabs/neo-6m-gps-howto-boost-data-receiving-speed-neo-6-neo-7-neo-8-487275eff1c6

and this

https://forum.arduino.cc/index.php?topic=470763.0 wiring gps wire

share  edit  follow  close  flag
 New contributor
  • Hi @awaska, Welcome and nice to meet you. Ah, let me see. (1) Can I assume that you have setup your Neo6 and that cgps and xgps run OK? If yes, then your serial setup should be default 9600, 8N1, (2) Can I assume that you know you are using ttySerial0 or ttyUSB by setting the gps config file? (2) Suppose you are using ttyUSB0, and using python to send the bytes to change nav rate for 1Hz to 5Hz. (3) One troubleshooting trcik you might use is to do the serial loopback test, with (a) Neo6 removed from serial port. (b) short TxD to RxD and see if Rx loopback Tx. / to continue, … – tlfong01 yesterday
  • Actually you can use any terminal emulator, say Win10 RealTerm, Rpi CuteCom, or miniCom etc to send the update to 5Hz bytes to Neo6. Please let me know if you wish to know more about python serial loopback program, or terminal emulator to do loop back test and send bytes to Neo6. Cheers. – tlfong01 yesterday
  • hi thanks for the responi connected my gps trough uart, i can read the message of the gps with no problem using cat or the python program, i’ve tryed the serial loopback and it works i’ve shorted the 2 pin and if i do echo "test" > /dev/serial0 and cat -v < /dev/serial0 i can see test so the serial is working, i’ve tryed trougth the u-center with network serial for controlling the gps but still the gps won’t change i’ve retryed with bash ans the hex directly given from the u-center but still the update rate won’t change, is wrong how i wrote the code in python for writing the hex? – awaska yesterday
  • What you send to/dev/ttyAMA0 with echo is not a byte. – Ingo yesterday
  • when i tryed to send byte the serial gose crazy and start to repeat the message and after some time i can’t write anything and when i read the serial is just brakeline, i have the jumper, and after reboot when i send echo -e -n "\xB5\x62\x06\x01\x08\x00\xF0\x01\x01\x00\x00\x01\x01\x00\x03\x35" > /dev/serial0 echo -e -n "\xB5\x62" > /dev/serial0 i read nothing from the serial cat -v < /dev/serial0 but if i send echo "test" > /dev/serial0 strange stuff append, the word test is repited multiple time with incrising space – awaska yesterday
  • this is the resul of cat -v < /dev/serial0 test test test test test test test – awaska yesterday
  • Just to confirm. Did you mean that you also used u-center config but still no luck? Please see my u-center log below. And for the UBX message, can you try (1) End the frequency update string with check sum, and (2) End the UBX message with CR, LF? – tlfong01 7 hours ago
  • @awaska, Part A of my answer shows how to use the u-center to set my Neo-8M measurement rate to 0.25Hz, and the measurements now repeat every four seconds. You might like to verify with your Neo-6M. Good luck. Cheers. – tlfong01 3 mins ago   Edit
0

Answer


Part A – Using u-center to do the frequency setting

u-center screen below shows if measurement frequency is set to 0.25Hz, then the test measurements repeats every 4 seconds.

set rates


Part B – Using UBX message

(1) Try end measurement/navigation frequency command with the two check sum bytes,

(2) Try end UBX message with CR, LF.

Note – it is much more newbie friendly to use GUI Rpi terminal emulator cuteCom than CLI bash echo and cat.


References

(1) u-blox 6 Receiver Description Including Protocol Specification – ublox

(2) uBlox Neo 6M GPS NMEA message parsing using Python (with checksum calculation) – tomazas/nmea_ublox.py 2015

(3) How to update system Date & Time from GPS Neo 6M in python (with checksum calculation) – 2016dec15


Appendices

Appendix A – Set rates

set rates

share  edit  delete  flag
.END

Categories: Uncategorized

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: