From 9dbcbdcd4a626e2822a9b0a541e43ca81c3d72b0 Mon Sep 17 00:00:00 2001 From: PaulZC Date: Tue, 24 Sep 2024 12:38:26 +0100 Subject: [PATCH] Better RTC sync and printConditions --- .../RTK_mosaic-T_Firmware.ino | 46 ++++++++++++------- Firmware/RTK_mosaic-T_Firmware/System.ino | 13 ++++-- Firmware/RTK_mosaic-T_Firmware/Tasks.ino | 2 +- Firmware/RTK_mosaic-T_Firmware/menuSystem.ino | 1 - 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/Firmware/RTK_mosaic-T_Firmware/RTK_mosaic-T_Firmware.ino b/Firmware/RTK_mosaic-T_Firmware/RTK_mosaic-T_Firmware.ino index 015f803..1b6ea83 100644 --- a/Firmware/RTK_mosaic-T_Firmware/RTK_mosaic-T_Firmware.ino +++ b/Firmware/RTK_mosaic-T_Firmware/RTK_mosaic-T_Firmware.ino @@ -94,7 +94,7 @@ unsigned long syncRTCInterval = 1000; // To begin, sync RTC every second. Interv // ReceiverTime 5914 unsigned long gnssTimeArrivalMillis = 0; -bool gnssTimeUpdated[2] = { false, false }; // RTC, TCXO +bool gnssTimeUpdated[3] = { false, false, false }; // RTC, TCXO, printConditions uint32_t gnssTOW_ms = 0; uint8_t gnssDay = 0; uint8_t gnssMonth = 0; @@ -400,27 +400,39 @@ void loop() // Once we have a fix, sync system clock to GNSS void updateRTC() { + static bool firstTime = true; + if (firstTime) + { + gnssTimeUpdated[0] = false; // This ensures gnssTimeUpdated[0] isn't stale + firstTime = false; + } + if (online.rtc == false) // Only do this if the rtc has not been sync'd previously { if (online.gnss == true) // Only do this if the GNSS is online { - if (gnssWNSet && gnssToWSet && gnssFineTime && gnssTimeUpdated[0]) + if (gnssTimeUpdated[0]) { - // To perform the time zone adjustment correctly, it's easiest if we convert the GNSS time and date - // into Unix epoch first and then correct for the arrival time - uint32_t epochSecs; - uint32_t epochMillis; - convertGnssTimeToEpoch(&epochSecs, &epochMillis); - - epochMillis += millis() - gnssTimeArrivalMillis; // Remove the lag - - // Set the internal system time - rtc.setTime(epochSecs, epochMillis * 1000); - - online.rtc = true; - - systemPrint("System time set to: "); - systemPrintln(rtc.getDateTime(true)); + gnssTimeUpdated[0] = false; + + if (gnssWNSet && gnssToWSet && gnssFineTime) + { + // To perform the time zone adjustment correctly, it's easiest if we convert the GNSS time and date + // into Unix epoch first and then correct for the arrival time + uint32_t epochSecs; + uint32_t epochMillis; + convertGnssTimeToEpoch(&epochSecs, &epochMillis); + + epochMillis += millis() - gnssTimeArrivalMillis; // Remove the lag + + // Set the internal system time + rtc.setTime(epochSecs, epochMillis * 1000); + + online.rtc = true; + + systemPrint("System time set to: "); + systemPrintln(rtc.getDateTime(true)); + } } } // End online.gnss } // End online.rtc diff --git a/Firmware/RTK_mosaic-T_Firmware/System.ino b/Firmware/RTK_mosaic-T_Firmware/System.ino index 8af0c39..87ec2ab 100644 --- a/Firmware/RTK_mosaic-T_Firmware/System.ino +++ b/Firmware/RTK_mosaic-T_Firmware/System.ino @@ -31,12 +31,19 @@ void settingsToDefaults() // Periodically print conditions if enabled void printConditions() { - // Periodically print the position etc. - if (settings.enablePrintConditions && ((millis() - lastPrintConditions) > settings.periodicPrintInterval_ms)) + // Periodically print the position etc. each time a ReceiverTime message is received + if (settings.enablePrintConditions && gnssTimeUpdated[2]) { + gnssTimeUpdated[2] = false; printCurrentConditions(settings.enablePrintConditions == 2); - lastPrintConditions = millis(); } + + // Periodically print the position etc. + //if (settings.enablePrintConditions && ((millis() - lastPrintConditions) > settings.periodicPrintInterval_ms)) + //{ + // printCurrentConditions(settings.enablePrintConditions == 2); + // lastPrintConditions = millis(); + //} } // Print the error message every 15 seconds diff --git a/Firmware/RTK_mosaic-T_Firmware/Tasks.ino b/Firmware/RTK_mosaic-T_Firmware/Tasks.ino index b13645a..8597da1 100644 --- a/Firmware/RTK_mosaic-T_Firmware/Tasks.ino +++ b/Firmware/RTK_mosaic-T_Firmware/Tasks.ino @@ -557,7 +557,7 @@ void processConsumerMessage(PARSE_STATE *parse, uint8_t type) { if ((parse->message & 0x1FFF) == 5914) // ReceiverTime { - gnssTimeUpdated[0] = gnssTimeUpdated[1] = true; + gnssTimeUpdated[0] = gnssTimeUpdated[1] = gnssTimeUpdated[2] = true; gnssTimeArrivalMillis = millis(); gnssTOW_ms = ((uint32_t)parse->buffer[8]) << 0; diff --git a/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino b/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino index a3e1c03..5946c91 100644 --- a/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino +++ b/Firmware/RTK_mosaic-T_Firmware/menuSystem.ino @@ -48,7 +48,6 @@ void menuDebugSoftware() break; } } - systemPrintf("%s\r\n", settings.enablePrintConditions ? "Enabled" : "Disabled"); systemPrint("9) Print consumers: "); systemPrintf("%s\r\n", settings.enablePrintConsumers ? "Enabled" : "Disabled");