Skip to content

Commit bdac330

Browse files
committed
don't set default adc gain calibration to 0.
1 parent e3f0d2f commit bdac330

File tree

6 files changed

+69
-13
lines changed

6 files changed

+69
-13
lines changed

m4/.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"string": "cpp",
88
"string_view": "cpp",
99
"deque": "cpp",
10-
"vector": "cpp"
10+
"vector": "cpp",
11+
"thread": "cpp"
1112
}
1213
}

m4/src/Peripherals/ADC/ADCBoard.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -373,13 +373,26 @@ class ADCBoard {
373373
}
374374

375375
void restoreCalibrationFromFlash() {
376+
if (!isCalibrationReady()) {
377+
return;
378+
}
379+
376380
CalibrationData data;
377381
m4ReceiveCalibrationData(data);
382+
383+
if (!data.adcCalibrated) {
384+
return;
385+
}
386+
378387
int boardIndex = getBoardIndex();
379388

380389
for (int i = 0; i < NUM_CHANNELS_PER_ADC_BOARD; i++) {
381390
setZeroScaleCalibration(i, data.adc_offset[NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i]);
382-
setFullScaleCalibration(i, data.adc_gain[NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i]);
391+
392+
uint32_t fullScale = data.adc_gain[NUM_CHANNELS_PER_ADC_BOARD * boardIndex + i];
393+
if (fullScale != 0) {
394+
setFullScaleCalibration(i, fullScale);
395+
}
383396
}
384397
}
385398

m4/src/Peripherals/God.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class God {
2626
registerMemberFunctionVector(timeSeriesAdcRead, "TIME_SERIES_ADC_READ");
2727
registerMemberFunction(dacChannelCalibration, "DAC_CH_CAL");
2828
registerMemberFunctionVector(boxcarAverageRamp, "BOXCAR_BUFFER_RAMP");
29+
registerMemberFunction(hardResetCalibrationToDefaults, "HARD_RESET_CALIBRATION");
2930
}
3031

3132
inline static OperationResult initialize() {
@@ -34,6 +35,21 @@ class God {
3435
return OperationResult::Success("INITIALIZATION COMPLETE");
3536
}
3637

38+
inline static OperationResult hardResetCalibrationToDefaults() {
39+
CalibrationData calibrationData;
40+
m4ReceiveCalibrationData(calibrationData);
41+
for (int i = 0; i < NUM_DAC_CHANNELS; i++) {
42+
calibrationData.gain[i] = 1.0f;
43+
calibrationData.offset[i] = 0.0f;
44+
calibrationData.adc_offset[i] = 0x800000; // Default ADC offset
45+
calibrationData.adc_gain[i] = 0x200000; // Default ADC gain
46+
}
47+
calibrationData.adcCalibrated = false;
48+
m4SendCalibrationData(calibrationData);
49+
50+
return OperationResult::Success("Calibration data reset to defaults");
51+
}
52+
3753

3854
struct BoardUsage {
3955
uint8_t numBoards; // how many distinct boards are in use

m4/src/Utils/CalibrationData.h

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
#pragma once
22

3+
#define NUM_CHANNELS 16
4+
35
struct CalibrationData {
4-
float gain[16];
5-
float offset[16];
6+
float gain[NUM_CHANNELS];
7+
float offset[NUM_CHANNELS];
8+
9+
bool adcCalibrated;
10+
uint32_t adc_offset[NUM_CHANNELS];
11+
uint32_t adc_gain[NUM_CHANNELS];
612

7-
bool adcCalibrated = false;
8-
uint32_t adc_offset[16];
9-
uint32_t adc_gain[16];
13+
CalibrationData() : adcCalibrated(false) {
14+
for (int i = 0; i < NUM_CHANNELS; ++i) {
15+
gain[i] = 1.0f;
16+
offset[i] = 0.0f;
17+
adc_offset[i] = 0x800000u; // Default ADC offset
18+
adc_gain[i] = 0x200000u; // Default ADC gain
19+
}
20+
}
1021
};

m4/src/main.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,11 @@ void setup() {
8484
} else {
8585
for (int i=0; i<NUM_ADC_BOARDS * NUM_CHANNELS_PER_ADC_BOARD; i++) {
8686
ADCController::setChZeroScaleCalibration(i, calibrationData.adc_offset[i]);
87-
ADCController::setChFullScaleCalibration(i, calibrationData.adc_gain[i]);
87+
88+
if (calibrationData.adc_gain[i] != 0) {
89+
ADCController::setChFullScaleCalibration(i, calibrationData.adc_gain[i]);
90+
}
91+
8892
}
8993
}
9094
}

m7/src/Utils/CalibrationData.h

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
#pragma once
22

3+
#define NUM_CHANNELS 16
4+
35
struct CalibrationData {
4-
float gain[16];
5-
float offset[16];
6+
float gain[NUM_CHANNELS];
7+
float offset[NUM_CHANNELS];
8+
9+
bool adcCalibrated;
10+
uint32_t adc_offset[NUM_CHANNELS];
11+
uint32_t adc_gain[NUM_CHANNELS];
612

7-
bool adcCalibrated = false; // Flag to indicate if ADC calibration is done
8-
uint32_t adc_offset[16];
9-
uint32_t adc_gain[16];
13+
CalibrationData() : adcCalibrated(false) {
14+
for (int i = 0; i < NUM_CHANNELS; ++i) {
15+
gain[i] = 1.0f;
16+
offset[i] = 0.0f;
17+
adc_offset[i] = 0x800000u; // Default ADC offset
18+
adc_gain[i] = 0x200000u; // Default ADC gain
19+
}
20+
}
1021
};

0 commit comments

Comments
 (0)