User settable modulation frequency

pull/5/head
erikkaashoek 5 years ago
parent db328ff327
commit 5904e600ee

@ -146,7 +146,7 @@ enum {
};
enum {
MO_NONE, MO_AM_1kHz, MO_AM_10Hz, MO_NFM, MO_WFM, MO_EXTERNAL,
MO_NONE, MO_AM, MO_NFM, MO_WFM, MO_EXTERNAL,
};
#define MODE_OUTPUT(x) ((x) == M_GENLOW || (x) == M_GENHIGH )
@ -234,6 +234,7 @@ void toggle_tracking_output(void);
extern int32_t frequencyExtra;
void set_10mhz(uint32_t);
void set_modulation(int);
void set_modulation_frequency(int);
//extern int setting.modulation;
void set_measurement(int);
// extern int settingSpeed;
@ -687,6 +688,7 @@ typedef struct setting
int step_delay_mode;
int offset_delay;
int fast_speedup;
int modulation_frequency;
uint32_t checksum;
}setting_t;

@ -64,7 +64,7 @@ VNA_SHELL_FUNCTION(cmd_modulation )
shell_printf("usage: modulation %s\r\n", cmd_mod);
return;
}
static const int cmd_mod_val[] = { MO_NONE, MO_AM_1kHz, MO_AM_10Hz, MO_NFM, MO_WFM, MO_EXTERNAL};
static const int cmd_mod_val[] = { MO_NONE, MO_AM, MO_NFM, MO_WFM, MO_EXTERNAL};
int m = get_str_index(argv[1], cmd_mod);
if (m<0)
goto usage;

@ -119,6 +119,7 @@ void reset_settings(int m)
setting.lna = S_AUTO_OFF;
setting.tracking = false;
setting.modulation = MO_NONE;
setting.modulation_frequency = 1000;
setting.step_delay = 0;
setting.offset_delay = 0;
setting.step_delay_mode = SD_NORMAL;
@ -348,6 +349,14 @@ void set_modulation(int m)
dirty = true;
}
void set_modulation_frequency(int f)
{
if (20 <= f && f <= 20000) {
setting.modulation_frequency = f;
dirty = true;
}
}
void set_repeat(int r)
{
if (r > 0 && r <= 100) {
@ -1486,6 +1495,7 @@ static systime_t sweep_elapsed = 0; // Time since fi
pureRSSI_t perform(bool break_on_operation, int i, uint32_t f, int tracking) // Measure the RSSI for one frequency, used from sweep and other measurement routines. Must do all HW setup
{
int modulation_delay = 0;
if (i == 0 && dirty ) { // if first point in scan and dirty
calculate_correction(); // pre-calculate correction factor dividers to avoid float division
apply_settings(); // Initialize HW
@ -1525,6 +1535,9 @@ pureRSSI_t perform(bool break_on_operation, int i, uint32_t f, int tracking)
+ get_attenuation()
- setting.offset);
}
if (setting.modulation != MO_NONE && setting.modulation != MO_EXTERNAL && setting.modulation_frequency != 0) {
modulation_delay = 1000 * 200 / setting.modulation_frequency - 20;
}
// if (MODE_OUTPUT(setting.mode) && setting.additional_step_delay_us < 500) // Minimum wait time to prevent LO from lockup during output frequency sweep
// setting.additional_step_delay_us = 500;
@ -1591,7 +1604,7 @@ pureRSSI_t perform(bool break_on_operation, int i, uint32_t f, int tracking)
modulation_again:
// ----------------------------------------------------- modulation for output modes ---------------------------------------
if (MODE_OUTPUT(setting.mode)){
if (setting.modulation == MO_AM_1kHz || setting.modulation == MO_AM_10Hz) { // AM modulation
if (setting.modulation == MO_AM) { // AM modulation
int p = setting.attenuate * 2 + am_modulation[modulation_counter++];
if (p>63) p = 63;
else if (p< 0) p = 0;
@ -1600,7 +1613,7 @@ modulation_again:
#endif
if (modulation_counter == 5) // 3dB modulation depth
modulation_counter = 0;
my_microsecond_delay(setting.modulation == MO_AM_10Hz ? 20000 : 180);
// my_microsecond_delay(setting.modulation == MO_AM_10Hz ? 20000 : 180);
}
else if (setting.modulation == MO_NFM || setting.modulation == MO_WFM ) { //FM modulation
#ifdef __SI4432__
@ -1612,9 +1625,12 @@ modulation_again:
modulation_counter++;
if (modulation_counter == 5) // 3dB modulation depth
modulation_counter = 0;
my_microsecond_delay(200);
// my_microsecond_delay(200);
// chThdSleepMicroseconds(200);
}
if (setting.modulation != MO_NONE && setting.modulation != MO_EXTERNAL) {
my_microsecond_delay(modulation_delay);
}
}
// Calculate the RSSI correction for later use

@ -407,7 +407,7 @@ enum {
KM_START, KM_STOP, KM_CENTER, KM_SPAN, KM_CW, KM_REFLEVEL, KM_SCALE, KM_ATTENUATION,
KM_ACTUALPOWER, KM_IF, KM_SAMPLETIME, KM_DRIVE, KM_LOWOUTLEVEL, KM_DECAY, KM_NOISE,
KM_10MHZ, KM_REPEAT, KM_OFFSET, KM_TRIGGER, KM_LEVELSWEEP, KM_SWEEP_TIME, KM_OFFSET_DELAY,
KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER,
KM_FAST_SPEEDUP, KM_GRIDLINES, KM_MARKER, KM_MODULATION,
KM_NONE // always at enum end
};
@ -440,6 +440,7 @@ static const struct {
{keypads_positive , "FAST\nSPEEDUP"}, // KM_FAST_SPEEDUP
{keypads_positive , "MINIMUM\nGRIDLINES"}, // KM_GRIDLINES
{keypads_freq , "MARKER\nFREQ"}, // KM_MARKER
{keypads_freq , "MODULATION\nFREQ"}, // KM_MODULATION
};
// ===[MENU CALLBACKS]=========================================================
@ -622,8 +623,8 @@ static UI_FUNCTION_CALLBACK(menu_dfu_cb)
}
// const int menu_modulation_value[]={MO_NONE,MO_AM_1, MO_NFM, MO_WFM, MO_EXTERNAL};
const char *menu_modulation_text[]={"None", "AM 1kHz", "AM 10Hz", "Narrow FM", "Wide FM", "External"};
// const int menu_modulation_value[]={MO_NONE,MO_AM, MO_NFM, MO_WFM, MO_EXTERNAL};
const char *menu_modulation_text[]={"None", "AM", "Narrow FM", "Wide FM", "External"};
static UI_FUNCTION_ADV_CALLBACK(menu_modulation_acb)
{
@ -1350,11 +1351,11 @@ static const menuitem_t menu_drive_wide[] = {
static const menuitem_t menu_modulation[] = {
{ MT_FORM | MT_TITLE, 0, "MODULATION",NULL},
{ MT_FORM | MT_ADV_CALLBACK, MO_NONE, "None", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM_1kHz, "AM 1kHz", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM_10Hz, "AM 10Hz", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_AM, "AM", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK, MO_NFM, "Narrow FM", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK, MO_WFM, "Wide FM", menu_modulation_acb},
{ MT_FORM | MT_ADV_CALLBACK | MT_LOW, MO_EXTERNAL, "External", menu_modulation_acb},
{ MT_FORM | MT_KEYPAD, KM_MODULATION, "FREQ: %s", "10Hz..10kHz"},
{ MT_FORM | MT_CANCEL, 0, S_LARROW" BACK",NULL },
{ MT_FORM | MT_NONE, 0, NULL, NULL } // sentinel
};
@ -1937,7 +1938,12 @@ static void fetch_numeric_target(void)
plot_printf(uistat.text, sizeof uistat.text, "%3.3fMHz", uistat.value / 1000000.0);
}
break;
case KM_MODULATION:
if (active_marker >=0) {
uistat.value = setting.modulation_frequency;
plot_printf(uistat.text, sizeof uistat.text, "%7.0fHz", uistat.value);
}
break;
}
{
@ -2041,6 +2047,9 @@ set_numeric_value(void)
case KM_MARKER:
set_marker_frequency(active_marker, (uint32_t)uistat.value);
break;
case KM_MODULATION:
set_modulation_frequency((int)uistat.value);
break;
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.