From 6cd043a0cc3f9f7a9b9e329e2b04ac997407b229 Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 16 Jun 2025 16:29:10 +0200 Subject: Fix timebase setting. --- pyecsca/sca/scope/picoscope_sdk.py | 41 +++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 12 deletions(-) (limited to 'pyecsca') diff --git a/pyecsca/sca/scope/picoscope_sdk.py b/pyecsca/sca/scope/picoscope_sdk.py index 133b9a2..68562b9 100644 --- a/pyecsca/sca/scope/picoscope_sdk.py +++ b/pyecsca/sca/scope/picoscope_sdk.py @@ -183,28 +183,45 @@ class PicoScopeSdk(Scope): # pragma: no cover period = 1 / frequency if low_freq == 0 or period > period_bound: tb = floor(high_freq / frequency + high_subtract) + tb = max(tb, high_subtract + 1) actual_frequency = high_freq // (tb - high_subtract) else: tb = min(floor(log2(low_freq) - log2(frequency)), timebase_bound) actual_frequency = low_freq // 2**tb max_samples = ctypes.c_int32() - interval_nanoseconds = ctypes.c_int32() - assert_pico_ok( - self._dispatch_call( - "GetTimebase", - self.handle, - tb, - samples, - ctypes.byref(interval_nanoseconds), - 0, - ctypes.byref(max_samples), - 0, + if tb <= timebase_bound: + interval_nanoseconds = ctypes.c_float() + assert_pico_ok( + self._dispatch_call( + "GetTimebase2", + self.handle, + tb, + samples, + ctypes.byref(interval_nanoseconds), + 0, + ctypes.byref(max_samples), + 0, + ) + ) + else: + interval_nanoseconds = ctypes.c_int32() + assert_pico_ok( + self._dispatch_call( + "GetTimebase", + self.handle, + tb, + samples, + ctypes.byref(interval_nanoseconds), + 0, + ctypes.byref(max_samples), + 0, + ) ) - ) if max_samples.value < samples: pretrig = max_samples.value * (pretrig // samples) posttrig = max_samples.value - pretrig samples = max_samples.value + # TODO: actual_frequency and "1e9 / interval_nanoseconds.value" should be close self.frequency = actual_frequency self.samples = samples self.pretrig = pretrig -- cgit v1.2.3-70-g09d2