From fa712b0536ab45896e3b962b790b6404e4dbd970 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Wed, 4 May 2022 18:00:09 +0200 Subject: [PATCH] Solved spur removal errors --- sa_cmd.c | 2 ++ sa_core.c | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/sa_cmd.c b/sa_cmd.c index 3439f07..31eec74 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -491,6 +491,8 @@ VNA_SHELL_FUNCTION(cmd_zero) #ifdef TINYSA4 VNA_SHELL_FUNCTION(cmd_direct) { + if (argc<1 || argc>2) + goto usage; if (argv[0][0] == '?') goto usage; freq_t value = 0; diff --git a/sa_core.c b/sa_core.c index 898134a..d9041de 100644 --- a/sa_core.c +++ b/sa_core.c @@ -3458,7 +3458,7 @@ again: // Spur redu #endif #ifdef __ULTRA__ if (S_IS_AUTO(setting.below_IF)) { - if ((freq_t)lf + (freq_t)local_IF> MAX_LO_FREQ && lf < ULTRA_MAX_FREQ) + if ((freq_t)lf + (freq_t)local_IF> MAX_LO_FREQ && lf <= ULTRA_MAX_FREQ) setting.below_IF = S_AUTO_ON; // Only way to reach this range. else setting.below_IF = S_AUTO_OFF; // default is above IF @@ -3467,7 +3467,9 @@ again: // Spur redu if (S_STATE(setting.spur_removal)){ // If in low input mode and spur reduction is on if (setting.below_IF == S_AUTO_OFF && // Auto and not yet in below IF #ifdef TINYSA4 - ( lf > ULTRA_MAX_FREQ || lf < local_IF/2 || ( lf + (uint64_t)local_IF< MAX_LO_FREQ && lf > MIN_BELOW_LO + local_IF) ) + ( lf > ULTRA_MAX_FREQ || // Harmonic mode + lf < 400000000 || // below 400MHz use below IF + ( lf + (uint64_t)local_IF< MAX_LO_FREQ && lf > 2 * local_IF + 10000000) ) #else #ifdef __ULTRA__ ( (lf > ULTRA_MAX_FREQ && (lf + local_IF) / setting.harmonic < MAX_LO_FREQ) || lf < local_IF - MIN_LO_FREQ || ( lf + (uint32_t)local_IF< MAX_LO_FREQ && lf > MIN_BELOW_LO + local_IF) ) @@ -3942,7 +3944,7 @@ again: // Spur redu #ifdef __SI4463__ if (i == 0 && setting.frequency_step == 0 && setting.trigger == T_AUTO && S_STATE(setting.spur_removal) == 0 && SI4432_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < 100*ONE_MS_TIME && setting.exp_aver == 1) { if (scandirty) - my_microsecond_delay(16000); // Extra time to avoid gap when filling SI4468 + my_microsecond_delay(20000); // Extra time to avoid gap when filling SI4468 SI446x_Fill(MODE_SELECT(setting.mode), -1); // First get_RSSI will fail } #endif