From cafe2b7a477b75b52b1b16343dde81bb244cde62 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 14 Sep 2020 15:51:47 +0200 Subject: [PATCH] Added 3 measurements --- nanovna.h | 2 +- sa_core.c | 16 +++++++++++++++- ui_sa.c | 43 +++++++++++++++++++++++++++++++++++++------ 3 files changed, 53 insertions(+), 8 deletions(-) diff --git a/nanovna.h b/nanovna.h index 8205cd3..2cd6787 100644 --- a/nanovna.h +++ b/nanovna.h @@ -959,7 +959,7 @@ uint32_t calc_min_sweep_time_us(void); pureRSSI_t perform(bool b, int i, uint32_t f, int e); enum { - M_OFF, M_IMD, M_OIP3, M_PHASE_NOISE, M_STOP_BAND, M_PASS_BAND, M_LINEARITY + M_OFF, M_IMD, M_OIP3, M_PHASE_NOISE, M_STOP_BAND, M_PASS_BAND, M_LINEARITY, M_AM, M_FM }; enum { diff --git a/sa_core.c b/sa_core.c index 92af0be..9c079a3 100644 --- a/sa_core.c +++ b/sa_core.c @@ -17,7 +17,7 @@ */ #ifdef __SI4432__ -#include "SI4432.h" // comment out for simulation +#include "si4432.h" // comment out for simulation #endif #include "stdlib.h" @@ -2317,6 +2317,20 @@ sweep_again: // stay in sweep loop when output mo t ++; if (t < setting._sweep_points - 1 ) markers[2].index = t; + } else if (setting.measurement == M_AM) { // ----------------AM measurement + if (S_IS_AUTO(setting.agc )) { + if (actual_t[max_index[0]] - get_attenuation() > -20 ) { + setting.agc = S_AUTO_OFF; + setting.lna = S_AUTO_OFF; + } else if (actual_t[max_index[0]] - get_attenuation() < -45 ) { + setting.agc = S_AUTO_ON; + setting.lna = S_AUTO_ON; + } else { + setting.agc = S_AUTO_OFF; + setting.lna = S_AUTO_ON; + } + set_AGC_LNA(); + } } #endif diff --git a/ui_sa.c b/ui_sa.c index 86a64e0..280f003 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -834,6 +834,35 @@ static UI_FUNCTION_ADV_CALLBACK(menu_measure_acb) set_measurement(M_LINEARITY); ui_mode_normal(); break; + case M_AM: // OIP3 + reset_settings(setting.mode); + for (int i = 0; i< 3; i++) { + markers[i].enabled = M_ENABLED; + markers[i].mtype = M_DELTA | M_TRACKING; + } + markers[0].mtype = M_REFERENCE | M_TRACKING; + kp_help_text = "Frequency of signal"; + ui_mode_keypad(KM_CENTER); + ui_process_keypad(); + set_sweep_frequency(ST_SPAN, 100000); // 100kHz + set_measurement(M_AM); + break; + case M_FM: // OIP3 + reset_settings(setting.mode); + for (int i = 0; i< 3; i++) { + markers[i].enabled = M_ENABLED; + markers[i].mtype = M_DELTA | M_TRACKING; + } + markers[0].mtype = M_REFERENCE | M_TRACKING; + kp_help_text = "Frequency of signal"; + ui_mode_keypad(KM_CENTER); + ui_process_keypad(); + kp_help_text = "Frequency deviation"; + ui_mode_keypad(KM_SPAN); + ui_process_keypad(); + set_sweep_frequency(ST_SPAN, uistat.value*30); + set_measurement(M_FM); + break; } #endif // selection = -1; @@ -1572,13 +1601,15 @@ static const menuitem_t menu_settings[] = }; static const menuitem_t menu_measure[] = { - { MT_ADV_CALLBACK, M_OFF, "OFF", menu_measure_acb}, - { MT_ADV_CALLBACK, M_IMD, "HARMONIC", menu_measure_acb}, - { MT_ADV_CALLBACK, M_OIP3, "OIP3", menu_measure_acb}, - { MT_ADV_CALLBACK, M_PHASE_NOISE,"PHASE\nNOISE", menu_measure_acb}, -// { MT_ADV_CALLBACK, M_STOP_BAND, "STOP\nBAND", menu_measure_acb}, -// { MT_ADV_CALLBACK, M_PASS_BAND, "PASS\nBAND", menu_measure_acb}, + { MT_ADV_CALLBACK, M_OFF, "OFF", menu_measure_acb}, + { MT_ADV_CALLBACK, M_IMD, "HARMONIC", menu_measure_acb}, + { MT_ADV_CALLBACK, M_OIP3, "OIP3", menu_measure_acb}, + { MT_ADV_CALLBACK, M_PHASE_NOISE,"PHASE\nNOISE", menu_measure_acb}, + { MT_ADV_CALLBACK, M_STOP_BAND, "SNR", menu_measure_acb}, + { MT_ADV_CALLBACK, M_PASS_BAND, "-6dB\nWIDTH", menu_measure_acb}, // { MT_ADV_CALLBACK | MT_LOW, M_LINEARITY, "LINEAR", menu_measure_acb}, + { MT_ADV_CALLBACK, M_AM, "AM", menu_measure_acb}, + { MT_ADV_CALLBACK, M_FM, "FM", menu_measure_acb}, { MT_CANCEL, 0, S_LARROW" BACK", NULL }, { MT_NONE, 0, NULL, NULL } // sentinel };