Skip to content

Commit 2a6852a

Browse files
authored
Merge pull request #743 from sparkfun/release_candidate
Merge v4.0
2 parents 00d13f3 + 3356b72 commit 2a6852a

19 files changed

+1020
-507
lines changed

.github/workflows/compile-rtk-firmware.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ on:
55

66
env:
77
FILENAME_PREFIX: RTK_Surveyor_Firmware
8-
FIRMWARE_VERSION_MAJOR: 3
9-
FIRMWARE_VERSION_MINOR: 10
8+
FIRMWARE_VERSION_MAJOR: 4
9+
FIRMWARE_VERSION_MINOR: 0
1010
POINTPERFECT_TOKEN: ${{ secrets.POINTPERFECT_TOKEN }}
1111

1212
jobs:

Firmware/RTK_Surveyor/Begin.ino

Lines changed: 55 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -9,43 +9,37 @@ Begin.ino
99
// Constants
1010
//----------------------------------------
1111

12-
#define MAX_ADC_VOLTAGE 3300 // Millivolts
12+
#define MAX_ADC_VOLTAGE 3300 // Millivolts
1313

1414
// Testing shows the combined ADC+resistors is under a 1% window
15-
#define TOLERANCE 4.75 // Percent: 95.25% - 104.75%
15+
#define TOLERANCE 5.20 // Percent: 94.8% - 105.2%
1616

1717
//----------------------------------------
1818
// Hardware initialization functions
1919
//----------------------------------------
20-
21-
// ADC input
22-
// Ra KOhms | Rb KOhms
23-
// MAX_ADC_VOLTAGE -----/\/\/\/\-----+-----/\/\/\/\----- Ground
24-
//
25-
2620
// Determine if the measured value matches the product ID value
27-
bool idWithAdc(uint16_t mvMeasured, float resVcc, float resGnd)
21+
// idWithAdc applies resistor tolerance using worst-case tolerances:
22+
// Upper threshold: R1 down by TOLERANCE, R2 up by TOLERANCE
23+
// Lower threshold: R1 up by TOLERANCE, R2 down by TOLERANCE
24+
bool idWithAdc(uint16_t mvMeasured, float r1, float r2)
2825
{
29-
uint16_t lowerThreshold;
30-
float raK;
31-
float rbK;
32-
uint16_t upperThreshold;
33-
float voltage;
34-
35-
// Compute the upper threshold
36-
raK = resVcc * (1.0 - (TOLERANCE / 100.));
37-
rbK = resGnd * (1.0 + (TOLERANCE / 100.));
38-
voltage = MAX_ADC_VOLTAGE * rbK / (raK + rbK);
39-
upperThreshold = (int)ceil(voltage);
40-
41-
// Compute the lower threshold
42-
raK = (double)resVcc * (1.0 + (TOLERANCE / 100.));
43-
rbK = (double)resGnd * (1.0 - (TOLERANCE / 100.));
44-
voltage = MAX_ADC_VOLTAGE * rbK / (raK + rbK);
45-
lowerThreshold = (int)floor(voltage);
26+
float lowerThreshold;
27+
float upperThreshold;
28+
29+
// ADC input
30+
// r1 KOhms | r2 KOhms
31+
// MAX_ADC_VOLTAGE -----/\/\/\/\-----+-----/\/\/\/\----- Ground
4632

4733
// Return true if the mvMeasured value is within the tolerance range
4834
// of the mvProduct value
35+
upperThreshold = ceil(MAX_ADC_VOLTAGE * (r2 * (1.0 + (TOLERANCE / 100.0))) /
36+
((r1 * (1.0 - (TOLERANCE / 100.0))) + (r2 * (1.0 + (TOLERANCE / 100.0)))));
37+
lowerThreshold = floor(MAX_ADC_VOLTAGE * (r2 * (1.0 - (TOLERANCE / 100.0))) /
38+
((r1 * (1.0 + (TOLERANCE / 100.0))) + (r2 * (1.0 - (TOLERANCE / 100.0)))));
39+
40+
// systemPrintf("r1: %0.2f r2: %0.2f lowerThreshold: %0.0f mvMeasured: %d upperThreshold: %0.0f\r\n", r1, r2,
41+
// lowerThreshold, mvMeasured, upperThreshold);
42+
4943
return (upperThreshold > mvMeasured) && (mvMeasured > lowerThreshold);
5044
}
5145

@@ -61,13 +55,13 @@ void identifyBoard()
6155
uint16_t idValue = analogReadMilliVolts(pin_deviceID);
6256
log_d("Board ADC ID (mV): %d", idValue);
6357

64-
// Order checks by millivolt values high to low
58+
// Order the following ID checks, by millivolt values high to low
6559

66-
// Facet L-Band Direct: 4.7/1 --> 534mV < 578mV < 626mV
60+
// Facet L-Band Direct: 4.7/1 --> 534mV < 579mV < 626mV
6761
if (idWithAdc(idValue, 4.7, 1))
6862
productVariant = RTK_FACET_LBAND_DIRECT;
6963

70-
// Express: 10/3.3 --> 761mV < 818mV < 879mV
64+
// Express: 10/3.3 --> 761mV < 819mV < 879mV
7165
else if (idWithAdc(idValue, 10, 3.3))
7266
productVariant = RTK_EXPRESS;
7367

@@ -95,7 +89,10 @@ void identifyBoard()
9589
// Surveyor
9690
// Unknown
9791
else
92+
{
93+
log_d("Out of band or nonexistent resistor IDs");
9894
productVariant = RTK_UNKNOWN; // Need to wait until the GNSS and Accel have been initialized
95+
}
9996
}
10097

10198
// Setup any essential power pins
@@ -611,8 +608,7 @@ void beginUART2()
611608
// after discarding the oldest data
612609
length = settings.gnssHandlerBufferSize;
613610
rbOffsetEntries = (length >> 1) / AVERAGE_SENTENCE_LENGTH_IN_BYTES;
614-
length = settings.gnssHandlerBufferSize
615-
+ (rbOffsetEntries * sizeof(RING_BUFFER_OFFSET));
611+
length = settings.gnssHandlerBufferSize + (rbOffsetEntries * sizeof(RING_BUFFER_OFFSET));
616612
ringBuffer = nullptr;
617613
rbOffsetArray = (RING_BUFFER_OFFSET *)malloc(length);
618614
if (!rbOffsetArray)
@@ -1272,40 +1268,40 @@ void pinI2CTask(void *pvParameters)
12721268
i2cBusAvailable = true;
12731269
switch (addr)
12741270
{
1275-
default: {
1276-
systemPrintf("0x%02x\r\n", addr);
1277-
break;
1278-
}
1271+
default: {
1272+
systemPrintf("0x%02x\r\n", addr);
1273+
break;
1274+
}
12791275

1280-
case 0x19: {
1281-
systemPrintf("0x%02x - LIS2DH12 Accelerometer\r\n", addr);
1282-
break;
1283-
}
1276+
case 0x19: {
1277+
systemPrintf("0x%02x - LIS2DH12 Accelerometer\r\n", addr);
1278+
break;
1279+
}
12841280

1285-
case 0x36: {
1286-
systemPrintf("0x%02x - MAX17048 Fuel Gauge\r\n", addr);
1287-
break;
1288-
}
1281+
case 0x36: {
1282+
systemPrintf("0x%02x - MAX17048 Fuel Gauge\r\n", addr);
1283+
break;
1284+
}
12891285

1290-
case 0x3d: {
1291-
systemPrintf("0x%02x - SSD1306 (64x48) OLED Driver\r\n", addr);
1292-
break;
1293-
}
1286+
case 0x3d: {
1287+
systemPrintf("0x%02x - SSD1306 (64x48) OLED Driver\r\n", addr);
1288+
break;
1289+
}
12941290

1295-
case 0x42: {
1296-
systemPrintf("0x%02x - u-blox ZED-F9P GNSS Receiver\r\n", addr);
1297-
break;
1298-
}
1291+
case 0x42: {
1292+
systemPrintf("0x%02x - u-blox ZED-F9P GNSS Receiver\r\n", addr);
1293+
break;
1294+
}
12991295

1300-
case 0x43: {
1301-
systemPrintf("0x%02x - u-blox NEO-D9S-00B Correction Data Receiver\r\n", addr);
1302-
break;
1303-
}
1296+
case 0x43: {
1297+
systemPrintf("0x%02x - u-blox NEO-D9S-00B Correction Data Receiver\r\n", addr);
1298+
break;
1299+
}
13041300

1305-
case 0x60: {
1306-
systemPrintf("0x%02x - Crypto Coprocessor\r\n", addr);
1307-
break;
1308-
}
1301+
case 0x60: {
1302+
systemPrintf("0x%02x - Crypto Coprocessor\r\n", addr);
1303+
break;
1304+
}
13091305
}
13101306
}
13111307
else if ((millis() - timer) > 3)

0 commit comments

Comments
 (0)