From a2081cc82cdd7e36c2c8a27e48b0f6b1bcff055a Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Wed, 27 Jul 2022 14:11:57 +0200 Subject: [PATCH] Increase modulation headroom and add warning --- sa_core.c | 15 +++++++++------ ui_sa.c | 9 ++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/sa_core.c b/sa_core.c index 5cf8c56..535b65b 100644 --- a/sa_core.c +++ b/sa_core.c @@ -275,7 +275,10 @@ void set_output_path(freq_t f, float level) d++; blw = BELOW_MAX_DRIVE(d); } - while (a + 28 < blw && d > LOWEST_LEVEL) { // reduce till it fits attenuator (31 - 3) + int ar = 28; + if (setting.modulation == MO_AM) // reserve attenuator range for AM modulation + ar = 4; + while (a + ar < blw && d > LOWEST_LEVEL) { // reduce till it fits attenuator ((ar+3) - 3) d--; blw = BELOW_MAX_DRIVE(d); } @@ -285,11 +288,11 @@ void set_output_path(freq_t f, float level) a -= 3.0; // Always at least 3dB attenuation if (a > 0) { a = 0; - if (!level_error) redraw_request |= REDRAW_CAL_STATUS; - level_error = true; + if (!level_error) { level_error = true; redraw_request |= REDRAW_CAL_STATUS; draw_all(true);} + } else if (setting.modulation == MO_AM && a < -10) { // Insufficient headroom for modulation + if (!level_error) { level_error = true; redraw_request |= REDRAW_CAL_STATUS; draw_all(true); } } else { - if (level_error) redraw_request |= REDRAW_CAL_STATUS; - level_error = false; + if (level_error) { level_error = false; redraw_request |= REDRAW_CAL_STATUS; draw_all(true); } } if (a < -31.5) a = -31.5; @@ -3689,7 +3692,7 @@ modulation_again: #else int p = setting.attenuate_x2 + am_modulation[modulation_counter]; #endif - if (p>63) p = 63; + if (p>63)p = 63; else if (p< 0) p = 0; #ifdef __PE4302__ PE4302_Write_Byte(p); diff --git a/ui_sa.c b/ui_sa.c index 0de1d91..63ba430 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -2599,19 +2599,18 @@ static const menuitem_t menu_modulation[] = { { MT_FORM | MT_ADV_CALLBACK, MO_NONE, MT_CUSTOM_LABEL, menu_modulation_acb}, { MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM, "AM", menu_modulation_acb}, #ifdef TINYSA4 - { MT_FORM | MT_KEYPAD, KM_DEPTH, "DEPTH: %s%%", "0..100"}, { MT_FORM | MT_ADV_CALLBACK, MO_WFM, "FM", menu_modulation_acb}, - { MT_FORM | MT_KEYPAD, KM_DEVIATION, "DEVIATION: %s", "1kHz..300kHz"}, + { MT_FORM | MT_KEYPAD, KM_MODULATION, "FREQ: %s", "50Hz..5kHz"}, + { MT_FORM | MT_KEYPAD, KM_DEPTH, "AM DEPTH: %s%%", "0..100"}, + { MT_FORM | MT_KEYPAD, KM_DEVIATION, "FM DEVIATION: %s", "1kHz..300kHz"}, // { MT_FORM | MT_ADV_CALLBACK, MO_NFM2, MT_CUSTOM_LABEL, menu_modulation_acb}, // { MT_FORM | MT_ADV_CALLBACK, MO_NFM3, MT_CUSTOM_LABEL, menu_modulation_acb}, #else { MT_FORM | MT_ADV_CALLBACK, MO_NFM, MT_CUSTOM_LABEL, menu_modulation_acb}, { MT_FORM | MT_ADV_CALLBACK, MO_WFM, MT_CUSTOM_LABEL, menu_modulation_acb}, -#endif -#ifndef TINYSA4 { MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_EXTERNAL,MT_CUSTOM_LABEL, menu_modulation_acb}, -#endif { MT_FORM | MT_KEYPAD, KM_MODULATION, "FREQ: %s", "50Hz..5kHz"}, +#endif { MT_FORM | MT_NONE, 0, NULL, menu_back} // next-> menu_back };