I’ve previously reviewed a couple of cheap function generators: the Elenco FG-500 and the JYEtech FG085 (also here and here). But I can’t remember whether I’ve reviewed the use of the function generator that is built into the Bitscope BS10 USB oscilloscope.
The Bitscope BS10 function generator is a rather minimal one: it is limited to the 0V–3.3V of the microprocessor on the BS10, with no amplification or offset adjustment. There is the appearance of an offset adjustment, but it appears to be done digitally before sending data to the DAC—it doesn’t increase the output range. For some purposes the DC offset is not a problem, but for some applications being able to center the output at 0V is important.
The user interface claims to go from 5Hz to 250kHz, but the output of the DAC seems to be low-pass filtered with a corner frequency of about 115kHz, so the upper frequency limit is pretty low.
A bigger concern I have with the Bitscope function generator is that in newer versions of the software they have made it essentially impossible to set a specific frequency (other than some presets that they provide). They have an “Act on Touch” user interface which requires inhuman degrees of hand control to set values (their old software let you type in the frequencies, which was a bit clunky but allowed precise setting). They are planning to fix the interface in the next release of the software, so that it will be possible to type numbers for several of the fields—the interface will still be clunky, but that will be a big improvement in usability. (You still won’t be able to see the waveform generator and trigger control panels at the same time.)
One test I did of the FG085 function generator was to measure its frequency using PteroDAQ. I found an off-by-one error there, which had already been noted by the manufacturer, and downloading a newer version of the firmware fixed the problem. I decided to do the same test for the Bitscope BS10 function generator, running it at 5Hz (the slowest I could set it) and recording the sine wave, triangle wave, and square wave. For the triangle and sine waves, I averaged many dejittered cycles with 20kHz sampling to get a clean waveform oversampled to 5µs (the 50µs transition times are an artifact of the sampling and averaging—the DAC settles single steps in less than 5µs, according to my analog oscilloscope).
I fed the square wave to a digital input and timed 200 cycles, to a resolution of 28ns. The period measurements with sine, triangle, and square wave were consistent (to within the measurement error—the resolution is obviously much better for the timing of the square wave), getting 199.60722ms as the period for the waveform, which is 511/512 of the correct 200ms (to within 22ppm, which is about what one would expect of the difference between two cheap crystal oscillators). So Bitscope has an off-by-one error in their waveform generation. (I’ve notified them, and they hope to fix this in the next release—the bug has been in their code for the past several releases without them noticing it.) The missing sample seems to be at the end of the downward ramp.
They claim that their waveform generator can do arbitrary waveforms “Up to 1024 steps (samples) per period are supported with arbitrary (user programmable) data.” Because they have only an 8-bit DAC (same as the FG085), there is no reason to go to more than 512 steps on a triangle wave—you are visiting each value exactly once in each direction then. For a sine wave, one could get slightly lower quantization error by having more steps (by making the timing of the transitions between steps slightly more accurate) even though the biggest contribution to the quantization error is the quantization of values rather than the quantization of time. But the steps that I see in the sine waveform are about 390µs apart which implies 512 steps per period for the built-in sine wave, not 1024. (I’ve not tried figuring out the interface for doing arbitrary waveforms—I believe it involves creating csv (comma-separated values) files of the desired waveform.
The 8-bit DAC on the Bitscope is better than the awful one on the FG085, but there are still noticeable glitches at the mid-point (not quite enough to make the DAC non-monotone).
Overall, the Bitscope function generator is better than nothing, but not particularly impressive. If the JYEtech FG085 hadn’t cheaped-out on putting in a real DAC, it would be by far a better function generator, but with the awful non-monotonicity of the FG085 fake DAC, it is a bit of tossup whether the Bitscope function generator or the FG085 is more useful.
If you buy the Bitscope oscilloscope, buy it for the oscilloscope capabilities—the after-thought function generator does not add much value.