Hi Uwe, hi sigrok team,
Just a reminder - I've submitted this fix for FX2 based scopes already
half a year ago.
If you do not like the extra frequencies, please correct at least the
100, 1000 and 10000 Hz values, 50 kHz doesn't work with 12 MHz CPU clock.
Easy fix: The settings of RCAP2 must be half as big in function "static
BOOL set_calibration_pulse(BYTE fs)"
https://github.com/sigrokproject/sigrok-firmware-fx2lafw/blob/b6ec4813b592757e39784b9b370f3b12ae876954/include/scope.inc#L265
There is also a small typo in line 276 (comment should read "10kHz").
Martin
-------- Weitergeleitete Nachricht --------
Betreff: Fix calibration frequency for scopes
Datum: Tue, 7 Apr 2020 21:01:37 +0200
Von: Martin Homuth-Rosemann <linuxau...@cryptomys.de>
An: sigrok-devel@lists.sourceforge.net
Hi Uwe, hi sigrok team,
The initial setting of the calibration frequency output (1 kHz)of the
FX2-based scopes is ok, but as soon as the user sets the frequency via
'set_calibration_pulse()' the output frequency is only half the
requested value, probably due to a recent change of CPU_FREQ from 24 to
12 MHz. The settings of RCAP2 must be half as big (see also
https://github.com/sigrokproject/sigrok-firmware-fx2lafw/commit/14728a53624f000db0fa8388ecdb8b021250322b).
Martin
PFA the patch that fixes the behaviour and adds also more frequency
choices (this is used in my OpenHantek6022 project).
--- a/include/scope.inc
+++ b/include/scope.inc
@@ -263,24 +263,54 @@ static BOOL set_samplerate(BYTE rate)
}
static BOOL set_calibration_pulse(BYTE fs)
-{
+{ // values for CLK_12M
switch (fs) {
- case 0: // 100Hz
+ case 105: // 50Hz
RCAP2L = -10000 & 0xff;
RCAP2H = (-10000 & 0xff00) >> 8;
return TRUE;
- case 1: // 1kHz
+ case 106: // 60Hz
+ RCAP2L = -8333 & 0xff;
+ RCAP2H = (-8333 & 0xff00) >> 8;
+ return TRUE;
+ case 0: // 100Hz
+ case 110: // 100Hz
+ RCAP2L = -5000 & 0xff;
+ RCAP2H = (-5000 & 0xff00) >> 8;
+ return TRUE;
+ case 120: // 200Hz
+ RCAP2L = -2500 & 0xff;
+ RCAP2H = (-2500 & 0xff00) >> 8;
+ return TRUE;
+ case 150: // 500Hz
RCAP2L = -1000 & 0xff;
RCAP2H = (-1000 & 0xff00) >> 8;
return TRUE;
- case 10: // 1kHz
- RCAP2L = (BYTE)(-100 & 0xff);
+ case 1: // 1kHz
+ RCAP2L = -500 & 0xff;
+ RCAP2H = (-500 & 0xff00) >> 8;
+ return TRUE;
+ case 2: // 2kHz
+ RCAP2L = -250 & 0xff;
+ RCAP2H = (-250 & 0xff00) >> 8;
+ return TRUE;
+ case 5: // 5kHz
+ RCAP2L = -100 & 0xff;
+ RCAP2H = (-100 & 0xff00) >> 8;
+ return TRUE;
+ case 10: // 10kHz
+ RCAP2L = (BYTE)(-50 & 0xff);
RCAP2H = 0xff;
return TRUE;
- case 50: // 50kHz
- RCAP2L = (BYTE)(-20 & 0xff);
+ case 20: // 20kHz
+ RCAP2L = (BYTE)(-25 & 0xff);
RCAP2H = 0xff;
return TRUE;
+// setting for 50 kHz doesn't work, gives 25 kHz (interrupt fires too often?)
+// case 50: // 50kHz
+// RCAP2L = (BYTE)(-10 & 0xff);
+// RCAP2H = 0xff;
+// return TRUE;
default:
return FALSE;
}
_______________________________________________
sigrok-devel mailing list
sigrok-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sigrok-devel