Increase modulation headroom and add warning

pull/34/head
erikkaashoek 3 years ago
parent 836186f997
commit a2081cc82c

@ -275,7 +275,10 @@ void set_output_path(freq_t f, float level)
d++; d++;
blw = BELOW_MAX_DRIVE(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--; d--;
blw = BELOW_MAX_DRIVE(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 a -= 3.0; // Always at least 3dB attenuation
if (a > 0) { if (a > 0) {
a = 0; a = 0;
if (!level_error) redraw_request |= REDRAW_CAL_STATUS; if (!level_error) { level_error = true; redraw_request |= REDRAW_CAL_STATUS; draw_all(true);}
level_error = 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 { } else {
if (level_error) redraw_request |= REDRAW_CAL_STATUS; if (level_error) { level_error = false; redraw_request |= REDRAW_CAL_STATUS; draw_all(true); }
level_error = false;
} }
if (a < -31.5) if (a < -31.5)
a = -31.5; a = -31.5;
@ -3689,7 +3692,7 @@ modulation_again:
#else #else
int p = setting.attenuate_x2 + am_modulation[modulation_counter]; int p = setting.attenuate_x2 + am_modulation[modulation_counter];
#endif #endif
if (p>63) p = 63; if (p>63)p = 63;
else if (p< 0) p = 0; else if (p< 0) p = 0;
#ifdef __PE4302__ #ifdef __PE4302__
PE4302_Write_Byte(p); PE4302_Write_Byte(p);

@ -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, MO_NONE, MT_CUSTOM_LABEL, menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM, "AM", menu_modulation_acb}, { MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM, "AM", menu_modulation_acb},
#ifdef TINYSA4 #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_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_NFM2, MT_CUSTOM_LABEL, menu_modulation_acb},
// { MT_FORM | MT_ADV_CALLBACK, MO_NFM3, MT_CUSTOM_LABEL, menu_modulation_acb}, // { MT_FORM | MT_ADV_CALLBACK, MO_NFM3, MT_CUSTOM_LABEL, menu_modulation_acb},
#else #else
{ MT_FORM | MT_ADV_CALLBACK, MO_NFM, MT_CUSTOM_LABEL, menu_modulation_acb}, { 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}, { 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}, { 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"}, { MT_FORM | MT_KEYPAD, KM_MODULATION, "FREQ: %s", "50Hz..5kHz"},
#endif
{ MT_FORM | MT_NONE, 0, NULL, menu_back} // next-> menu_back { MT_FORM | MT_NONE, 0, NULL, menu_back} // next-> menu_back
}; };

Loading…
Cancel
Save

Powered by TurnKey Linux.