diff --git a/nanovna.h b/nanovna.h index 635c072..434cce7 100644 --- a/nanovna.h +++ b/nanovna.h @@ -869,6 +869,7 @@ int SI4432_is_fast_mode(void); void SI4432_Set_Frequency ( uint32_t Freq ); uint16_t SI4432_SET_RBW(uint16_t WISH); void SI4432_SetReference(int freq); +extern uint16_t SI4432_force_RBW(int i); // Speed profile definition #define START_PROFILE systime_t time = chVTGetSystemTimeX(); diff --git a/sa_core.c b/sa_core.c index 1ab65c3..0571db5 100644 --- a/sa_core.c +++ b/sa_core.c @@ -782,19 +782,21 @@ void calculate_step_delay(void) { if (setting.step_delay_mode == SD_MANUAL || setting.step_delay != 0) { // The latter part required for selftest 3 SI4432_step_delay = setting.step_delay; + if (setting.offset_delay != 0) // Override if set + SI4432_offset_delay = setting.offset_delay; } else { SI4432_offset_delay = 0; if (setting.frequency_step == 0.0) { // zero span mode, not dependent on selected RBW SI4432_step_delay = 0; } else { - if (actual_rbw_x10 >= 1910) { SI4432_step_delay = 280; SI4432_offset_delay = 200; } - else if (actual_rbw_x10 >= 1420) { SI4432_step_delay = 350; SI4432_offset_delay = 200; } - else if (actual_rbw_x10 >= 750) { SI4432_step_delay = 450; SI4432_offset_delay = 200; } - else if (actual_rbw_x10 >= 560) { SI4432_step_delay = 650; SI4432_offset_delay = 200; } - else if (actual_rbw_x10 >= 370) { SI4432_step_delay = 700; SI4432_offset_delay = 200; } - else if (actual_rbw_x10 >= 180) { SI4432_step_delay = 1100; SI4432_offset_delay = 250; } + if (actual_rbw_x10 >= 1910) { SI4432_step_delay = 280; SI4432_offset_delay = 100; } + else if (actual_rbw_x10 >= 1420) { SI4432_step_delay = 350; SI4432_offset_delay = 100; } + else if (actual_rbw_x10 >= 750) { SI4432_step_delay = 450; SI4432_offset_delay = 100; } + else if (actual_rbw_x10 >= 560) { SI4432_step_delay = 650; SI4432_offset_delay = 100; } + else if (actual_rbw_x10 >= 370) { SI4432_step_delay = 700; SI4432_offset_delay = 100; } + else if (actual_rbw_x10 >= 180) { SI4432_step_delay = 1100; SI4432_offset_delay = 200; } else if (actual_rbw_x10 >= 90) { SI4432_step_delay = 1700; SI4432_offset_delay = 400; } - else if (actual_rbw_x10 >= 50) { SI4432_step_delay = 3300; SI4432_offset_delay = 800; } + else if (actual_rbw_x10 >= 50) { SI4432_step_delay = 3300; SI4432_offset_delay = 400; } else { SI4432_step_delay = 6400; SI4432_offset_delay =1600; } if (setting.step_delay_mode == SD_PRECISE) // In precise mode wait twice as long for RSSI to stabalize SI4432_step_delay *= 2; @@ -2798,7 +2800,7 @@ common_silent: } extern void menu_autosettings_cb(int item); -extern float SI4432_force_RBW(int i); + int last_spur = 0; int add_spur(int f) @@ -2949,10 +2951,13 @@ do_again: setting.step_delay_mode = SD_NORMAL; setting.step_delay = setting.step_delay * 5 / 4; setting.rbw_x10 = SI4432_force_RBW(j); - shell_printf("RBW = %d, ",setting.rbw_x10/10); - set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 20000)); + shell_printf("RBW = %f, ",setting.rbw_x10/10.0); + if (setting.rbw_x10 < 1000) + set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 5000)); + else + set_sweep_frequency(ST_SPAN, (uint32_t)(18000000)); - setting.repeat = 10; +// setting.repeat = 10; test_acquire(i); // Acquire test test_validate(i); // Validate test if (test_value == 0) { @@ -2965,17 +2970,19 @@ do_again: // shell_printf("Peak level too low, abort\n\r"); // return; // } -#if 0 +#if 1 shell_printf("Start level = %f, ",peakLevel); while (setting.step_delay > 10 && test_value != 0 && test_value > saved_peakLevel - 0.5) { test_prepare(i); setting.spur = 0; setting.step_delay_mode = SD_NORMAL; setting.step_delay = setting.step_delay * 4 / 5; - // shell_printf("\n\rRBW = %f",SI4432_force_RBW(j)); - set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 5000)); + if (setting.rbw_x10 < 1000) + set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 5000)); + else + set_sweep_frequency(ST_SPAN, (uint32_t)(18000000)); - setting.repeat = 10; +// setting.repeat = 10; test_acquire(i); // Acquire test test_validate(i); // Validate test // shell_printf(" Step %f, %d",peakLevel, setting.step_delay); @@ -2994,9 +3001,11 @@ do_again: setting.step_delay_mode = SD_FAST; setting.offset_delay /= 2; setting.spur = 0; - // shell_printf("\n\rRBW = %f",SI4432_force_RBW(j)); - set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 20000)); // 200 times RBW - setting.repeat = 10; + if (setting.rbw_x10 < 1000) + set_sweep_frequency(ST_SPAN, (uint32_t)(setting.rbw_x10 * 5000)); // 50 times RBW + else + set_sweep_frequency(ST_SPAN, (uint32_t)(18000000)); // Limit to 18MHz +// setting.repeat = 10; test_acquire(i); // Acquire test test_validate(i); // Validate test // shell_printf(" Step %f, %d",peakLevel, setting.step_delay);