I needed to make a VGA plug-in board for the Propeller Backpack, so I could render some captured video. I used 510-ohm resistors, paralleling where needed to get 255 ohms (vs. Parallax's usual 470/240 combo). In order to test it, I used Kye's excellent 160 x 120 VGA driver from the OBEX to create a test pattern. (Unlike the Propeller library drivers, Kye's worked out-of-the-box with my display. Yay, Kye!) I discovered that I was only getting three easily-discernible intensity levels, rather than the four I expected: %10 and %11 looked almost the same.
Checking the output with the scope showed a signal that's 1V P-P. But one volt is not right. The VGA spec requires 0V for black and 0.7V
for maximum intensity. That's why %10 (0.75V) and %11 (1.00V) looked almost the same: both were above the maximum level. So I checked my Propeller Demo board and saw the same problem.
In order to come up with a minimally-invasive fix, I computed that a 100-ohm resistor from each of the RGB pins to ground would reduce the maximum output to just below 0.7V. A convenient place to add these resistors is between each color input pin on the DB-15 footprint and its associated Vss return connection. 0603 SMD resistors fit perfectly:
Here are the before and after pictures taken directly from the VGA screen:
Before the fix.
After the fix.
Here's a scope trace of one RGB channel after the fix:
The fix, although simple, is not perfect. The problem is that the output impedance (about 43 ohms) is wrong. It should be 75 ohms. (But, hey, the unmodified output impedance is 159 ohms, which is even further from optimum.) The optimum VGA DAC circuit (using 5% resistors) for each RGB pin is this:
It outputs 0.7V when both DAC pins are high and has a 75-ohm output impedance. If Parallax wanted to correct the output voltage (but not the impedance) without changing the PCB layout to add the loading resistors, the best 5% DAC resistors would be 820R and 430R, instead of 470R and 240R.