better solution for small time values

pull/4/head
DiSlord 6 years ago
parent fb79c15a7e
commit 0eb769c61c

@ -1605,6 +1605,15 @@ again: // Waiting for a trigger jumps back to here
setting.additional_step_delay_us = 0; setting.additional_step_delay_us = 0;
setting.sweep_time_us = t; setting.sweep_time_us = t;
} }
// manually set delay, for better sync
if (setting.sweep_time_us < 2.5 * ONE_MS_TIME){
setting.additional_step_delay_us = 0;
setting.sweep_time_us = 0;
}
else if (setting.sweep_time_us <= 3 * ONE_MS_TIME){
setting.additional_step_delay_us = 1;
setting.sweep_time_us = 3000;
}
if (MODE_OUTPUT(setting.mode) && setting.additional_step_delay_us < 500) // Minimum wait time to prevent LO from lockup during output frequency sweep if (MODE_OUTPUT(setting.mode) && setting.additional_step_delay_us < 500) // Minimum wait time to prevent LO from lockup during output frequency sweep
setting.additional_step_delay_us = 500; setting.additional_step_delay_us = 500;
if (break_on_operation && MODE_INPUT(setting.mode)) { // during normal operation if (break_on_operation && MODE_INPUT(setting.mode)) { // during normal operation
@ -1757,12 +1766,12 @@ sweep_again: // stay in sweep loop when output mo
// ---------------------- process measured actual sweep time ----------------- // ---------------------- process measured actual sweep time -----------------
// Update actual time on change on status panel // Update actual time on change on status panel
static uint32_t old_time = 0; // static uint32_t old_time = 0;
uint32_t delta = abs((int)(setting.actual_sweep_time_us - old_time)); // uint32_t delta = abs((int)(setting.actual_sweep_time_us - old_time));
if ((delta<<3) > setting.actual_sweep_time_us){ // update if delta > 1/8 // if ((delta<<3) > setting.actual_sweep_time_us){ // update if delta > 1/8
redraw_request|=REDRAW_CAL_STATUS; // redraw_request|=REDRAW_CAL_STATUS;
old_time = setting.actual_sweep_time_us; // old_time = setting.actual_sweep_time_us;
} // }
// Not possible reduce sweep time, it minimum! // Not possible reduce sweep time, it minimum!
if (setting.sweep_time_us < setting.actual_sweep_time_us && setting.additional_step_delay_us == 0){ if (setting.sweep_time_us < setting.actual_sweep_time_us && setting.additional_step_delay_us == 0){
// Warning!! not correct set sweep time here, you get error!! // Warning!! not correct set sweep time here, you get error!!
@ -1776,14 +1785,7 @@ sweep_again: // stay in sweep loop when output mo
uint32_t dt = 0; uint32_t dt = 0;
static uint32_t last_dt = 0; static uint32_t last_dt = 0;
// selected time less then actual, need reduce delay // selected time less then actual, need reduce delay
// manually set delay, for better sync if (setting.sweep_time_us < setting.actual_sweep_time_us){
if (setting.sweep_time_us < 2.5 * ONE_MS_TIME){
setting.additional_step_delay_us = 0;
}
else if (setting.sweep_time_us < 3 * ONE_MS_TIME){
setting.additional_step_delay_us = 1;
}
else if (setting.sweep_time_us < setting.actual_sweep_time_us){
dt = (setting.actual_sweep_time_us - setting.sweep_time_us)/(sweep_points - 1); dt = (setting.actual_sweep_time_us - setting.sweep_time_us)/(sweep_points - 1);
if (setting.additional_step_delay_us > dt) setting.additional_step_delay_us-=dt; if (setting.additional_step_delay_us > dt) setting.additional_step_delay_us-=dt;
else setting.additional_step_delay_us = 0; else setting.additional_step_delay_us = 0;

Loading…
Cancel
Save

Powered by TurnKey Linux.