From c62a0b57614e0637f60044c421a69448badfc2eb Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 11 May 2020 08:06:01 +0200 Subject: [PATCH 1/2] Force reflevel with linear scales --- sa_core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sa_core.c b/sa_core.c index 666dee2..aee302b 100644 --- a/sa_core.c +++ b/sa_core.c @@ -458,6 +458,9 @@ void set_offset(float offset) void set_scale(float s) { setting.scale = s; + if (setting.unit == U_VOLT || setting.unit == U_MWATT) { + set_reflevel(9 * s); + } set_trace_scale(0, s); set_trace_scale(1, s); set_trace_scale(2, s); From 2667955977d3c713f527c40d0e0c364cdb3cad73 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 11 May 2020 11:56:12 +0200 Subject: [PATCH 2/2] Autorange for linear scales --- sa_core.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/sa_core.c b/sa_core.c index aee302b..b26718d 100644 --- a/sa_core.c +++ b/sa_core.c @@ -1141,6 +1141,18 @@ static bool sweep(bool break_on_operation) } } if (!in_selftest && MODE_INPUT(setting.mode) && setting.auto_reflevel && max_index[0] > 0) { + if (setting.unit == U_VOLT || setting.unit == U_MWATT) { + float t = value(actual_t[max_index[0]]); + if (t < setting.reflevel / 2 || t> setting.reflevel) { + float m = 1; + t = t * 1.2; + while (t > 10) { m *= 10; t/=10; } + while (t < 1) { m /= 10; t*=10; } + t = round(t); + set_scale(t*m / 9); + set_reflevel(t*m); + } + } else { if (value(actual_t[max_index[0]]) > setting.reflevel - setting.scale/2) { set_reflevel(setting.reflevel + setting.scale); redraw_request |= REDRAW_CAL_STATUS; @@ -1154,6 +1166,7 @@ static bool sweep(bool break_on_operation) redraw_request |= REDRAW_CAL_STATUS; dirty = true; // Must be above if(scandirty!!!!!) } + } } #if 1 if (MODE_INPUT(setting.mode)) {