Do you like my hacking? If so, please consider leaving something in the
Fediverse (Mastodon etc): @Sprite_tm@social. spritesmods.com
Because the VFDs already had seen a fair amount of use with mostly static text being displayed on
them, there was a fair amount of burn-in: the phosphors in the individual pixels was degraded, in some
cases so badly that you could read the text that usually was shown in those positions:
Unfortunately, there's no easy way to get rid of the burn-in: as far as I know, there's no way to rejuvenate the degraded phosphors. With the display driver being able to output grayscale data, however, what we can do is apply a correction factor to the data being sent to every pixel to get an even display. This means dimming the display a bit to the maximum brightness the most degraded pixel can send out: Say, we have two pixels we want to turn entirely on. One is degraded to output just 50% of its nominal light output, so we indeed turn it entirely on. The other one is not degraded and sends out the full amount of light. If we set its intensity to only 50%, the two pixels will have a similar amount of light output and the fact that one of them is severely degraded is effectively negated.
To do this, we need a map of how badly deteriorated each pixel is. Ofcourse, I could hand-tweak
every pixels intensity, but for sixteen thousand pixels, I found it more prudent to automate the process.
I ended up quickly hacking something together that turned on all the pixels in the display and using my
DSLR to take a photo of it that was as straight and sharp as I could:
I then postprocessed the image in The Gimp to do some perspective correction and to crop the image to
only the active part containing the pixels. A quick PHP program then tried to find each pixel to
calculate its average intensity: it would guess the estimated position of a pixel, then finetune that
estimate by looking for the pixels borders. It outputs the intensity value found for each pixel, as well
as a calibration image that shows where it has detected a pixel (in red) and the edges (blue pixels):