diff --git a/edc20_cycle_iv_mode.c b/edc20_cycle_iv_mode.c index d1a4fa1..330b0d9 100644 --- a/edc20_cycle_iv_mode.c +++ b/edc20_cycle_iv_mode.c @@ -114,13 +114,13 @@ static ret_code_t _send_data_packet(elite_notify_packet_t *p_notify_buf, bool is typedef struct { - int32_t dir; + float dir; float mV_output; float mV_max; float mV_min; float mV_start; float mV_stop; - uint32_t step; + float step; uint32_t cycle_cnt; uint32_t cycle_max; uint32_t fullscale; @@ -168,13 +168,12 @@ static uint32_t mV_out_1(cycle_iv_dac_t *p) static uint32_t cal_dac_timer_interval(elite_dac_config_t *p_config, cycle_iv_dac_t *p_cycle_iv_dac) { - const float STEP_TIME_FACTOR = 2.0f; uint32_t intvl; - uint32_t step_time = p_config->uS_step * STEP_TIME_FACTOR; - for (uint32_t intvl = 100; intvl < 1000000; intvl *= 10) + float step_time = p_config->uS_step; + for (intvl = 100; intvl < 1000000; intvl *= 10) { p_cycle_iv_dac->step = (p_config->mV_step * intvl) / step_time; - if (p_cycle_iv_dac->step) + if (p_cycle_iv_dac->step >= 0.001) { return intvl; } @@ -295,45 +294,44 @@ static void edc20_cycle_iv_mode_task(void *p_arg) NRF_LOG_INFO("%s", info); } - dac_write_through(OUT_0, mV_out_0(&dac_param)); - dac_write_through(OUT_1, mV_out_1(&dac_param)); - circuit_selection_dac_fune_tune_f0(); + dac_write_through(OUT_0, mV_out_0(&dac_param)); + dac_param.mV_output = dac_param.mV_start; + dac_write_through(OUT_1, mV_out_1(&dac_param)); + circuit_selection_dac_fune_tune_f0(); + /* start DAC timer */ + edc20_dac_tim_start(cal_dac_timer_interval(&mode_param.config, &dac_param), _callback, &dac_param); - - /* start DAC timer */ - edc20_dac_tim_start(cal_dac_timer_interval(&mode_param.config, &dac_param), _callback, &dac_param); - - /* start ADC timer */ - edc20_adc_tim_start(&mode_param.config); - - /* get current tick */ - TickType_t tick = xTaskGetTickCount(); - - uint32_t notify_delay = pdMS_TO_TICKS(mode_param.mS_period); - - /* start data update process */ - running = true; - - while (running) - { - ret_code_t ret = _send_data_packet(&packet_buf, false); - switch (ret) - { - case NRF_SUCCESS: - case NRF_ERROR_RESOURCES: - vTaskDelayUntil(&tick, notify_delay); - break; - default: - running = false; - break; - } - } - - edc20_dac_tim_stop(); - edc20_adc_tim_stop(); + /* start ADC timer */ + edc20_adc_tim_start(&mode_param.config); + + /* get current tick */ + TickType_t tick = xTaskGetTickCount(); + + uint32_t notify_delay = pdMS_TO_TICKS(mode_param.mS_period); + + /* start data update process */ + running = true; + + while (running) + { + ret_code_t ret = _send_data_packet(&packet_buf, false); + switch (ret) + { + case NRF_SUCCESS: + case NRF_ERROR_RESOURCES: + vTaskDelayUntil(&tick, notify_delay); + break; + default: + running = false; + break; + } + } + + edc20_dac_tim_stop(); + edc20_adc_tim_stop(); if (1) {