diff --git a/sa_core.c b/sa_core.c index 9828651..974ea4d 100644 --- a/sa_core.c +++ b/sa_core.c @@ -10,6 +10,7 @@ int setting_attenuate = 0; int setting_auto_attenuation; int setting_step_atten; int setting_rbw = 0; +int setting_below_IF; int setting_average = 0; int setting_show_stored = 0; int setting_subtract_stored = 0; @@ -67,6 +68,7 @@ void reset_settings(int m) setting_auto_reflevel = true; // Must be after SetReflevel setting_decay=20; setting_noise=5; + setting_below_IF = false; setting_tracking_output = false; trace[TRACE_STORED].enabled = false; trace[TRACE_TEMP].enabled = false; @@ -182,6 +184,11 @@ void toggle_tracking_output(void) setting_tracking_output = !setting_tracking_output; dirty = true; } +void toggle_below_IF(void) +{ + setting_below_IF = !setting_below_IF; + dirty = true; +} void SetModulation(int m) { @@ -494,10 +501,10 @@ void apply_settings(void) SI4432_SetReference(setting_refer); update_rbw(); if (setting_step_delay == 0){ - if (actual_rbw >142.0) actualStepDelay = 450; + if (actual_rbw > 90.0) actualStepDelay = 400; else if (actual_rbw > 75.0) actualStepDelay = 550; else if (actual_rbw > 56.0) actualStepDelay = 650; - else if (actual_rbw > 37.0) actualStepDelay = 800; + else if (actual_rbw > 37.0) actualStepDelay = 700; else if (actual_rbw > 18.0) actualStepDelay = 1100; else if (actual_rbw > 9.0) actualStepDelay = 2000; else if (actual_rbw > 5.0) actualStepDelay = 3500; @@ -974,11 +981,9 @@ again: setFreq (2, IF_2 + lf); setFreq (1, 433800000); #else -#ifdef BELOW_IF_BELOW_50MHZ - if (setting_mode == M_LOW && lf < 50000000) + if (setting_mode == M_LOW && !setting_tracking && setting_below_IF) setFreq (1, local_IF-lf); else -#endif setFreq (1, local_IF+lf); #endif } @@ -991,9 +996,9 @@ again: else #endif if (setting_mode == M_LOW) - signal_path_loss = -9.5; // Loss in dB, -9.5 for v0.1, -12.5 for v0.2 + signal_path_loss = -5.5; // Loss in dB, -9.5 for v0.1, -12.5 for v0.2 else - signal_path_loss = 7; // Loss in dB (+ is gain) + signal_path_loss = -3; // Loss in dB (+ is gain) float subRSSI = SI4432_RSSI(lf, MODE_SELECT(setting_mode))+settingLevelOffset()+ setting_attenuate - signal_path_loss; #ifdef __ULTRA__ if (setting_spur == 1) { // First pass @@ -1132,11 +1137,11 @@ static bool sweep(bool break_on_operation) draw_cal_status(); } if (!in_selftest && setting_mode == M_LOW && setting_auto_attenuation && max_index[0] > 0) { - if (actual_t[max_index[0]] - setting_attenuate < -32 && setting_attenuate >= 10) { + if (actual_t[max_index[0]] - setting_attenuate < - 3*setting_scale && setting_attenuate >= setting_scale) { setting_attenuate -= setting_scale; redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) - } else if (actual_t[max_index[0]] - setting_attenuate > -18 && setting_attenuate <= 20) { + } else if (actual_t[max_index[0]] - setting_attenuate > - 1.5*setting_scale && setting_attenuate <= 30 - setting_scale) { setting_attenuate += setting_scale; redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) @@ -1569,8 +1574,8 @@ static const struct { {TC_SIGNAL, TP_10MHZ_SWITCH,20, 7, -58, 30, -90 }, // 10 Switch isolation {TC_END, 0, 0, 0, 0, 0, 0}, {TC_MEASURE, TP_30MHZ, 30, 7, -22.5, 30, -70 }, // 12 Measure power level and noise - {TC_MEASURE, TP_30MHZ, 270, 4, -45, 30, -75 }, // 13 Measure powerlevel and noise - {TC_MEASURE, TPH_30MHZ, 270, 4, -45, 30, -65 }, // 14 Calibrate power high mode + {TC_MEASURE, TP_30MHZ, 270, 4, -50, 30, -75 }, // 13 Measure powerlevel and noise + {TC_MEASURE, TPH_30MHZ, 270, 4, -50, 30, -65 }, // 14 Calibrate power high mode {TC_END, 0, 0, 0, 0, 0, 0}, {TC_MEASURE, TP_30MHZ, 30, 1, -20, 30, -70 }, // 16 Measure RBW step time {TC_END, 0, 0, 0, 0, 0, 0}, @@ -1854,7 +1859,7 @@ void self_test(void) { #if 0 - in_selftest = true; + in_selftest = true; // Spur search reset_settings(M_LOW); test_prepare(4); int f; // Start search at 400kHz @@ -1898,18 +1903,26 @@ void self_test(void) return; -#elif 0 // RAttenuator test +#elif 0 // Attenuator test int local_test_status; in_selftest = true; reset_settings(M_LOW); - int i = 15; // calibrate low mode power on 30 MHz; + int i = 15; // calibrate attenuator at 30 MHz; + float reference_peak_level; test_prepare(i); for (int j= 0; j < 32; j++ ) { test_prepare(i); SetAttenuation(j); - test_acquire(i); // Acquire test - local_test_status = test_validate(i); // Validate test - shell_printf("Target %d, actual %f\n\r",j, peakLevel); + float summed_peak_level = 0; + for (int k=0; k<10; k++) { + test_acquire(i); // Acquire test + local_test_status = test_validate(i); // Validate test + summed_peak_level += peakLevel; + } + peakLevel = summed_peak_level / 10; + if (j == 0) + reference_peak_level = peakLevel; + shell_printf("Target %d, actual %f, delta %f\n\r",j, peakLevel, peakLevel - reference_peak_level); } return; #elif 0 @@ -1936,11 +1949,11 @@ void self_test(void) shell_printf("Start level = %f, ",peakLevel); while (setting_step_delay > 100 && peakLevel > saved_peakLevel - 1) { setting_step_delay = setting_step_delay * 3 / 4; -// test_prepare(i); -// shell_printf("RBW = %f\n\r",SI4432_force_RBW(j)); + test_prepare(i); +// shell_printf("\n\rRBW = %f",SI4432_force_RBW(j)); test_acquire(i); // Acquire test local_test_status = test_validate(i); // Validate test - // shell_printf("Step %f, %d",peakLevel, setting_step_delay); +// shell_printf(" Step %f, %d",peakLevel, setting_step_delay); } setting_step_delay = setting_step_delay * 4 / 3; shell_printf("End level = %f, step time = %d\n\r",peakLevel, setting_step_delay); diff --git a/ui_sa.c b/ui_sa.c index 1b77b8c..90362a5 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -9,6 +9,7 @@ void reset_settings(int); void SetPowerGrid(int); void SetRefLevel(int); void set_refer_output(int); +void toggle_below_IF(void); int get_refer_output(void); void SetAttenuation(int); int GetAttenuation(void); @@ -916,6 +917,9 @@ static void menu_settings2_cb(int item, uint8_t data) case 3: toggle_tracking_output(); break; + case 4: + toggle_below_IF(); + break; } draw_menu(); // draw_cal_status(); @@ -1185,6 +1189,7 @@ static const menuitem_t menu_settings2[] = { MT_CALLBACK, 0, "AGC", menu_settings2_cb}, { MT_CALLBACK, 1, "LNA", menu_settings2_cb}, { MT_CALLBACK, 2, "BPF", menu_settings2_cb}, + { MT_CALLBACK, 4, "\2BELOW\0IF", menu_settings2_cb}, { MT_KEYPAD, KM_DECAY,"\2HOLD\0TIME", NULL}, { MT_KEYPAD, KM_NOISE,"\2NOISE\0LEVEL", NULL}, { MT_KEYPAD, KM_10MHZ,"\00210MHZ\0ACTUAL", NULL},