diff --git a/main.c b/main.c index 841db03..003d0f9 100644 --- a/main.c +++ b/main.c @@ -1059,6 +1059,7 @@ config_t config = { #endif .sweep_voltage = 3.3, .switch_offset = 0.0, + .receive_switch_offset = 0.0, }; //properties_t current_props; diff --git a/nanovna.h b/nanovna.h index f92dcd0..e656098 100644 --- a/nanovna.h +++ b/nanovna.h @@ -18,7 +18,7 @@ */ #include "ch.h" -#ifdef TINYSA_F303 +//#ifdef TINYSA_F303 #include "adc_F303.h" #ifdef TINYSA_F072 #error "Remove comment for #ifdef TINYSA_F303" @@ -27,7 +27,7 @@ #define TINYSA4 #endif #define TINYSA4_PROTO -#endif +//#endif #ifdef TINYSA_F072 #ifdef TINYSA_F303 @@ -670,6 +670,7 @@ typedef struct config { float high_level_output_offset; #ifdef TINYSA4 float lna_level_offset; + float receive_switch_offset; float harmonic_level_offset; float shift_level_offset; #endif diff --git a/sa_core.c b/sa_core.c index 60788d5..f311681 100644 --- a/sa_core.c +++ b/sa_core.c @@ -88,7 +88,7 @@ const int8_t drive_dBm [16] = {-38, -32, -30, -27, -24, -19, -15, -12, -5, -2, 0 #ifdef TINYSA4 #define SWITCH_ATTENUATION ((setting.mode == M_GENHIGH && config.high_out_adf4350) ? 40 : 35.8 - config.switch_offset) -#define RECEIVE_SWITCH_ATTENUATION 21 +#define RECEIVE_SWITCH_ATTENUATION (38 - config.receive_switch_offset) //#define POWER_OFFSET -18 // Max level with all enabled //#define POWER_RANGE 70 #define MAX_DRIVE ((setting.mode == M_GENHIGH && config.high_out_adf4350 ) ? 3 : 18) @@ -656,8 +656,11 @@ void set_R(int f) dirty = true; } +uint32_t local_modulo = 0; + void set_modulo(uint32_t f) { + local_modulo = f; ADF4351_modulo(f); clear_frequency_cache(); dirty = true; @@ -1877,7 +1880,6 @@ case M_LOW: // Mixed into 0 // set_calibration_freq(setting.refer); #endif #ifdef TINYSA4 - enable_rx_output(false); enable_high(false); enable_extra_lna(setting.extra_lna); enable_ultra(false); @@ -3157,12 +3159,15 @@ again: // Spur redu #define TXCO_DIV3 10000000 if (setting.R == 0) { +#if 0 if (actual_rbw_x10 >= 3000) { - if (ADF4350_modulo == 0) ADF4351_modulo(1000); + if (local_modulo == 0) ADF4351_modulo(1000); ADF4351_R_counter(1); - } else if (lf < LOW_MAX_FREQ && lf >= TXCO_DIV3 && MODE_INPUT(setting.mode)) { - if (ADF4350_modulo == 0) { + } else +#endif + if (lf < 1000000000 /* && lf >= TXCO_DIV3 */ && MODE_INPUT(setting.mode)) { + if (local_modulo == 0) { if (actual_rbw_x10 >= 3000) ADF4351_modulo(1000); else @@ -3182,7 +3187,7 @@ again: // Spur redu ADF4351_R_counter(1); } } else { - if (ADF4350_modulo == 0) { + if (local_modulo == 0) { if (actual_rbw_x10 >= 3000) ADF4351_modulo(1000); else @@ -3470,12 +3475,12 @@ again: // Spur redu my_step_delay = my_step_delay * 2; // if (LO_shifted) // || SI4463_offset_changed) // my_step_delay = my_step_delay * 2; - if (actual_rbw_x10 >= 1000 && SI4463_frequency_changed && ADF4351_frequency_changed) { + if (old_R < 4 && actual_rbw_x10 >= 1000 && SI4463_frequency_changed && ADF4351_frequency_changed) { my_step_delay -= 200; // compensate for additional delay of setting SI4463 if (my_step_delay < 0) my_step_delay = 0; } - my_microsecond_delay(my_step_delay * ((setting.R == 0 && old_R > 5 ) ? 8 : 1)); + my_microsecond_delay(my_step_delay * (old_R > 5 ? 8 : 1)); ADF4351_frequency_changed = false; SI4463_frequency_changed = false; SI4463_offset_changed = false;