
As I have mentioned before my friend Thomas has a YouTube channel where he teardown and repair old equipment.
He is repairing a lot of old gear that has CRT’s or Oscilloscope tubes and often he want to show this gear with “the lights on” and something interesting on the screens.
In the past we have made a ESP32 based vector graphics generator for showing images on oscilloscopes.
Vectors with a DDS generator
Since we both own the Siglent SDG6022X DDS Signal generator we have also made a PAL test image generator for generating TV test pictures using this generator.
For a long time we have been talking about the opportunity of using this generator for generating two channel X,Y vector graphics signals.
As it turns out the generator is able to load and play .arb files in so called I/Q or quadrature mode.
This mode is meant for generating digital communication signals where a arbitrary quadrature baseband signal is modulated on a RF carrier.
Interestingly this quadrature baseband signal is just a bunch of X,Y coordinates that are generated in sync, modulated with a radio frequency signal and sent to the two outputs of the generator.
If the modulation frequency is set to zero(Hz) the X,Y signals are just sent directly to the outputs.
Siglent does issue a piece of software for generating these .arb files but it is tightly focused on communication signals and does not let you supply your own data.
Unfortunately the format for .arb files ate not really publicly available so we did the next best thing and let one of our LLM friends rip on it.
As a result we now know how to generate these .arb files with our own X,Y vector content.
Behold the-
Vector files to .arb file converter:
How to use
Load an HPGL vector file and export it as a waveform for the Siglent SDG6022X arbitrary waveform generator. Click Open HPGL and select a .plt or .hpgl file — the preview canvas will render the vector paths immediately. Adjust Sample rate to control how fast the DAC replays the waveform (the figure repeats at sample rate ÷ total samples Hz); 30 MHz works well for oscilloscope display use. Use Point skip to thin out dense files and reduce the sample count. The PU retrace setting controls what happens during pen-up moves between strokes — Skip gives the cleanest result on a vector display. Optionally apply a Filter (Triangular is a safe first choice) to smooth sharp transitions. When you’re happy with the preview, the .ARB file downloads automatically. Transfer it to the SDG6022X via USB and load it under Waveforms → Arb → Files.
Best viewed on green glass
A fun side effect
As mentioned earlier the X,Y signals are meant to be modulating a RF carrier. We “abuse” this by setting the carrier frequency to zero Hertz to get two synchronized signals out of the generator.
It turns out if you do set this frequency to a very low frequency, say a tenth of a Hertz, the result is that the whole vector image rotates slowly around its center:
Why stop at vectors?
While making the vectors we kept endeing up trying to vectorize some bitmaps to display on the scopes. At some point we started to question wither it would be possible to just show greyscale bitmaps directly on the scope somehow.
This is the result:
OZ2CPU’s face on a Hameg scope
This is how it works
A bitmap image is resampled to the chosen Output resolution (default 256×256) and scanned in a zig-zag raster pattern — each pixel’s brightness determines how many times the beam dwells on that point, so brighter areas appear more intensely lit on the display.
Image file to .arb converter
How to use
Convert any image into a waveform that draws it on an oscilloscope or vector display using the Siglent SDG6022X. Click Open image and select a PNG, JPEG, or any browser-supported format. The Sample rate sets the DAC playback speed; 30 MHz gives a stable, bright image at normal oscilloscope timebase settings. The .ARB file downloads automatically — load it onto the SDG6022X via USB under Waveforms → Arb → Files. Lower output resolutions produce fewer samples and a faster, brighter refresh; higher resolutions preserve more image detail at the cost of a dimmer trace.
Another funny side effect
If you just play one channel of the arb signal on a regular oscilloscope with its own time base you actually get a passable image:

Future work
Right now these experiments are depending on owning a SDG2022X generator or similar DDS generator. I would like to go full circle make these functions available with a ESP32.
The ESP32 is capable of sending vector pairs at pretty high speed (probably 15-20MSps) so at least some of these imaging techniques could be available to a wider audience.
We are also talking about using this technique to make image output for other old types of displays like EGA, Radar displays and weather fax, where the original sources may be long gone.

