Keep reflevel

tinySA-v0.2
erikkaashoek 6 years ago
parent 9c0584abd7
commit c1c1681c29

@ -816,6 +816,7 @@ void self_test(int);
//extern int setting_test;
void wait_user(void);
void calibrate(void);
float to_dBm(float);
enum {
M_OFF, M_IMD, M_OIP3, M_PHASE_NOISE, M_STOP_BAND, M_PASS_BAND, M_LINEARITY

@ -457,10 +457,10 @@ value(const float v)
switch(setting.unit)
{
case U_DBMV:
return v+ 30.0 + 20.0*log10(sqrt(50));
return v + 30.0 + 20.0*log10(sqrt(50));
break;
case U_DBUV:
return v+ 90.0 + 20.0*log10(sqrt(50.0));
return v + 90.0 + 20.0*log10(sqrt(50.0));
break;
case U_MVOLT:
return pow(10, (v-30.0)/20.0) * sqrt(50.0) * 1000.0;
@ -480,6 +480,34 @@ value(const float v)
}
float
to_dBm(const float v)
{
switch(setting.unit)
{
case U_DBMV:
return v - 30.0 - 20.0*log10(sqrt(50));
break;
case U_DBUV:
return v - 90.0 - 20.0*log10(sqrt(50.0));
break;
case U_MVOLT:
return log10( v / (sqrt(50.0) * 1000.0)) * 20.0 + 30.0 ;
break;
case U_UVOLT:
return log10(v / (sqrt(50.0) * 1000000.0))*20.0 + 30.0;
break;
case U_MWATT:
return log10(v)*10.0;
break;
case U_UWATT:
return log10(v/1000.0)*10.0;
break;
}
// case U_DBM:
return v; // raw data is in logmag*10 format
}
#ifdef __VNA_

@ -217,10 +217,22 @@ void set_IF(int f)
void set_unit(int u)
{
if (UNIT_IS_LINEAR(setting.unit) && !UNIT_IS_LINEAR(u)) {
float r = to_dBm(setting.reflevel); // Get neutral unit
float s = to_dBm(setting.scale);
// float t = setting.trigger; // Is always in dBm
// float m = r - NGRIDSY*s;
setting.unit = u; // Switch unit
r = value(r); // Convert to target unit
s = value(s);
if (UNIT_IS_LINEAR(setting.unit)) {
set_reflevel(r);
set_scale(r/10.0);
} else {
r = 10 * round((r*1.2)/10.0);
set_scale(10);
}
setting.unit = u;
dirty = true;
}

@ -423,7 +423,7 @@ static const char * const keypad_mode_label[] = {
static const char * const keypad_mode_label[] = {
"error", "START", "STOP", "CENTER", "SPAN", "FREQ", "REFPOS", "SCALE", // 0-7
"\2ATTENUATE\0 0-31dB", "\2ACTUAL\0POWER", "IF", "\2SAMPLE\0TIME", "DRIVE", "LEVEL", "LEVEL", "LEVEL", // 8-15
"OFFSET" , "REPEATS", "OFFSET", "TRIGGER", "\2LEVEL\0SWEEP", "\2SWEEP\0SECONDS"// 16-
"OFFSET" , "REPEATS", "OFFSET", "\2TRIGGER\0LEVEL", "\2LEVEL\0SWEEP", "\2SWEEP\0SECONDS"// 16-
};
#endif
@ -1843,7 +1843,7 @@ set_numeric_value(void)
set_sweep_time(uistat.value);
break;
case KM_TRIGGER:
set_trigger_level(uistat.value);
set_trigger_level(to_dBm(uistat.value));
break;
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.