Displaying graphics on an oscilloscope

[Andrew Rossignol] was curious one day and decided that he wanted to display graphics on an oscilloscope after playing around with the X and Y inputs.

[Andrew] started out with a resistor ladder on the DAC of his AVR Butterfly. He was able to to draw a line on the oscilloscope’s screen but bandwidth limitations forced him to reconsider his approach. A friend wrote a Python script to generate C code so the ports of the Butterfly can be toggled. After getting the Butterfly to generate a voltage for every non-white pixel, [Andrew] was impressed with the results so the code was modified determine the brightness of each pixel. The setup managed 10 shades of gray and careful selection of what graphics to post on the build log assured the project a little bit of blog cred.

Not sure I understand the operation… are you using time delays to produce the visible pixels and brightness levels? That certainly would decrease your bandwidth. You might consider a 3rd dac on the Z axis for that function, which would eliminate the need for delays.

Speaking of which, I’ve found multiple output dac chips are not that expensive (I’ve used 4 output 12 bit 7625 DAC chips in several oscope projects)… they also provide the ability to simultaneously update all outputs (I seem to recall using avr i/o ports meant having to update one port and then the other)

My oscilloscope doesn’t have a brightness input (that I know of, I only attained the scope a couple of days ago). To create an image, we output a voltage between 0 and 5 in the X and Y. In order to store these large images in the small memory of the atmel, we stored the image in code. Basically, the code consists of:

PORTB = 127;
_delay_us(5);

The longer that delay, the brighter the pixel.

This is in no way an ideal way to implement images on a scope but I managed to throw all this together with parts that I had on my wall in less than 4 hours.