Corrected auto agc error in linear mode

tinySA-v0.2
erikkaashoek 6 years ago
parent a5dff1a84a
commit dbb685f794

@ -849,6 +849,7 @@ static void trace_get_value_string(
(void) point_count; (void) point_count;
float v; float v;
char buf2[11]; char buf2[11];
char buf3[6];
buf2[0]=' '; buf2[0]=' ';
uint32_t dfreq = 0; uint32_t dfreq = 0;
float rlevel = 0; float rlevel = 0;
@ -902,10 +903,17 @@ static void trace_get_value_string(
if (v == -INFINITY) if (v == -INFINITY)
plot_printf(buf, len, "-INF"); plot_printf(buf, len, "-INF");
else { else {
if (setting.unit) v = v - rlevel;
plot_printf(buf, len, "%s %.4f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":"")); if (UNIT_IS_LINEAR(setting.unit)) {
if (v < 100000)
plot_printf(buf3, sizeof(buf3), "%5f", v);
else
strcpy(buf3,"*****");
}
else else
plot_printf(buf, len, "%s %.1f%s%s", buf2, v - rlevel,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":"")); plot_printf(buf3, sizeof(buf3), "%5.1f", v);
buf3[5] = 0;
plot_printf(buf, len, "%s %s%s%s", buf2, buf3,unit_string[setting.unit],(mtype & M_NOISE?"/Hz":""));
} }
} }
@ -2069,20 +2077,18 @@ static void cell_draw_marker_info(int x0, int y0)
buf[k++] = 0; buf[k++] = 0;
ili9341_set_background(DEFAULT_BG_COLOR); ili9341_set_background(DEFAULT_BG_COLOR);
ili9341_set_foreground(marker_color(markers[i].mtype)); ili9341_set_foreground(marker_color(markers[i].mtype));
if (setting.unit) // if (setting.unit)
cell_drawstring(buf, xpos, ypos); // cell_drawstring(buf, xpos, ypos);
else // else
cell_drawstring_7x13(buf, xpos, ypos); cell_drawstring_7x13(buf, xpos, ypos);
xpos += strlen(buf)*7; xpos += strlen(buf)*7;
// cell_drawstring_size(buf, xpos, ypos, 2);
trace_get_value_string( trace_get_value_string(
t, buf, sizeof buf, t, buf, sizeof buf,
idx, measured[trace[t].channel], frequencies, sweep_points, ridx, markers[i].mtype); idx, measured[trace[t].channel], frequencies, sweep_points, ridx, markers[i].mtype);
if (setting.unit) // if (setting.unit)
cell_drawstring(buf, xpos, ypos); // cell_drawstring(buf, xpos, ypos);
else // else
cell_drawstring_7x13(buf, xpos, ypos); cell_drawstring_7x13(buf, xpos, ypos);
// cell_drawstring_size(buf, xpos+3*7, ypos, 2);
j++; j++;
} }
} }

@ -473,7 +473,7 @@ void toggle_AGC(void)
if (S_IS_AUTO(setting.agc )) if (S_IS_AUTO(setting.agc ))
setting.agc = false; setting.agc = false;
else if (setting.agc) else if (setting.agc)
setting.agc = S_AUTO_OFF; setting.agc = S_AUTO_ON;
else else
setting.agc = true; setting.agc = true;
dirty = true; dirty = true;
@ -503,9 +503,9 @@ void set_unit(int u)
set_scale(r/NGRIDY); set_scale(r/NGRIDY);
set_reflevel(setting.scale*NGRIDY); set_reflevel(setting.scale*NGRIDY);
if (S_IS_AUTO(setting.agc)) if (S_IS_AUTO(setting.agc))
setting.agc = S_AUTO_OFF; setting.agc = S_AUTO_ON;
if (S_IS_AUTO(setting.lna)) if (S_IS_AUTO(setting.lna))
setting.agc = S_AUTO_OFF; setting.lna = S_AUTO_OFF;
} else { } else {
r = 10 * round((r*1.2)/10.0); r = 10 * round((r*1.2)/10.0);
set_reflevel(r); set_reflevel(r);
@ -513,7 +513,7 @@ void set_unit(int u)
if (S_IS_AUTO(setting.agc)) if (S_IS_AUTO(setting.agc))
setting.agc = S_AUTO_ON; setting.agc = S_AUTO_ON;
if (S_IS_AUTO(setting.lna)) if (S_IS_AUTO(setting.lna))
setting.agc = S_AUTO_OFF; setting.lna = S_AUTO_OFF;
} }
dirty = true; dirty = true;
} }
@ -1491,10 +1491,12 @@ again:
dirty = true; // Must be above if(scandirty!!!!!) dirty = true; // Must be above if(scandirty!!!!!)
} }
} }
if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel && (max_index[0] > 0 || FREQ_IS_CW())) { // Auto reflevel if (max_index[0] > 0)
temppeakLevel = actual_t[max_index[0]];
float r = value(temppeakLevel);
if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel) { // Auto reflevel
if (UNIT_IS_LINEAR(setting.unit)) { // Linear scales can not have negative values if (UNIT_IS_LINEAR(setting.unit)) { // Linear scales can not have negative values
float r = value(actual_t[max_index[0]]); if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2.5 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel
if ((setting.reflevel > REFLEVEL_MIN && r < setting.reflevel / 2 ) || (setting.reflevel < REFLEVEL_MAX && r > setting.reflevel) ) { // ensure minimum and maximum reflevel
// r = setting.scale * (floor(r / setting.scale) + 1); // r = setting.scale * (floor(r / setting.scale) + 1);
#if 0 #if 0
float m = 1; float m = 1;
@ -1513,20 +1515,22 @@ again:
r = REFLEVEL_MIN; r = REFLEVEL_MIN;
if (r > REFLEVEL_MAX) if (r > REFLEVEL_MAX)
r = REFLEVEL_MAX; r = REFLEVEL_MAX;
if (r != setting.reflevel) {
//if (setting.scale * NGRIDY > r) //if (setting.scale * NGRIDY > r)
set_scale(r / NGRIDY); set_scale(r / NGRIDY);
set_reflevel(setting.scale*NGRIDY); set_reflevel(setting.scale*NGRIDY);
}
} }
} else { } else {
if (value(actual_t[max_index[0]]) < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) { if (r < setting.reflevel - setting.scale*NGRIDY || temp_min_level > setting.reflevel) {
set_reflevel(setting.scale*(floor(value(actual_t[max_index[0]])/setting.scale)+1)); set_reflevel(setting.scale*(floor(r/setting.scale)+1));
redraw_request |= REDRAW_CAL_STATUS; redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!) dirty = true; // Must be above if(scandirty!!!!!)
}else if (value(actual_t[max_index[0]]) > setting.reflevel - setting.scale/2) { }else if (r > setting.reflevel - setting.scale/2) {
set_reflevel(setting.reflevel + setting.scale); set_reflevel(setting.reflevel + setting.scale);
redraw_request |= REDRAW_CAL_STATUS; redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!) dirty = true; // Must be above if(scandirty!!!!!)
} else if (temp_min_level < setting.reflevel - 10.1 * setting.scale && value(actual_t[max_index[0]]) < setting.reflevel - setting.scale * 1.5) { } else if (temp_min_level < setting.reflevel - 10.1 * setting.scale && r < setting.reflevel - setting.scale * 1.5) {
set_reflevel(setting.reflevel - setting.scale); set_reflevel(setting.reflevel - setting.scale);
redraw_request |= REDRAW_CAL_STATUS; redraw_request |= REDRAW_CAL_STATUS;
dirty = true; // Must be above if(scandirty!!!!!) dirty = true; // Must be above if(scandirty!!!!!)
@ -2039,6 +2043,11 @@ void draw_cal_status(void)
buf[5] = 'B'; buf[5] = 'B';
ili9341_drawstring(buf, x, y); ili9341_drawstring(buf, x, y);
y += YSTEP + YSTEP/2 ;
strncpy(buf,&VERSION[8],6);
buf[6]=0;
ili9341_drawstring(buf, x, y);
// ili9341_set_background(DEFAULT_BG_COLOR); // ili9341_set_background(DEFAULT_BG_COLOR);
y = HEIGHT-7 + OFFSETY; y = HEIGHT-7 + OFFSETY;

Loading…
Cancel
Save

Powered by TurnKey Linux.