diff --git a/components/flow3r_bsp/flow3r_bsp_ad7147.c b/components/flow3r_bsp/flow3r_bsp_ad7147.c index 4afad6ca08c5e563567a80fae48857b3547b7f84..b45118cc7adee64d86bd2534d1d854f887e21078 100644 --- a/components/flow3r_bsp/flow3r_bsp_ad7147.c +++ b/components/flow3r_bsp/flow3r_bsp_ad7147.c @@ -128,6 +128,15 @@ static bool _channel_afe_tweak(ad7147_chip_t *chip, size_t cix) { if (offset > 63) { offset = 63; } + +#if 0 + // keep around for debugging pls~ + int32_t old_offset = chip->channels[cix].afe_offset; + int32_t chan = cix; + ESP_LOGE(TAG, "%s, channel %ld: new afe: %ld, old afe: %ld, reading: %ld", chip->name, chan, + offset, old_offset, cur); +#endif + chip->channels[cix].afe_offset = offset; return true; } @@ -140,9 +149,11 @@ static void _on_data(void *user, uint16_t *data, size_t len) { // We're doing a calibration cycle on our channels. Instead of writing // the data to channel->cdc, write it to channel->amb_meas. size_t j = chip->calibration_cycles - 1; - for (size_t i = 0; i < len; i++) { - chip->channels[_channel_from_readout(chip, i)].amb_meas[j] = - data[i]; + if (j < _AD7147_CALIB_CYCLES) { + for (size_t i = 0; i < len; i++) { + chip->channels[_channel_from_readout(chip, i)].amb_meas[j] = + data[i]; + } } } else { // Normal measurement, apply to channel->cdc. @@ -151,8 +162,7 @@ static void _on_data(void *user, uint16_t *data, size_t len) { } } - bool reprogram = _sequence_advance(chip); - bool tweak = false; + bool reprogram = _sequence_advance(chip) || chip->calibration_external; // Synchronize on beginning of sequence for calibration logic. if (chip->seq_position == 0) { @@ -160,7 +170,7 @@ static void _on_data(void *user, uint16_t *data, size_t len) { if (chip->calibration_pending) { if (!chip->calibration_active) { ESP_LOGI(TAG, "%s: calibration starting...", chip->name); - chip->calibration_cycles = _AD7147_CALIB_CYCLES; + chip->calibration_cycles = _AD7147_CALIB_CYCLES + 2; chip->calibration_active = true; } chip->calibration_pending = false; @@ -193,8 +203,7 @@ static void _on_data(void *user, uint16_t *data, size_t len) { // Can we tweak the AFE to get a better measurement? uint16_t rerun = 0; for (size_t i = 0; i < chip->nchannels; i++) { - tweak = _channel_afe_tweak(chip, i); - if (tweak) { + if (_channel_afe_tweak(chip, i)) { rerun |= (1 << i); } } @@ -205,7 +214,8 @@ static void _on_data(void *user, uint16_t *data, size_t len) { "%s: calibration done, but can do better (%04x). " "Retrying.", chip->name, rerun); - chip->calibration_cycles = _AD7147_CALIB_CYCLES; + chip->calibration_cycles = _AD7147_CALIB_CYCLES + 2; + reprogram = true; } else { chip->calibration_active = false; ESP_LOGI(TAG, "%s: calibration done.", chip->name); @@ -233,7 +243,7 @@ static void _on_data(void *user, uint16_t *data, size_t len) { } // _sequence_request also writes the AFE registers which just got tweaked - if (reprogram || tweak || chip->calibration_external) { + if (reprogram) { esp_err_t ret; if ((ret = _sequence_request(chip, reprogram)) != ESP_OK) { COMPLAIN(chip, "%s: requesting next sequence failed: %s", @@ -255,7 +265,7 @@ esp_err_t flow3r_bsp_ad7147_chip_init(ad7147_chip_t *chip, if ((ret = ad7147_hw_init(&chip->dev, address, _on_data, chip)) != ESP_OK) { return ret; } - _calibration_request(chip); + // _calibration_request(chip); if ((ret = _sequence_request(chip, false)) != ESP_OK) { return ret; } diff --git a/components/flow3r_bsp/flow3r_bsp_ad7147_hw.c b/components/flow3r_bsp/flow3r_bsp_ad7147_hw.c index b7237c5e17b4718ae607d9360a0abb9b9616b246..d3f10b731e9c74d29b7c9aa586debc5d391b34d7 100644 --- a/components/flow3r_bsp/flow3r_bsp_ad7147_hw.c +++ b/components/flow3r_bsp/flow3r_bsp_ad7147_hw.c @@ -22,6 +22,9 @@ #define AD7147_REG_DEVICE_ID 0x17 #define AD7147_REG_STAGE0_CONNECTION 0x80 +// uncomment only when u need it else clang-tidy complains +// static const char *TAG = "flow3r-bsp-ad7147-hw"; + // Write single register at `reg`. static esp_err_t _i2c_write(const ad7147_hw_t *dev, uint16_t reg, uint16_t data) { @@ -161,7 +164,14 @@ static esp_err_t _configure_stage(const ad7147_hw_t *dev, uint8_t stage) { afe_offset, sensitivity, }; - return _i2c_write_multiple(dev, reg, tx, 4); + esp_err_t ret = _i2c_write_multiple(dev, reg, tx, 4); +#if 0 + uint16_t rx[4]; + ESP_LOGE(TAG, "write stage config: %u %u %u %u", tx[0], tx[1], tx[2], tx[3]); + _i2c_read(dev, reg, rx, 4); + ESP_LOGE(TAG, "read stage config: %u %u %u %u", rx[0], rx[1], rx[2], rx[3]); +#endif + return ret; } // Configure entire device per stage_config and dev_config.