diff --git a/main.c b/main.c index 22fd8e6..a4742f5 100644 --- a/main.c +++ b/main.c @@ -2442,7 +2442,7 @@ THD_FUNCTION(myshellThread, p) #pragma GCC pop_options static const GPTConfig gpt4cfg = { - 1000000, // 1 MHz timer clock. + 8000000, // 8 MHz timer clock. NULL, // No callback 0, 0 }; @@ -2450,9 +2450,18 @@ static const GPTConfig gpt4cfg = { void my_microsecond_delay(int t) { #ifdef TINYSA4 - if (t>1) gptPolledDelay(&GPTD4, t); // t us delay + if (t>1) gptPolledDelay(&GPTD4, t<<3); // t us delay #else - if (t>1) gptPolledDelay(&GPTD14, t); // t us delay + if (t>1) gptPolledDelay(&GPTD14, t<<3); // t us delay +#endif +} + +void my_veryfast_delay(int t) // In 8MHz ticks +{ +#ifdef TINYSA4 + if (t>0) gptPolledDelay(&GPTD4, t); +#else + if (t>0) gptPolledDelay(&GPTD14, t); #endif } @@ -2480,10 +2489,10 @@ int main(void) */ #ifdef TINYSA4 gptStart(&GPTD4, &gpt4cfg); - gptPolledDelay(&GPTD4, 10); // 10 us delay + gptPolledDelay(&GPTD4, 80); // 10 us delay #else gptStart(&GPTD14, &gpt4cfg); - gptPolledDelay(&GPTD14, 10); // 10 us delay + gptPolledDelay(&GPTD14, 80); // 10 us delay #endif PULSE @@ -2588,10 +2597,10 @@ int main(void) */ #ifdef TINYSA4 gptStart(&GPTD4, &gpt4cfg); - gptPolledDelay(&GPTD4, 10); // 10 us delay + gptPolledDelay(&GPTD4, 80); // 10 us delay #else gptStart(&GPTD14, &gpt4cfg); - gptPolledDelay(&GPTD14, 10); // 10 us delay + gptPolledDelay(&GPTD14, 80); // 10 us delay #endif /* restore config */ diff --git a/nanovna.h b/nanovna.h index ed8cc0c..16483af 100644 --- a/nanovna.h +++ b/nanovna.h @@ -243,6 +243,7 @@ void update_frequencies(void); void set_sweep_frequency(int type, freq_t frequency); freq_t get_sweep_frequency(int type); void my_microsecond_delay(int t); +void my_veryfast_delay(int t); float my_atof(const char *p); freq_t my_atoui(const char *p); int shell_printf(const char *fmt, ...); @@ -720,6 +721,7 @@ typedef struct config { uint32_t _serial_speed; uint16_t dac_value; uint16_t vbat_offset; + int16_t cor_am; float low_level_offset; float high_level_offset; float low_level_output_offset; @@ -765,7 +767,6 @@ typedef struct config { #endif uint8_t is_calibrated; uint8_t _mode; - int8_t cor_am; int8_t cor_wfm; int8_t cor_nfm; #ifdef TINYSA4 diff --git a/sa_core.c b/sa_core.c index 535b65b..d241e47 100644 --- a/sa_core.c +++ b/sa_core.c @@ -3377,9 +3377,9 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / #ifdef TINYSA4 // Calculate FM modulation if (setting.modulation == MO_AM) { int sinus_index = 1; - config.cor_am = -18; // Initialize with some spare + config.cor_am = -180; // Initialize with some spare modulation_steps = MAX_MODULATION_STEPS; // Search modulation steps that fit frequency - while ( (modulation_delay = (1000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) { + while ( (modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) { sinus_index <<= 1; modulation_steps >>= 1; } @@ -3391,17 +3391,17 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / fm_modulation[modulation_steps - i] = fm_modulation[modulation_steps/2 + i]; } for (int i=0; i < modulation_steps; i++) { - fm_modulation[i] = 10.0*logf(fm_modulation[i]*fm_modulation[i]/(694.0*694.0)); + fm_modulation[i] = roundf(10.0*logf(fm_modulation[i]*fm_modulation[i]/(694.0*694.0))); if (fm_modulation[i] < -63) fm_modulation[i] = -63; } } if (setting.modulation == MO_WFM) { int sinus_index = 1; - config.cor_am = -18; // Initialize with some spare + config.cor_am = -180; // Initialize with some spare modulation_steps = MAX_MODULATION_STEPS; // Search modulation steps that fit frequency //modulation_steps = 8; // <-----------------TEMP!!!!! - while ( (modulation_delay = (1000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) { + while ( (modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency + config.cor_am) < 20 && modulation_steps > 4) { sinus_index <<= 1; modulation_steps >>= 1; } @@ -3638,13 +3638,13 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / // modulation_delay = 0; // } else if (setting.modulation == MO_AM) { // -14 default - modulation_delay = (1000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 1MHz/8 + modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 8MHz/8 modulation_delay += config.cor_am; #ifdef TINYSA4 // modulation_steps = 8; #endif } else { // Must be FM - modulation_delay = (1000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 1MHz/8 + modulation_delay = (8000000/ modulation_steps ) / setting.modulation_frequency; // 8 steps so 8MHz/8 #ifdef TINYSA4 switch(setting.modulation){ case MO_NFM: @@ -3713,23 +3713,23 @@ modulation_again: if (modulation_counter >= modulation_steps) { modulation_counter = 0; cycle_counter++; - if (config.cor_am == -18) { + if (config.cor_am == -180) { if (chVTGetSystemTimeX() - start_of_sweep_timestamp > 1000) { // 100 ms, System tick 10000 per second start_of_sweep_timestamp = chVTGetSystemTimeX(); modulation_delay -= config.cor_am; - int actual_delay = 100000 / cycle_counter / modulation_steps; // In units of 1 microsecond + int actual_delay = 800000 / cycle_counter / modulation_steps; // In units of 1/8 microsecond config.cor_am += modulation_delay - actual_delay; if (config.cor_am >0) config.cor_am = 0; modulation_delay += config.cor_am; cycle_counter = 0; } - my_microsecond_delay(modulation_delay); + my_veryfast_delay(modulation_delay); } else - my_microsecond_delay(modulation_delay); + my_veryfast_delay(modulation_delay); } else - my_microsecond_delay(modulation_delay); + my_veryfast_delay(modulation_delay); } // -------------------------------- Acquisition loop for one requested frequency covering spur avoidance and vbwsteps ------------------------ pureRSSI_t RSSI = float_TO_PURE_RSSI(-150);