Can't modify configuration on zed-f9p with u-center 20.01

Hi,

I want to use two module zed-f9p (I bought 2 boards from sparkfun with antenna, this one: https://www.sparkfun.com/products/16481) for base-rover operation.

I follow the section 3.5 from the zed-f9p manual (“Configuration of the base and rover for RTK operation” page 20 and more) and have some troubles to make modification in the “message view window”.

I’m still at the “base” configuration state.

I added all the messages required from UBX-CFG-VALSET and click “send” button at the bottom of the window, I have set values in all layers (Flash, BBR, RAM to be sure modification is effective). After that I go to UBX-CFG-CFG and select all Device(bbr, flash,i2c-eeprom,spi-flash) and all Save option(PRT, MSG, INF, NAV etc…), and finally select “Save current configuration” and click “send” button. After that I disconnect and reconnect the zed-f9p from my computer and reopen “u-center 20.01”, reopen UBX-CFG-VALSET and check all the messages requiered by selecting them and click “Get current value” just for checking if the modification was effective…But they are not (exemple: CFG-MESSAGE-OUT-UBX-NAV_SVIN_UART2 get “0” value instead of “1”) .

I also checked the “Packet console” to see if I have the same output as it is shown in the manual but it’s quiet different… So I’m thinking something isn’t working properly.

I just tried once to go through all the chapter 3 of the manual and just try. I connected the TX2 of the base to the RX2 of the rover, RX2 of the base to the TX2 of the rover, and GND of the base to GND of the rover by wire. Finally I connected a arduino mega on the Rover through I2C and then show what is the GPS position seen on the rover. I saw that position isn’t fix at all and vary from many centimeter (at least 50centimeters altitude in 2 minutes mesurement) and also can’t see the RTK led blinking (mean the rover don’t recieve RTCM corrections).

So I have several interrogations:

  1. How to make modifications persistent to the zed-f9p with the u-center 20.01?

  2. How to save the configuration on the PC to reopen it fastly when I need to make a modification on the zed-f9p?

  3. Is that correct to connect the uart2 from the base directly to the rover by wire for sending them RTCM corrections data? at the end I will use XBEE wireless modules directly connected to the tx2/rx2 of the base and same for the rover…

Thanks,

Simon

I need help please…

I’m able to run the exemple code for making the base runing, and “pipe” the incoming to Serial3 with baudrate at 38400, the things seem to work as I see the console show me some data. The Serial3 of the base arduino mega is connected to the TX/MISO and RX/MOSI of the rover ZED-F9P by wire, but the “RTK” led of the rover isn’t blinking. I watch the position recieved by the rover with another arduino and position varie a lot (+5meters in altitudes in less than 20minutes…). I don’t understand how to make a base/rover working great… there is a big lack of clear explanation… the hookup guide is more a advertising (“look, we have qwiic i2c and we love it! look this beautiful red color, you can do great things…”) but not technical informations at all for new guy in gps rtk technology…

The code of the base and rover:

/*
  Send UBX binary commands to enable RTCM sentences on Ublox ZED-F9P module
  By: Nathan Seidle
  SparkFun Electronics
  Date: January 9th, 2019
  License: MIT. See license file for more information but you can
  basically do whatever you want with this code.

  This example does all steps to configure and enable a ZED-F9P as a base station:
    Begin Survey-In
    Once we've achieved 2m accuracy and 300s have passed, survey is complete
    Enable six RTCM messages
    Begin outputting RTCM bytes

  Feel like supporting open source hardware?
  Buy a board from SparkFun!
  ZED-F9P RTK2: https://www.sparkfun.com/products/15136
  NEO-M8P RTK: https://www.sparkfun.com/products/15005
  SAM-M8Q: https://www.sparkfun.com/products/15106

  Hardware Connections:
  Plug a Qwiic cable into the GPS and a BlackBoard
  Plug a SerLCD onto the Qwiic bus
  If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
  Watch the output on the LCD or open the serial monitor at 115200 baud to see the output
*/

#define STAT_LED 13

#include <Wire.h> //Needed for I2C to GPS

#include "SparkFun_Ublox_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_Ublox_GPS
SFE_UBLOX_GPS myGPS;


void setup()
{
  Serial.begin(115200);
  Serial3.begin(38400);
  while (!Serial)
    ; //Wait for user to open terminal
  Serial.println("Ublox GPS I2C Test");

  Wire.begin();

  pinMode(STAT_LED, OUTPUT);
  digitalWrite(STAT_LED, LOW);

  myGPS.begin(Wire);
  if (myGPS.isConnected() == false)
  {
    Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing."));
    while (1)
      ;
  }

  //Force le redémarrage du positionnement de la base
  myGPS.disableSurveyMode();
  myGPS.saveConfiguration();
  delay(2000);
  myGPS.hardReset();
  delay(5000);

  Wire.setClock(400000); //Increase I2C clock speed to 400kHz

  //myGPS.setI2COutput(COM_TYPE_RTCM3); //Set the I2C port to output RTCM3 sentences (turn off NMEA noise)
  myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX sentences (turn off NMEA noise)

  myGPS.saveConfiguration();                         //Save the current settings to flash and BBR


  boolean response = true;
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1005, COM_PORT_I2C, 1); //Enable message 1005 to output through I2C port, message every second
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1074, COM_PORT_I2C, 1);
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1084, COM_PORT_I2C, 1);
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1094, COM_PORT_I2C, 1);
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1124, COM_PORT_I2C, 1);
  response &= myGPS.enableRTCMmessage(UBX_RTCM_1230, COM_PORT_I2C, 10); //Enable message every 10 seconds
  if (response == true)
  {
    Serial.println(F("RTCM messages enabled"));
  }
  else
  {
    Serial.println(F("RTCM failed to enable. Are you sure you have an ZED-F9P? Freezing."));
    while (1)
      ; //Freeze
  }

  //Check if Survey is in Progress before initiating one
  response = myGPS.getSurveyStatus(2000); //Query module for SVIN status with 2000ms timeout (request can take a long time)
  if (response == false)
  {
    Serial.println(F("Failed to get Survey In status. Freezing."));
    while (1)
      ; //Freeze
  }

  if (myGPS.svin.active == true)
  {
    Serial.print(F("Survey already in progress."));
  }
  else
  {
    //Start survey
    response = myGPS.enableSurveyMode(60, 5.000); //Enable Survey in, 60 seconds, 5.0m
    if (response == false)
    {
      Serial.println(F("Survey start failed"));
      while (1);
    }
    Serial.println(F("Survey started. This will run until 60s has passed and less than 5m accuracy is achieved."));
  }

  while (Serial.available())
    Serial.read(); //Clear buffer

  //Begin waiting for survey to complete
  while (myGPS.svin.valid == false)
  {
    if (Serial.available())
    {
      byte incoming = Serial.read();
      if (incoming == 'x')
      {
        //Stop survey mode
        response = myGPS.disableSurveyMode(); //Disable survey
        Serial.println(F("Survey stopped"));
        break;
      }
    }

    response = myGPS.getSurveyStatus(2000); //Query module for SVIN status with 2000ms timeout (req can take a long time)
    if (response == true)
    {
      Serial.print(F("Press x to end survey - "));
      Serial.print(F("Time elapsed: "));
      Serial.print((String)myGPS.svin.observationTime);

      Serial.print(F(" Accuracy: "));
      Serial.print((String)myGPS.svin.meanAccuracy);
      Serial.println();
    }
    else
    {
      Serial.println(F("SVIN request failed"));
    }

    delay(1000);
  }
  Serial.println(F("Survey valid!"));

  Serial.println(F("Base survey complete! RTCM now broadcasting."));

  myGPS.setI2COutput(COM_TYPE_UBX | COM_TYPE_RTCM3); //Set the I2C port to output UBX and RTCM sentences (not really an option, turns on NMEA as well)

}

void loop()
{
  myGPS.checkUblox(); //See if new data is available. Process bytes as they come in.

  //Do anything you want. Call checkUblox() every second. ZED-F9P has TX buffer of 4k bytes.

  delay(250); //Don't pound too hard on the I2C bus
}

//This function gets called from the SparkFun Ublox Arduino Library.
//As each RTCM byte comes in you can specify what to do with it
//Useful for passing the RTCM correction data to a radio, Ntrip broadcaster, etc.
void SFE_UBLOX_GPS::processRTCM(uint8_t incoming)
{
  //Let's just pretty-print the HEX values for now
  if (myGPS.rtcmFrameCounter % 16 == 0)
    Serial.println();
  Serial.print(" ");
  if (incoming < 0x10)
    Serial.print("0");
  Serial.print(incoming, HEX);
  Serial3.print(incoming, HEX);
}
/*
  Reading lat and long via UBX binary commands - no more NMEA parsing!
  By: Nathan Seidle
  SparkFun Electronics
  Date: January 3rd, 2019
  License: MIT. See license file for more information but you can
  basically do whatever you want with this code.

  This example shows how to query a Ublox module for its lat/long/altitude. We also
  turn off the NMEA output on the I2C port. This decreases the amount of I2C traffic 
  dramatically.

  Note: Long/lat are large numbers because they are * 10^7. To convert lat/long
  to something google maps understands simply divide the numbers by 10,000,000. We 
  do this so that we don't have to use floating point numbers.

  Leave NMEA parsing behind. Now you can simply ask the module for the datums you want!

  Feel like supporting open source hardware?
  Buy a board from SparkFun!
  ZED-F9P RTK2: https://www.sparkfun.com/products/15136
  NEO-M8P RTK: https://www.sparkfun.com/products/15005
  SAM-M8Q: https://www.sparkfun.com/products/15106

  Hardware Connections:
  Plug a Qwiic cable into the GPS and a BlackBoard
  If you don't have a platform with a Qwiic connection use the SparkFun Qwiic Breadboard Jumper (https://www.sparkfun.com/products/14425)
  Open the serial monitor at 115200 baud to see the output
*/

#include <Wire.h> //Needed for I2C to GPS

#include "SparkFun_Ublox_Arduino_Library.h" //http://librarymanager/All#SparkFun_Ublox_GPS
SFE_UBLOX_GPS myGPS;

long lastTime = 0; //Simple local timer. Limits amount if I2C traffic to Ublox module.

void setup()
{
  Serial.begin(38400);
  while (!Serial) //Wait for user to open terminal
  {
    Serial.println("wait...");
  }
  Serial.println("SparkFun Ublox Example");

  Wire.begin();

  if (myGPS.begin() == false) //Connect to the Ublox module using Wire port
  {
    Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing."));
    while (1);
  }

  myGPS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise)
  myGPS.saveConfiguration(); //Save the current settings to flash and BBR
}

void loop()
{
  //Query module only every second. Doing it more often will just cause I2C traffic.
  //The module only responds when a new position is available
  if (millis() - lastTime > 1000)
  {
    lastTime = millis(); //Update the timer
    
    long latitude = myGPS.getLatitude();
    Serial.print(F("Lat: "));
    Serial.print(latitude);

    long longitude = myGPS.getLongitude();
    Serial.print(F(" Long: "));
    Serial.print(longitude);
    Serial.print(F(" (degrees * 10^-7)"));

    long altitude = myGPS.getAltitude();
    Serial.print(F(" Alt: "));
    Serial.print(altitude);
    Serial.print(F(" (mm)"));

    byte SIV = myGPS.getSIV();
    Serial.print(F(" SIV: "));
    Serial.print(SIV);

    Serial.println();
  }
}

HEEEEEEELLLPEEE!!!

I apologize for the delay. Due to the complexity of the system and using a third parties software this is out of the scope of our technical support staff. I apologize for the inconvenience. This is a great post for our community and someone will hopefully have better insight to your specific issue.

Okay,

thanks for the answer but, I see on the forum that there is plenty of guys like me who just want to make the gps working as rover-base system to acquire centimeter level data with correction. I mean, you can just read questions about how to make rover-base with zed-f9p just above and below my post, this clearly mean that the sparkfun hookup guide is deprecated and is no more usefull. The manual wich is referenced on the hookup guide (you know, the “read the chapter 3.5.8 Base station configuration”) are for older u-center version and older firmware and also chapter don’t exist on the new guide updated for firmware that is on the chip send by sparkfun these day (the new guide from ublox for firmware 1.13 is here: https://www.u-blox.com/sites/default/fi … 802%29.pdf , you send zed-f9p with firmware 1.12 and you have the manual for firmware 1.0 on the hookup guide).

So please ask the engineer who has made the card and the arduino library to rewrite a simple lists of steps (tutorial) to set up all the things (base and rover) with the arduino library (or with u-center but I think it will be deprecated quickly as ublox update the software periodically). And ask him to be precise in all the steps required.

What I think everybody want to know is:

  1. firmware version used on the exemple

  2. how to configure the base (with arduino ide or with u-center)

  3. how to check if the things is really sending rtcm data or just other things (seems to be other things in my case)

  4. how to configure the rover with an arduino to read datas (with arduino ide or with u-center)

  5. code for the arduino who will be connected to the rover (we want to have the lat/long/alt data with rtcm corrected->precise lat/long/alt)

  6. a schema/picture with all the things connected, we don’t need wireless connection exemple for base-rover sending informations, you can just use wire for now, I think once we have understand how to set up all the things with wire, we will understand how to replace wires with wireless communication.

Also remember that all peoples who are asking for help about your product zed-f9p for base-rover operations has spend over than 700$ to you and can’t do anything with it for now… So please, at least one guy on the sparkfun company know everything about this card, ask him to make a new more detailed tutorial…(or give me his contact…)

Hi @happylulux, is this still a problem? I’ve set up these boards without problems and gotten 2-5cm accuracy pretty reliably. Let me know if I can help.