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_repeat(int);
void set_level_sweep(float); void set_level_sweep(float);
void set_level(float); void set_level(float);
void set_sweep_time(float); void set_sweep_time_us(uint32_t);
//extern int setting.repeat; //extern int setting.repeat;
//extern int setting.rbw; //extern int setting.rbw;
#ifdef __SPUR__ #ifdef __SPUR__
@ -610,8 +610,8 @@ typedef struct setting
int linearity_step; int linearity_step;
float level; float level;
float level_sweep; float level_sweep;
float sweep_time; uint32_t sweep_time_us;
float actual_sweep_time; uint32_t actual_sweep_time_us;
int test_argument; int test_argument;
int auto_IF; int auto_IF;
unsigned int unit_scale_index; 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 }; enum { S_OFF=0, S_ON=1, S_AUTO_OFF=2, S_AUTO_ON=3 };
#ifdef __FAST_SWEEP__ #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 #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 #endif
#define REPEAT_TIME 134.0 // Time per extra repeat in uS #define MAXIMUM_SWEEP_TIME 6000000U // Maximum sweep time uS
#define MEASURE_TIME 175.0 // Time per vbwstep without stepdelay in 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 uint32_t frequencies[POINTS_COUNT];
extern const float unit_scale_value[]; extern const float unit_scale_value[];
@ -708,7 +712,7 @@ typedef struct properties {
//sizeof(properties_t) == 0x1200 //sizeof(properties_t) == 0x1200
#define CONFIG_MAGIC 0x434f4e45 /* 'CONF' */ #define CONFIG_MAGIC 0x434f4e46 /* 'CONF' */
extern int16_t lastsaveid; extern int16_t lastsaveid;
//extern properties_t *active_props; //extern properties_t *active_props;
@ -877,7 +881,7 @@ void self_test(int);
void wait_user(void); void wait_user(void);
void calibrate(void); void calibrate(void);
float to_dBm(float); float to_dBm(float);
float calc_min_sweep_time(void); uint32_t calc_min_sweep_time_us(void);
extern float actual_rbw; extern float actual_rbw;
enum { enum {

@ -118,8 +118,7 @@ void update_grid(void)
uint32_t grid; uint32_t grid;
if (fspan == 0) { if (fspan == 0) {
fspan = setting.actual_sweep_time; // Time in mS fspan = setting.actual_sweep_time_us; // Time in uS
fspan *= 1000;
fstart = 0; fstart = 0;
} }
@ -861,17 +860,17 @@ static void trace_get_value_string(
dfreq = frequencies[i]; dfreq = frequencies[i];
} }
if (FREQ_IS_CW()) { 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 #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 #else
if (t>1000000.0){ if (t>ONE_SECOND_TIME){
plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/1000000.0); plot_printf(&buf2[1], sizeof(buf2) -1, "%4f" , t/ONE_SECOND_TIME);
buf2[5] = 'S'; buf2[5] = 'S';
buf2[6]=0; buf2[6]=0;
} }
else if (t>1000.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[5] = 'm';
buf2[6] = 'S'; buf2[6] = 'S';
buf2[7]=0; buf2[7]=0;
@ -2067,11 +2066,11 @@ draw_frequencies(void)
if (FREQ_IS_CW()) { if (FREQ_IS_CW()) {
plot_printf(buf1, sizeof(buf1), " CW %qHz", get_sweep_frequency(ST_CW)); plot_printf(buf1, sizeof(buf1), " CW %qHz", get_sweep_frequency(ST_CW));
float t = calc_min_sweep_time(); // Calc minimum sweep time uint32_t t = calc_min_sweep_time_us(); // Calc minimum sweep time
if (t < setting.sweep_time) if (t < setting.sweep_time_us)
t = setting.sweep_time; t = setting.sweep_time_us;
setting.actual_sweep_time = t; setting.actual_sweep_time_us = t;
plot_printf(buf2, sizeof(buf2), " TIME %.3Fs",t/1000.0); plot_printf(buf2, sizeof(buf2), " TIME %.3Fs", (float)t/ONE_SECOND_TIME);
} else if (FREQ_IS_STARTSTOP()) { } else if (FREQ_IS_STARTSTOP()) {
plot_printf(buf1, sizeof(buf1), " START %qHz", get_sweep_frequency(ST_START)); 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) VNA_SHELL_FUNCTION(cmd_sweeptime)
{ {
if (argc != 1) { if (argc != 1) {
shell_printf("usage: sweeptime 0.03..600\r\n"); shell_printf("usage: sweeptime 0.003..60\r\n");
return; return;
} }
float f = my_atof(argv[0]); 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_START, (uint32_t) 0);
set_sweep_frequency(ST_STOP, (uint32_t) 350000000); set_sweep_frequency(ST_STOP, (uint32_t) 350000000);
setting.attenuate = 30.0; setting.attenuate = 30.0;
setting.sweep_time = 0; setting.sweep_time_us = 0;
break; break;
#ifdef __ULTRA__ #ifdef __ULTRA__
case M_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_START, (uint32_t) minFreq);
set_sweep_frequency(ST_STOP, (uint32_t) maxFreq); set_sweep_frequency(ST_STOP, (uint32_t) maxFreq);
setting.attenuate = 0; setting.attenuate = 0;
setting.sweep_time = 0.0; setting.sweep_time_us = 0;
break; break;
#endif #endif
case M_GENLOW: case M_GENLOW:
@ -123,7 +123,7 @@ void reset_settings(int m)
maxFreq = 520000000; maxFreq = 520000000;
set_sweep_frequency(ST_CENTER, 10000000); set_sweep_frequency(ST_CENTER, 10000000);
set_sweep_frequency(ST_SPAN, 0); set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time = 10000.0; setting.sweep_time_us = 10*ONE_SECOND_TIME;
break; break;
case M_HIGH: case M_HIGH:
#ifdef __ULTRA_SA__ #ifdef __ULTRA_SA__
@ -135,7 +135,7 @@ void reset_settings(int m)
#endif #endif
set_sweep_frequency(ST_START, minFreq); set_sweep_frequency(ST_START, minFreq);
set_sweep_frequency(ST_STOP, maxFreq); set_sweep_frequency(ST_STOP, maxFreq);
setting.sweep_time = 0; setting.sweep_time_us = 0;
break; break;
case M_GENHIGH: case M_GENHIGH:
setting.drive=8; setting.drive=8;
@ -143,7 +143,7 @@ void reset_settings(int m)
maxFreq = 960000000; maxFreq = 960000000;
set_sweep_frequency(ST_CENTER, 300000000); set_sweep_frequency(ST_CENTER, 300000000);
set_sweep_frequency(ST_SPAN, 0); set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time = 10000.0; setting.sweep_time_us = 10*ONE_SECOND_TIME;
break; break;
} }
for (int i = 0; i< MARKERS_MAX; i++) { for (int i = 0; i< MARKERS_MAX; i++) {
@ -156,19 +156,19 @@ void reset_settings(int m)
dirty = true; 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 t;
float a = (actualStepDelay + MEASURE_TIME)/1000.0; // in mS float a = (actualStepDelay + MEASURE_TIME); // in uS
if (MODE_OUTPUT(setting.mode)) if (MODE_OUTPUT(setting.mode))
t = 100; t = 100;
else { else {
if (FREQ_IS_CW()) { if (FREQ_IS_CW()) {
a = (float)MINIMUM_SWEEP_TIME / 290.0; // time per step in CW mode a = MINIMUM_SWEEP_TIME / (sweep_points - 1); // time per step in CW mode
if (setting.repeat != 1 || setting.sweep_time >= 1000 || setting.spur != 0) if (setting.repeat != 1 || setting.sweep_time_us >= ONE_SECOND_TIME || setting.spur != 0)
a = 15.0 / 290.0; // time per step in CW mode with repeat 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; return t;
} }
@ -221,17 +221,17 @@ void set_level_sweep(float l)
dirty = true; dirty = true;
} }
void set_sweep_time(float t) void set_sweep_time_us(uint32_t t)
{ {
if (t < MINIMUM_SWEEP_TIME) if (t < MINIMUM_SWEEP_TIME)
t = MINIMUM_SWEEP_TIME; t = MINIMUM_SWEEP_TIME;
if (t > 600000.0) if (t > MAXIMUM_SWEEP_TIME)
t = 600000.0; t = MAXIMUM_SWEEP_TIME;
setting.sweep_time = t; setting.sweep_time_us = t;
float ta = calc_min_sweep_time(); uint32_t ta = calc_min_sweep_time_us();
if (ta < t) if (ta < t)
ta = t; ta = t;
setting.actual_sweep_time = ta; setting.actual_sweep_time_us = ta;
if (FREQ_IS_CW()) if (FREQ_IS_CW())
update_grid(); // Really only needed in zero span mode update_grid(); // Really only needed in zero span mode
redraw_request |= REDRAW_FREQUENCY; redraw_request |= REDRAW_FREQUENCY;
@ -1449,7 +1449,7 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
skip_LO_setting: skip_LO_setting:
#ifdef __FAST_SWEEP__ #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); SI4432_Fill(MODE_SELECT(setting.mode), 0);
} }
#endif #endif
@ -1486,7 +1486,7 @@ float perform(bool break_on_operation, int i, uint32_t f, int tracking)
if (subRSSI < setting.trigger_level) if (subRSSI < setting.trigger_level)
goto wait; goto wait;
#ifdef __FAST_SWEEP__ #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); SI4432_Fill(MODE_SELECT(setting.mode), 1);
} }
#endif #endif
@ -1542,26 +1542,29 @@ again:
repeats = 1000; // to avoid interrupting the tone during UI processing repeats = 1000; // to avoid interrupting the tone during UI processing
modulation_counter = 0; modulation_counter = 0;
} }
float t = setting.sweep_time - calc_min_sweep_time(); // Time to delay in mS uint32_t t = calc_min_sweep_time_us(); // Time to delay in uS
if (t < 0) 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 = 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 if (MODE_OUTPUT(setting.mode) && t < 500) // Minimum wait time to prevent LO from lockup
t = 500; t = 500;
while (repeats--) { while (repeats--) {
for (int i = 0; i < sweep_points; i++) { for (int i = 0; i < sweep_points; i++) {
RSSI = perform(break_on_operation, i, frequencies[i], setting.tracking); RSSI = perform(break_on_operation, i, frequencies[i], setting.tracking);
if (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE) { if (t && (MODE_INPUT(setting.mode) || setting.modulation == MO_NONE)) {
if (t < 30000) if (t < 30*ONE_MS_TIME)
my_microsecond_delay((int)t); my_microsecond_delay(t);
else else
osalThreadSleepMilliseconds(((int)t)/1000); osalThreadSleepMilliseconds(t / ONE_MS_TIME);
} }
// back to toplevel to handle ui operation // back to toplevel to handle ui operation
if ((operation_requested || shell_function) && break_on_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); ili9341_fill(OFFSETX, HEIGHT_NOSCROLL+1, WIDTH, 1, 0);
} }
@ -1572,7 +1575,7 @@ again:
} }
if (MODE_INPUT(setting.mode)) { 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, HEIGHT_NOSCROLL+1, i, 1, BRIGHT_COLOR_GREEN);
ili9341_fill(OFFSETX+i, HEIGHT_NOSCROLL+1, WIDTH-i, 1, 0); ili9341_fill(OFFSETX+i, HEIGHT_NOSCROLL+1, WIDTH-i, 1, 0);
} }
@ -1852,7 +1855,7 @@ again:
// redraw_marker(peak_marker, FALSE); // redraw_marker(peak_marker, FALSE);
// STOP_PROFILE; // 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); ili9341_fill(OFFSETX, HEIGHT_NOSCROLL+1, WIDTH, 1, 0);
} }
@ -2177,11 +2180,11 @@ void draw_cal_status(void)
ili9341_drawstring("Scan:", x, y); ili9341_drawstring("Scan:", x, y);
y += YSTEP; y += YSTEP;
float t = calc_min_sweep_time(); uint32_t t = calc_min_sweep_time_us();
if (t < setting.sweep_time) if (t < setting.sweep_time_us)
t = setting.sweep_time; t = setting.sweep_time_us;
setting.actual_sweep_time = t; setting.actual_sweep_time_us = t;
plot_printf(buf, BLEN, "%.3FS", t/1000.0); plot_printf(buf, BLEN, "%.3FS", (float)t/ONE_SECOND_TIME);
ili9341_drawstring(buf, x, y); ili9341_drawstring(buf, x, y);
// Cal output // Cal output

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

@ -1982,7 +1982,7 @@ lever_zoom_span(int status)
static void static void
lever_zoom_time(int status) 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) if (time < MINIMUM_SWEEP_TIME)
time = MINIMUM_SWEEP_TIME; time = MINIMUM_SWEEP_TIME;
if (status & EVT_UP) { if (status & EVT_UP) {
@ -1991,7 +1991,7 @@ lever_zoom_time(int status)
time = time*25/10; time = time*25/10;
} }
time = step_round(time); time = step_round(time);
set_sweep_time(time); set_sweep_time_us(time);
} }
static void static void

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

Loading…
Cancel
Save

Powered by TurnKey Linux.