From 81159cdd07fdf14c9e855878883a6e93b7fc8852 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Thu, 23 Jun 2022 14:14:57 +0200 Subject: [PATCH] input path control added --- main.c | 48 ++++++++++++++++++++++-------------------------- nanovna.h | 8 +++++--- sa_cmd.c | 12 ++++++++---- sa_core.c | 40 ++++++++++++++++++++++++++-------------- 4 files changed, 61 insertions(+), 47 deletions(-) diff --git a/main.c b/main.c index 9af1424..a3a4377 100644 --- a/main.c +++ b/main.c @@ -987,41 +987,37 @@ config_t config = { .drive1_level_offset = 0, .drive2_level_offset = -1.5, .drive3_level_offset = -0.5, + .direct_level_offset = 100.0, // Uncalibrated + .ultra_level_offset = 100.0, // Uncalibrated .correction_frequency = { - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low in - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low lna - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra in - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra lna +/* low */ { 10000, 40000, 90000, 110000, 150000, 280000, 550000, 1000000, 5000000, 30000000, 100000000, 200000000, 360000000, 500000000, 625000000, 675000000, 729000000, 750000000, 800000000, 800000000}, +/* low lna */ { 10000, 20000, 50000, 90000, 230000, 360000, 670000, 800000, 1000000, 7000000, 30000000, 43000000, 90000000, 300000000, 525000000, 640000000, 750000000, 770000000, 785000000, 780000000}, +/* ultra */ { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra in +/* ultra LNA*/ { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra lna #ifdef DIRECT_CORRECTION - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra in - { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra lna +/* direct */ { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra in +/* direct LNA*/ { 10000, 100000, 1000000, 5000000, 15000000, 30000000, 145000000, 400000000, 720000000, 800000000, 800000001, 1519000000, 1527000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 }, // low ultra lna #endif - { 10000, 50000, 80000, 150000, 300000, 1000000, 5000000, 30000000, 100000000, 180000000, 650000000, 700000000, 760000000, 780000000, 790000000, 800000000, 800000000, 800000000, 800000000, 800000000}, // low out +/* out */ {10000, 30000, 70000, 100000, 300000, 500000, 800000, 2000000, 5000000, 8000000, 30000000, 90000000, 140000000, 370000000, 630000000, 750000000, 790000000, 810000000, 820000000, 830000000}, +/* direct */ { 500000000, 823000000, 830000000, 840000000, 850000000, 860000000, 910000000, 920000000, 930000000, 970000000, 990000000, 1030000000, 1040000000, 1070000000, 1080000000, 1090000000, 1100000000, 1110000000, 1120000000, 1130000000}, +/* adf */ { 500000000, 700000000, 820000000, 840000000, 950000000, 1000000000, 1040000000, 1070000000, 1320000000, 1570000000, 1750000000, 2220000000, 2800000000, 2810000000, 3000000000, 3250000000, 3440000000, 3800000000, 4060000000, 4350000000}, +/* ultra */ { 500000000, 840000000, 1160000000, 1500000000, 1670000000, 2050000000, 2300000000, 2800000000, 2810000000, 3020000000, 3250000000, 3360000000, 3370000000, 3640000000, 3730000000, 4030000000, 4330000000, 4830000000, 5200000000, 5350000000}, }, .correction_value = { -#if 1 - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in +/* low */ { 14.16, 11.11, 9.33, 8.55, 7.26, 5.47, 2.8, 1.53, 0.25, 0, -0.46, 0.61, 1.54, 1.43, 0.91, 2, 2.03, 2.6, 5.08, 5.08}, +/* low lna */ { 13.78, 11.68, 9.74, 8.64, 6.03, 6.13, 1.99, 1.29, 1.15, 0.46, 0, 0.33, -0.29, 1.31, 0.88, 1.33, 2.13, 2.79, 3.74, 4.96}, +/* ultra */ { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in +/* ultra LNA*/ { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in #ifdef DIRECT_CORRECTION - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in -#endif -#else - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +9.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // low in - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +9.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // lna in - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +3.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // low ultra in - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +3.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // lna ultra in -#ifdef DIRECT_CORRECTION - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +9.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // low in - { 10.5, +3, +1 , -0.1, 0, 0, +1.1, +1.5, +1.8, +9.7, +3.8, +3.5, +4, +8, +10.5, +13, +17.5, +20, +24, +28,}, // lna in -#endif +/* direct */ { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in +/* direct LNA*/ { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low in #endif - { 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // low out -// { 11.5, 7, 6, 3.5, 1.5, 0.5, -0.2, 0, 0, -0.5, +1.5, +2, +4, +6.5, +9, +13, +13, +13, +13, +13, }, // low out +/* out */ { 8.5, 6.04, 3.55, 2.42, -0.04, -1.06, -1.46, -2.16, -2.71, -2.56, -3.08, -3.47, -3.15, -1.03, -1.75, -0.21, 1.53, 3.81, 5.69, 9.4}, +/* direct */ { -6.71, -2.48, -2.46, -2.2, -2.24, -1.96, -1.37, -1.41, -1.14, -0.55, -0.5, 0.11, 0.06, 0.69, 0.64, 0.71, 0.96, 0.93, 1.35, 1.52}, +/* adf */ { -1, -5.25, -8.11, -8.35, -8.1, -8.91, -10.3, -10.05, -5.19, -2.69, -2.31, -2.68, -1.31, -2.36, -2.93, -1.94, -0.37, 4.33, 7.17, 9.02}, +/* ultra */ { -1.92, -1.89, -0.81, 1.16, 0.99, -0.34, 0.29, 3.33, 2.26, 3.08, 4.99, 6.75, 4.87, 6.12, 6.1, 5.3, 5.21, 8.3, 9.25, 10.85}, }, .setting_frequency_30mhz = 30000000ULL * FREQ_MULTIPLIER, .cor_am = 0, diff --git a/nanovna.h b/nanovna.h index 43569c2..b8e76a0 100644 --- a/nanovna.h +++ b/nanovna.h @@ -18,7 +18,7 @@ */ #include "ch.h" -#ifdef TINYSA_F303 +//#ifdef TINYSA_F303 #ifdef TINYSA_F072 #error "Remove comment for #ifdef TINYSA_F303" #endif @@ -26,7 +26,7 @@ #define TINYSA4 #endif #define TINYSA4_PROTO -#endif +//#endif #ifdef TINYSA_F072 #ifdef TINYSA_F303 @@ -346,12 +346,12 @@ extern float *drive_dBm; extern bool level_error; #else extern const int8_t drive_dBm []; +#endif extern int test_output; extern int test_output_switch; extern int test_output_drive; extern int test_output_attenuate; extern int test_path; -#endif extern uint8_t signal_is_AM; extern const uint32_t reffer_freq[]; extern freq_t minFreq; @@ -731,6 +731,8 @@ typedef struct config { float drive1_level_offset; float drive2_level_offset; float drive3_level_offset; + float direct_level_offset; + float ultra_level_offset; #endif #ifdef __NOISE_FIGURE__ float noise_figure; diff --git a/sa_cmd.c b/sa_cmd.c index bab2188..e24b21d 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -353,7 +353,7 @@ VNA_SHELL_FUNCTION(cmd_leveloffset) { // 0 1 2 #ifdef TINYSA4 - static const char cmd_mode_list[] = "low|high|switch|receive_switch|out_switch|lna|harmonic|shift1|shift2|drive1|drive2|drive3"; + static const char cmd_mode_list[] = "low|high|switch|receive_switch|out_switch|lna|harmonic|shift1|shift2|drive1|drive2|drive3|direct|ultra"; #else static const char cmd_mode_list[] = "low|high|switch|receive_switch"; #endif @@ -374,6 +374,8 @@ VNA_SHELL_FUNCTION(cmd_leveloffset) shell_printf(p, "drive1", config.drive1_level_offset); shell_printf(p, "drive2", config.drive2_level_offset); shell_printf(p, "drive3", config.drive3_level_offset); + shell_printf(p, "direct", config.direct_level_offset); + shell_printf(p, "ultra", config.ultra_level_offset); #endif return; } @@ -399,6 +401,8 @@ VNA_SHELL_FUNCTION(cmd_leveloffset) case 9: config.drive1_level_offset = v; break; case 10: config.drive2_level_offset = v; break; case 11: config.drive3_level_offset = v; break; + case 12: config.direct_level_offset = v; break; + case 13: config.ultra_level_offset = v; break; #endif default: goto usage; } @@ -1028,9 +1032,9 @@ VNA_SHELL_FUNCTION(cmd_correction) (void)argc; #ifdef TINYSA4 #ifdef DIRECT_CORRECTION - static const char cmd[] = "low|lna|ultra|ultra_lna|direct|direct_lna|out|out_direct|out_adf|out_ultra|high|off|on"; + static const char cmd[] = "low|lna|ultra|ultra_lna|direct|direct_lna|out|out_direct|out_ultra|out_adf|high|off|on"; #else - static const char cmd[] = "low|lna|ultra|ultra_lna|out|out_direct|out_adf|out_ultra|high|off|on"; + static const char cmd[] = "low|lna|ultra|ultra_lna|out|out_direct|out_ultra|out_adf|high|off|on"; #endif static const char range[] = "0-19"; #else @@ -1154,7 +1158,7 @@ VNA_SHELL_FUNCTION(cmd_caloutput) set_refer_output(m - 1); } -#if 0 +#ifdef TINYSA4 VNA_SHELL_FUNCTION(cmd_q) { if (argc < 1) { diff --git a/sa_core.c b/sa_core.c index dd32d9e..5f3a513 100644 --- a/sa_core.c +++ b/sa_core.c @@ -145,8 +145,8 @@ int max_drive = 18; #define MAX_ATTENUATE 31.5 #endif -// 0 1 2 3 4 5 -enum {PATH_OFF, PATH_LOW, PATH_DIRECT, PATH_ULTRA, PATH_LEAKAGE, PATH_HIGH}; +// 0 1 2 3 4 5 +enum {PATH_OFF, PATH_LOW, PATH_DIRECT, PATH_LEAKAGE, PATH_ULTRA, PATH_HIGH}; int signal_path = PATH_OFF; #ifdef TINYSA4 @@ -350,10 +350,17 @@ void set_output_path(freq_t f, float level) } +static void calculate_static_correction(void); void set_input_path(freq_t f) { - if (test_output) - signal_path = test_path; + if (test_output) { + setting.extra_lna = test_path & 0x01; + switch ((test_path & 0xFE)>>1) { + case 0: signal_path = PATH_LOW; break; + case 1: signal_path = PATH_ULTRA; break; + case 2: signal_path = PATH_DIRECT; break; + } + } else if (MODE_HIGH(setting.mode)) signal_path = PATH_HIGH; else if(config.ultra && ((config.ultra_start == ULTRA_AUTO && f > 700) || (config.ultra_start != ULTRA_AUTO && f >config.ultra_start))) @@ -372,14 +379,15 @@ void set_input_path(freq_t f) switch(signal_path) { case PATH_LOW: enable_ultra(false); - enable_high(false); enable_direct(false); + enable_high(false); goto common; case PATH_DIRECT: - enable_ADF_output(false, false); - enable_ultra(!setting.atten_step); + enable_ultra(true); + enable_direct(true); enable_high(true); + enable_ADF_output(false, false); goto common2; case PATH_ULTRA: enable_ultra(true); @@ -392,6 +400,8 @@ void set_input_path(freq_t f) SI4463_init_rx(); break; } + if (test_output) + calculate_static_correction(); } #endif @@ -1448,18 +1458,20 @@ float get_level_offset(void) return(config.high_level_offset); } if (setting.mode == M_LOW) { + int lev; #ifdef TINYSA4 if (setting.extra_lna) { - if (config.lna_level_offset == 100) - return 0; - return(config.lna_level_offset); + lev = config.lna_level_offset; + } else if (signal_path == PATH_DIRECT) { + lev = config.direct_level_offset; + } else if (signal_path == PATH_ULTRA) { + lev = config.ultra_level_offset; } else #endif { - if (config.low_level_offset == 100) - return 0; - return(config.low_level_offset); + lev = config.low_level_offset; } + return(lev == 100? 0 : lev); } if (setting.mode == M_GENLOW) { return(LOW_OUT_OFFSET); @@ -3408,8 +3420,8 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) / if (SDU1.config->usbp->state == USB_ACTIVE) shell_printf ("level=%f, d=%d, a=%d, s=%d\r\n", setting.level, d, setting.attenuate_x2, (setting.atten_step ? 1 : 0)); #endif + } #endif - } } else if (setting.mode == M_GENHIGH) { #ifdef TINYSA4