@@ -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