@@ -9,43 +9,37 @@ Begin.ino
9
9
// Constants
10
10
// ----------------------------------------
11
11
12
- #define MAX_ADC_VOLTAGE 3300 // Millivolts
12
+ #define MAX_ADC_VOLTAGE 3300 // Millivolts
13
13
14
14
// 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 %
16
16
17
17
// ----------------------------------------
18
18
// Hardware initialization functions
19
19
// ----------------------------------------
20
-
21
- // ADC input
22
- // Ra KOhms | Rb KOhms
23
- // MAX_ADC_VOLTAGE -----/\/\/\/\-----+-----/\/\/\/\----- Ground
24
- //
25
-
26
20
// 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)
28
25
{
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
46
32
47
33
// Return true if the mvMeasured value is within the tolerance range
48
34
// 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
+
49
43
return (upperThreshold > mvMeasured) && (mvMeasured > lowerThreshold);
50
44
}
51
45
@@ -61,13 +55,13 @@ void identifyBoard()
61
55
uint16_t idValue = analogReadMilliVolts (pin_deviceID);
62
56
log_d (" Board ADC ID (mV): %d" , idValue);
63
57
64
- // Order checks by millivolt values high to low
58
+ // Order the following ID checks, by millivolt values high to low
65
59
66
- // Facet L-Band Direct: 4.7/1 --> 534mV < 578mV < 626mV
60
+ // Facet L-Band Direct: 4.7/1 --> 534mV < 579mV < 626mV
67
61
if (idWithAdc (idValue, 4.7 , 1 ))
68
62
productVariant = RTK_FACET_LBAND_DIRECT;
69
63
70
- // Express: 10/3.3 --> 761mV < 818mV < 879mV
64
+ // Express: 10/3.3 --> 761mV < 819mV < 879mV
71
65
else if (idWithAdc (idValue, 10 , 3.3 ))
72
66
productVariant = RTK_EXPRESS;
73
67
@@ -95,7 +89,10 @@ void identifyBoard()
95
89
// Surveyor
96
90
// Unknown
97
91
else
92
+ {
93
+ log_d (" Out of band or nonexistent resistor IDs" );
98
94
productVariant = RTK_UNKNOWN; // Need to wait until the GNSS and Accel have been initialized
95
+ }
99
96
}
100
97
101
98
// Setup any essential power pins
@@ -611,8 +608,7 @@ void beginUART2()
611
608
// after discarding the oldest data
612
609
length = settings.gnssHandlerBufferSize ;
613
610
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));
616
612
ringBuffer = nullptr ;
617
613
rbOffsetArray = (RING_BUFFER_OFFSET *)malloc (length);
618
614
if (!rbOffsetArray)
@@ -1272,40 +1268,40 @@ void pinI2CTask(void *pvParameters)
1272
1268
i2cBusAvailable = true ;
1273
1269
switch (addr)
1274
1270
{
1275
- default : {
1276
- systemPrintf (" 0x%02x\r\n " , addr);
1277
- break ;
1278
- }
1271
+ default : {
1272
+ systemPrintf (" 0x%02x\r\n " , addr);
1273
+ break ;
1274
+ }
1279
1275
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
+ }
1284
1280
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
+ }
1289
1285
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
+ }
1294
1290
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
+ }
1299
1295
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
+ }
1304
1300
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
+ }
1309
1305
}
1310
1306
}
1311
1307
else if ((millis () - timer) > 3 )
0 commit comments