diff --git a/src/eis_shield/eis.c b/src/eis_shield/eis.c index 7e43c9abf941ce6ed386c31a546ec68d71bb0a2f..d73f1d3a477201e0d116eec172fb61bd8698f170 100644 --- a/src/eis_shield/eis.c +++ b/src/eis_shield/eis.c @@ -79,6 +79,9 @@ cint16_t eis_measure_one(void){ case EIS_STATUS_MEASURE: result = ad5933_measure_one(AD5933_MEASURE_NEXT); break; + case EIS_STATUS_REPEAT: + result = ad5933_measure_one(AD5933_MEASURE_REPEAT); + break; default: result = ad5933_measure_one(AD5933_MEASURE_NEXT); break; diff --git a/src/eis_shield/eis.h b/src/eis_shield/eis.h index ff7b9af6630ded3c65f5d054c6c348a6e0f38b8f..805d70a47c33b9d904a41151bd77d3e45df7b267 100644 --- a/src/eis_shield/eis.h +++ b/src/eis_shield/eis.h @@ -11,7 +11,8 @@ #define EIS_STATUS_READY 0 #define EIS_STATUS_MEASURE 1 -#define EIS_STATUS_DONE 2 +#define EIS_STATUS_REPEAT 2 +#define EIS_STATUS_DONE 3 #include #include "ad5933.h" diff --git a/src/experiment.c b/src/experiment.c index e147ca7a4b9a741c2f07f8c041adce3e77830f0e..dc310e7ac092d74f372450550a30d367757b6e81 100644 --- a/src/experiment.c +++ b/src/experiment.c @@ -121,6 +121,8 @@ void experiment_handler(char command){ uint16_t n_increments, settle_cycles, attenuation, offset, mclk_div2; uint8_t pga_gain, output_range, iv_gain, reference; + uint8_t avg_counter = 0; + scanf("%lu%lu%u%u%hhu%hhu%hhu%u%u%hhu%u", &start_f, &increment_f, &n_increments, &settle_cycles, &pga_gain, &output_range, &iv_gain, &attenuation, &offset, &reference, &mclk_div2); @@ -132,9 +134,11 @@ void experiment_handler(char command){ result.increment = 0; + cint16_t imp_avg[4]; + pot_exp_start(); //Disconnect DStat from shield eis_set_params(start_f, increment_f, n_increments-1, settle_cycles, pga_gain, output_range, - iv_gain, attenuation, offset, reference, mclk_div2); + iv_gain, attenuation, offset, reference, mclk_div2); while (eis_status != EIS_STATUS_DONE){ if (udi_cdc_is_rx_ready()){ @@ -144,12 +148,42 @@ void experiment_handler(char command){ } } - result.imp = eis_measure_one(); - if (result.imp.real != 0 && result.imp.imag != 0) { - printf("B\n"); - udi_cdc_write_buf(&result, 6); - printf("\r\n"); - result.increment++; + imp_avg[avg_counter] = eis_measure_one(); + + if (eis_status == EIS_STATUS_DONE) + break; + + else if (avg_counter < 4){ + eis_status = EIS_STATUS_REPEAT; + avg_counter++; + } + else { + avg_counter = 0; + eis_status = EIS_STATUS_MEASURE; + + int32_t sum_real = 0; + int32_t sum_imag = 0; + + for (uint8_t i = 0; i < 4; i++) { +// printf("#IMP: %i \r\n", imp_avg[i].real); + sum_real += imp_avg[i].real; + sum_imag += imp_avg[i].imag; + } + + sum_real /= 4; + sum_imag /= 4; + + result.imp.real = sum_real; + result.imp.imag = sum_imag; + + printf("#IMP: %i + %ii\r\n", result.imp.real, result.imp.imag); + + if (result.imp.real != 0 && result.imp.imag != 0) { + printf("B\n"); + udi_cdc_write_buf(&result, 6); + printf("\r\n"); + result.increment++; + } } }