From 879ae21538764837a5b6d3ab2da1fd8985b4e9b9 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Sat, 13 Jun 2020 11:35:03 +0200 Subject: [PATCH] zero span auto reflevel and display trigger level after setting --- main.c | 4 +++- nanovna.h | 1 + sa_core.c | 24 +++++++++++++++--------- si4432.c | 36 +++++++++++++++++++++++------------- ui_sa.c | 6 +++++- 5 files changed, 47 insertions(+), 24 deletions(-) diff --git a/main.c b/main.c index 03de758..9427a12 100644 --- a/main.c +++ b/main.c @@ -121,13 +121,15 @@ const char *info_about[]={ 0 // sentinel }; extern int dirty; + +bool completed = false; + static THD_WORKING_AREA(waThread1, 900); static THD_FUNCTION(Thread1, arg) { (void)arg; chRegSetThreadName("sweep"); - bool completed = false; ui_process(); while (1) { diff --git a/nanovna.h b/nanovna.h index 46bcee6..f68e254 100644 --- a/nanovna.h +++ b/nanovna.h @@ -158,6 +158,7 @@ enum { #define SWEEP_REMOTE 0x10 extern int8_t sweep_mode; +extern bool completed; extern const char *info_about[]; // ------------------------------- sa_core.c ---------------------------------- diff --git a/sa_core.c b/sa_core.c index 4cfee58..5a4743c 100644 --- a/sa_core.c +++ b/sa_core.c @@ -126,7 +126,7 @@ float calc_min_sweep_time(void) // Calculate minimum sweep time in mS float t; float a = (actualStepDelay + MEASURE_TIME)/1000.0; // in mS if (MODE_OUTPUT(setting.mode)) - t = 1000; + t = 100; else { if (FREQ_IS_CW()) a = (float)MINIMUM_SWEEP_TIME / 290.0; // time per step in CW mode @@ -601,8 +601,8 @@ void set_reflevel(float level) set_trace_refpos(0, /* NGRIDY - */ level /* / get_trace_scale(0) */); set_trace_refpos(1, /* NGRIDY - */ level /* / get_trace_scale(0) */ ); set_trace_refpos(2, /* NGRIDY - */ level /* / get_trace_scale(0) */ ); - - dirty = true; + redraw_request |= REDRAW_AREA | REDRAW_CAL_STATUS; +// dirty = true; } void round_reflevel_to_scale(void) { @@ -674,6 +674,7 @@ void set_scale(float t) { } #endif // set_reflevel(setting.reflevel); + redraw_request |= REDRAW_AREA | REDRAW_CAL_STATUS; } @@ -1456,7 +1457,7 @@ again: float t = setting.sweep_time - calc_min_sweep_time(); // Time to delay in mS if (t < 0) t = 0; - t = t * 1000 / 290.0; + t = t * 1000 / 290.0; // Now in uS per point if (MODE_OUTPUT(setting.mode) && t < 500) // Minimum wait time to prevent LO from lockup t = 500; while (repeats--) { @@ -1479,7 +1480,8 @@ again: if (MODE_INPUT(setting.mode)) { - temp_t[i] = RSSI; + if (setting.average != AV_OFF) + temp_t[i] = RSSI; if (setting.subtract_stored) { RSSI = RSSI - stored_t[i] ; } @@ -1597,7 +1599,8 @@ again: } if (old_attenuate != setting.attenuate) { redraw_request |= REDRAW_CAL_STATUS; - dirty = true; // Must be above if(scandirty!!!!!) + PE4302_Write_Byte(setting.attenuate * 2); + // dirty = true; // Must be above if(scandirty!!!!!) } } if (max_index[0] > 0) @@ -1625,6 +1628,8 @@ again: //if (setting.scale * NGRIDY > r) set_scale(r / NGRIDY); set_reflevel(setting.scale*NGRIDY); + dirty = false; // Prevent reset of SI4432 + redraw_request |= REDRAW_CAL_STATUS; } } } else { @@ -1633,16 +1638,17 @@ again: if (s_r < s_ref - NGRIDY || s_min > s_ref) { //Completely outside set_reflevel(setting.scale*(floor(s_r)+1)); redraw_request |= REDRAW_CAL_STATUS; - dirty = true; // Must be above if(scandirty!!!!!) +// dirty = true; // Must be above if(scandirty!!!!!) }else if (s_r > s_ref - 0.5 || s_min > s_ref - 8.8 ) { // maximum to high or minimum to high set_reflevel(setting.reflevel + setting.scale); redraw_request |= REDRAW_CAL_STATUS; - dirty = true; // Must be above if(scandirty!!!!!) +// dirty = true; // Must be above if(scandirty!!!!!) } else if (s_min < s_ref - 10.1 && s_r < s_ref - 1.5) { // minimum to low and maximum can move up set_reflevel(setting.reflevel - setting.scale); redraw_request |= REDRAW_CAL_STATUS; - dirty = true; // Must be above if(scandirty!!!!!) +// dirty = true; // Must be above if(scandirty!!!!!) } + dirty = false; // Prevent reset of SI4432 } } #if 1 diff --git a/si4432.c b/si4432.c index a2037a2..ad97347 100644 --- a/si4432.c +++ b/si4432.c @@ -287,6 +287,8 @@ void set_10mhz(int f) setting_frequency_10mhz = f; } +int SI4432_frequency_changed = false; + void SI4432_Set_Frequency ( long Freq ) { int hbsel; long Carrier; @@ -307,6 +309,7 @@ void SI4432_Set_Frequency ( long Freq ) { #else SI4432_Write_3_Byte ( 0x75, Freq_Band, (Carrier>>8) & 0xFF, Carrier & 0xFF ); #endif + SI4432_frequency_changed = true; } int actualStepDelay = 1500; @@ -324,21 +327,28 @@ float SI4432_RSSI(uint32_t i, int s) } else #endif //START_PROFILE - SI4432_Sel = s; - if (actualStepDelay) - my_microsecond_delay(actualStepDelay); + SI4432_Sel = s; + int stepdelay = actualStepDelay; + if (SI4432_frequency_changed) { + if (stepdelay < 280) { + stepdelay = 280; + } + SI4432_frequency_changed = false; + } + if (stepdelay) + my_microsecond_delay(stepdelay); // chThdSleepMicroseconds(actualStepDelay); - i = setting.repeat; - RSSI_RAW = 0; + i = setting.repeat; + RSSI_RAW = 0; again: - RSSI_RAW += ((unsigned int)SI4432_Read_Byte( 0x26 )) << 4 ; - i--; - if (i > 0) { - my_microsecond_delay(100); - goto again; - } - if (setting.repeat > 1) - RSSI_RAW = RSSI_RAW / setting.repeat; + RSSI_RAW += ((unsigned int)SI4432_Read_Byte( 0x26 )) << 4 ; + i--; + if (i > 0) { + my_microsecond_delay(100); + goto again; + } + if (setting.repeat > 1) + RSSI_RAW = RSSI_RAW / setting.repeat; // if (MODE_INPUT(setting.mode) && RSSI_RAW == 0) // SI4432_Init(); float dBm = ((float)RSSI_RAW)/32.0 + SI4432_RSSI_correction; diff --git a/ui_sa.c b/ui_sa.c index 2cee4f6..9dc7584 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -978,7 +978,8 @@ static void menu_trigger_cb(int item, uint8_t data) set_trigger(data); // menu_move_back(); ui_mode_normal(); - redraw_request |= REDRAW_CAL_STATUS; + redraw_request |= REDRAW_CAL_STATUS | REDRAW_AREA; + completed = true; } #if 0 @@ -1967,6 +1968,9 @@ set_numeric_value(void) if (setting.trigger == T_AUTO ) set_trigger(T_NORMAL); set_trigger_level(to_dBm(uistat.value)); + redraw_request |= REDRAW_CAL_STATUS | REDRAW_AREA; + completed = true; + break; } }