Merge branch 'DiSlord_test_branch'

pull/4/head
erikkaashoek 6 years ago
commit 43da653076

@ -193,7 +193,7 @@ void set_step_delay(int t);
void set_repeat(int);
void set_level_sweep(float);
void set_level(float);
void set_sweep_time(float);
void set_sweep_time_us(uint32_t);
//extern int setting.repeat;
//extern int setting.rbw;
#ifdef __SPUR__
@ -610,8 +610,8 @@ typedef struct setting
int linearity_step;
float level;
float level_sweep;
float sweep_time;
float actual_sweep_time;
uint32_t sweep_time_us;
uint32_t actual_sweep_time_us;
int test_argument;
int auto_IF;
unsigned int unit_scale_index;
@ -631,12 +631,16 @@ void reset_settings(int m);
enum { S_OFF=0, S_ON=1, S_AUTO_OFF=2, S_AUTO_ON=3 };
#ifdef __FAST_SWEEP__
#define MINIMUM_SWEEP_TIME 3 // Minimum sweep time on zero span in miliseconds
#define MINIMUM_SWEEP_TIME 3000U // Minimum sweep time on zero span in uS
#else
#define MINIMUM_SWEEP_TIME 15 // Minimum sweep time on zero span in miliseconds
#define MINIMUM_SWEEP_TIME 15000U // Minimum sweep time on zero span in uS
#endif
#define REPEAT_TIME 134.0 // Time per extra repeat in uS
#define MEASURE_TIME 175.0 // Time per vbwstep without stepdelay in uS
#define MAXIMUM_SWEEP_TIME 6000000U // Maximum sweep time uS
#define ONE_SECOND_TIME 1000000U // One second uS
#define ONE_MS_TIME 1000U // One ms uS
#define REPEAT_TIME 134 // Time per extra repeat in uS
#define MEASURE_TIME 175 // Time per vbwstep without stepdelay in uS
extern uint32_t frequencies[POINTS_COUNT];
extern const float unit_scale_value[];
@ -708,7 +712,7 @@ typedef struct properties {
//sizeof(properties_t) == 0x1200
#define CONFIG_MAGIC 0x434f4e45 /* 'CONF' */
#define CONFIG_MAGIC 0x434f4e46 /* 'CONF' */
extern int16_t lastsaveid;
//extern properties_t *active_props;
@ -877,7 +881,7 @@ void self_test(int);
void wait_user(void);
void calibrate(void);
float to_dBm(float);
float calc_min_sweep_time(void);
uint32_t calc_min_sweep_time_us(void);
extern float actual_rbw;
enum {

@ -118,8 +118,7 @@ void update_grid(void)
uint32_t grid;
if (fspan == 0) {
fspan = setting.actual_sweep_time; // Time in mS
fspan *= 1000;
fspan = setting.actual_sweep_time_us; // Time in uS
fstart = 0;
}
@ -861,17 +860,17 @@ static void trace_get_value_string(
dfreq = frequencies[i];
}
if (FREQ_IS_CW()) {
float t = ii*(setting.actual_sweep_time)*1000.0/290.0;
float t = ii*(setting.actual_sweep_time_us)/(sweep_points - 1);
#if 1
plot_printf(&buf2[1], sizeof(buf2) -1, "%.3Fs" , t/1000000.0);
plot_printf(&buf2[1], sizeof(buf2) -1, "%.3Fs" , t/ONE_SECOND_TIME);
#else
if (t>1000000.0){
plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/1000000.0);
if (t>ONE_SECOND_TIME){
plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/ONE_SECOND_TIME);
buf2[5] = 'S';
buf2[6]=0;
}
else if (t>1000.0) {
plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/1000.0);
plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/ONE_MS_TIME);
buf2[5] = 'm';
buf2[6] = 'S';
buf2[7]=0;
@ -2067,11 +2066,11 @@ draw_frequencies(void)
if (FREQ_IS_CW()) {
plot_printf(buf1, sizeof(buf1), " CW %qHz", get_sweep_frequency(ST_CW));
float t = calc_min_sweep_time(); // Calc minimum sweep time
if (t < setting.sweep_time)
t = setting.sweep_time;
setting.actual_sweep_time = t;
plot_printf(buf2, sizeof(buf2), " TIME %.3Fs",t/1000.0);
uint32_t t = calc_min_sweep_time_us(); // Calc minimum sweep time
if (t < setting.sweep_time_us)
t = setting.sweep_time_us;
setting.actual_sweep_time_us = t;
plot_printf(buf2, sizeof(buf2), " TIME %.3Fs", (float)t/ONE_SECOND_TIME);
} else if (FREQ_IS_STARTSTOP()) {
plot_printf(buf1, sizeof(buf1), " START %qHz", get_sweep_frequency(ST_START));

@ -155,11 +155,11 @@ VNA_SHELL_FUNCTION(cmd_level)
VNA_SHELL_FUNCTION(cmd_sweeptime)
{
if (argc != 1) {
shell_printf("usage: sweeptime 0.03..600\r\n");
shell_printf("usage: sweeptime 0.003..60\r\n");
return;
}
float f = my_atof(argv[0]);
set_sweep_time(f*1000.0);
set_sweep_time_us(f*ONE_SECOND_TIME);
}

@ -105,7 +105,7 @@ void reset_settings(int m)
set_sweep_frequency(ST_START, (uint32_t) 0);
set_sweep_frequency(ST_STOP, (uint32_t) 350000000);
setting.attenuate = 30.0;
setting.sweep_time = 0;
setting.sweep_time_us = 0;
break;
#ifdef __ULTRA__
case M_ULTRA:
@ -114,7 +114,7 @@ void reset_settings(int m)
set_sweep_frequency(ST_START, (uint32_t) minFreq);
set_sweep_frequency(ST_STOP, (uint32_t) maxFreq);
setting.attenuate = 0;
setting.sweep_time = 0.0;
setting.sweep_time_us = 0;
break;
#endif
case M_GENLOW:
@ -123,7 +123,7 @@ void reset_settings(int m)
maxFreq = 520000000;
set_sweep_frequency(ST_CENTER, 10000000);
set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time = 10000.0;
setting.sweep_time_us = 10*ONE_SECOND_TIME;
break;
case M_HIGH:
#ifdef __ULTRA_SA__
@ -135,7 +135,7 @@ void reset_settings(int m)
#endif
set_sweep_frequency(ST_START, minFreq);
set_sweep_frequency(ST_STOP, maxFreq);
setting.sweep_time = 0;
setting.sweep_time_us = 0;
break;
case M_GENHIGH:
setting.drive=8;
@ -143,7 +143,7 @@ void reset_settings(int m)
maxFreq = 960000000;
set_sweep_frequency(ST_CENTER, 300000000);
set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time = 10000.0;
setting.sweep_time_us = 10*ONE_SECOND_TIME;
break;
}
for (int i = 0; i< MARKERS_MAX; i++) {
@ -156,19 +156,19 @@ void reset_settings(int m)
dirty = true;
}
float calc_min_sweep_time(void) // Calculate minimum sweep time in mS
uint32_t calc_min_sweep_time_us(void) // Calculate minimum sweep time in uS
{
float t;
float a = (actualStepDelay + MEASURE_TIME)/1000.0; // in mS
float a = (actualStepDelay + MEASURE_TIME); // in uS
if (MODE_OUTPUT(setting.mode))
t = 100;
else {
if (FREQ_IS_CW()) {
a = (float)MINIMUM_SWEEP_TIME / 290.0; // time per step in CW mode
if (setting.repeat != 1 || setting.sweep_time >= 1000 || setting.spur != 0)
a = 15.0 / 290.0; // time per step in CW mode with repeat
a = MINIMUM_SWEEP_TIME / (sweep_points - 1); // time per step in CW mode
if (setting.repeat != 1 || setting.sweep_time_us >= ONE_SECOND_TIME || setting.spur != 0)
a = 15000.0 / (sweep_points - 1); // time per step in CW mode with repeat
}
t = vbwSteps * sweep_points * (setting.spur ? 2 : 1) * ( (a + (setting.repeat - 1)* REPEAT_TIME/1000.0));
t = vbwSteps * (sweep_points - 1) * (setting.spur ? 2 : 1) * ( (a + (setting.repeat - 1)* REPEAT_TIME));
}
return t;
}
@ -221,17 +221,17 @@ void set_level_sweep(float l)
dirty = true;
}
void set_sweep_time(float t)
void set_sweep_time_us(uint32_t t)
{
if (t < MINIMUM_SWEEP_TIME)
t = MINIMUM_SWEEP_TIME;
if (t > 600000.0)
t = 600000.0;
setting.sweep_time = t;
float ta = calc_min_sweep_time();
if (t > MAXIMUM_SWEEP_TIME)
t = MAXIMUM_SWEEP_TIME;
setting.sweep_time_us = t;
uint32_t ta = calc_min_sweep_time_us();
if (ta < t)
ta = t;
setting.actual_sweep_time = ta;
setting.actual_sweep_time_us = ta;
if (FREQ_IS_CW())
update_grid(); // Really only needed in zero span mode
redraw_request |= REDRAW_FREQUENCY;
@ -1449,7 +1449,7 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
skip_LO_setting:
#ifdef __FAST_SWEEP__
if (i == 0 && setting.frequency_step == 0 && setting.trigger == T_AUTO && setting.spur == 0 && actualStepDelay == 0 && setting.repeat == 1 && setting.sweep_time < 1000) {
if (i == 0 && setting.frequency_step == 0 && setting.trigger == T_AUTO && setting.spur == 0 && actualStepDelay == 0 && setting.repeat == 1 && setting.sweep_time_us < ONE_SECOND_TIME) {
SI4432_Fill(MODE_SELECT(setting.mode), 0);
}
#endif
@ -1486,7 +1486,7 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
if (subRSSI < setting.trigger_level)
goto wait;
#ifdef __FAST_SWEEP__
if (i == 0 && setting.frequency_step == 0 /* && setting.trigger == T_AUTO */&& setting.spur == 0 && old_actual_step_delay == 0 && setting.repeat == 1 && setting.sweep_time < 1000) {
if (i == 0 && setting.frequency_step == 0 /* && setting.trigger == T_AUTO */&& setting.spur == 0 && old_actual_step_delay == 0 && setting.repeat == 1 && setting.sweep_time_us < ONE_SECOND_TIME) {
SI4432_Fill(MODE_SELECT(setting.mode), 1);
}
#endif
@ -1542,26 +1542,29 @@ again:
repeats = 1000; // to avoid interrupting the tone during UI processing
modulation_counter = 0;
}
float t = setting.sweep_time - calc_min_sweep_time(); // Time to delay in mS
if (t < 0)
uint32_t t = calc_min_sweep_time_us(); // Time to delay in uS
if (t < setting.sweep_time_us){
t = setting.sweep_time_us - t;
t = t / (sweep_points - 1); // Now in uS per point
}
else
t = 0;
t = t * 1000 / 290.0; // Now in uS per point
if (MODE_OUTPUT(setting.mode) && t < 500) // Minimum wait time to prevent LO from lockup
t = 500;
while (repeats--) {
for (int i = 0; i < sweep_points; i++) {
RSSI = perform(break_on_operation, i, frequencies[i], setting.tracking);
if (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE) {
if (t < 30000)
my_microsecond_delay((int)t);
if (t && (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE)) {
if (t < 30*ONE_MS_TIME)
my_microsecond_delay(t);
else
osalThreadSleepMilliseconds(((int)t)/1000);
osalThreadSleepMilliseconds(t / ONE_MS_TIME);
}
// back to toplevel to handle ui operation
if ((operation_requested || shell_function) && break_on_operation) {
if (setting.actual_sweep_time > 1000) {
if (setting.actual_sweep_time_us > ONE_SECOND_TIME) {
ili9341_fill(OFFSETX, HEIGHT_NOSCROLL+1, WIDTH, 1, 0);
}
@ -1572,7 +1575,7 @@ again:
}
if (MODE_INPUT(setting.mode)) {
if (setting.actual_sweep_time > 1000 && (i & 0x07) == 0) {
if (setting.actual_sweep_time_us > ONE_SECOND_TIME && (i & 0x07) == 0) {
ili9341_fill(OFFSETX, HEIGHT_NOSCROLL+1, i, 1, BRIGHT_COLOR_GREEN);
ili9341_fill(OFFSETX+i, HEIGHT_NOSCROLL+1, WIDTH-i, 1, 0);
}
@ -1852,7 +1855,7 @@ again:
// redraw_marker(peak_marker, FALSE);
// STOP_PROFILE;
if (setting.actual_sweep_time > 1000) {
if (setting.actual_sweep_time_us > ONE_SECOND_TIME) {
ili9341_fill(OFFSETX, HEIGHT_NOSCROLL+1, WIDTH, 1, 0);
}
@ -2177,11 +2180,11 @@ void draw_cal_status(void)
ili9341_drawstring("Scan:", x, y);
y += YSTEP;
float t = calc_min_sweep_time();
if (t < setting.sweep_time)
t = setting.sweep_time;
setting.actual_sweep_time = t;
plot_printf(buf, BLEN, "%.3FS", t/1000.0);
uint32_t t = calc_min_sweep_time_us();
if (t < setting.sweep_time_us)
t = setting.sweep_time_us;
setting.actual_sweep_time_us = t;
plot_printf(buf, BLEN, "%.3FS", (float)t/ONE_SECOND_TIME);
ili9341_drawstring(buf, x, y);
// Cal output

@ -395,8 +395,14 @@ void SI4432_Fill(int s, int start)
{
SI4432_Sel = s;
int sel = SI_nSEL[SI4432_Sel];
float t = setting.sweep_time - calc_min_sweep_time(); // Time to delay in mS for all sweep
uint32_t ti = t < 0 ? 0 : t * 1000 / (sweep_points - 1); // Now in uS per point if (t < 30000)
uint32_t t = calc_min_sweep_time_us(); // Time to delay in uS for all sweep
if (t < setting.sweep_time_us){
t = setting.sweep_time_us - t;
t = t / (sweep_points - 1); // Now in uS per point
}
else
t = 0;
SPI2_CLK_LOW;
int i = 0;
do {
@ -405,8 +411,8 @@ void SI4432_Fill(int s, int start)
age[i]=(char)shiftIn();
palSetPad(GPIOC, sel);
if (++i >= sweep_points) break;
if (ti)
my_microsecond_delay(ti);
if (t)
my_microsecond_delay(t);
} while(1);
buf_index = start;
buf_read = true;

@ -1982,7 +1982,7 @@ lever_zoom_span(int status)
static void
lever_zoom_time(int status)
{
uint32_t time = setting.sweep_time; // in mS
uint32_t time = setting.sweep_time_us; // in uS
if (time < MINIMUM_SWEEP_TIME)
time = MINIMUM_SWEEP_TIME;
if (status & EVT_UP) {
@ -1991,7 +1991,7 @@ lever_zoom_time(int status)
time = time*25/10;
}
time = step_round(time);
set_sweep_time(time);
set_sweep_time_us(time);
}
static void

@ -1832,11 +1832,11 @@ static void fetch_numeric_target(void)
plot_printf(uistat.text, sizeof uistat.text, "%.1fdB", uistat.value);
break;
case KM_SWEEP_TIME:
if (setting.sweep_time < calc_min_sweep_time())
uistat.value = calc_min_sweep_time();
if (setting.sweep_time_us < calc_min_sweep_time_us())
uistat.value = calc_min_sweep_time_us();
else
uistat.value = setting.sweep_time;
uistat.value /= 1000.0;
uistat.value = setting.sweep_time_us;
uistat.value /= (float)ONE_SECOND_TIME;
plot_printf(uistat.text, sizeof uistat.text, "%.3FS", uistat.value);
break;
case KM_TRIGGER:
@ -1925,7 +1925,7 @@ set_numeric_value(void)
set_level_sweep(uistat.value);
break;
case KM_SWEEP_TIME:
set_sweep_time(uistat.value*1000.0);
set_sweep_time_us(uistat.value*ONE_SECOND_TIME);
update_grid();
break;
case KM_TRIGGER:

Loading…
Cancel
Save

Powered by TurnKey Linux.