Why? What are you trying to fix?

LEDs are great for improving the colors and lighting up dim inserts, but pinball machines were designed to use incandescent bulbs. LEDs can look harsh and have flicker issues due to the way lamps are controlled. LED OCD allows you to customize how lamps are controlled in order to make them react more like incandescent bulbs, or just better in general.


LED OCD connects between your power driver board and the controlled lamps. It monitors and interprets the signals that would normally control the lamps, then adjusts the control based on your configuration.

More technically, it re-drives the lamp matrix at 250 Hz (twice the rate of a Stern SAM machine, and 4 times the original rate of a Williams WPC) in order to eliminate flicker. It modifies the duty cycle based on your configuration to control brightness.

I still want more techincal info. What's it really doing?

First, due to lamp matrix, each lamp has a series of timeslots in which it is capable of being turned on. Neither Stern or WPC games do any kind of PWM within these timeslots. If a lamp is on during its timeslot, it is on for the entire timeslot. Stern games, however, DO use a duty cycle method of dimming where every other timeslot is on (or every third, etc). I am not aware of any WPC games that do this.

The LED OCD firmware handles this by sampling the state of each lamp during its timeslot, then doing a sliding window average. Simply, you can think of it this way: If we're doing a window of 8 samples and all 8 of them are ON, the firmware treats this as a B8 input brightness. If every third timeslot is on, the firmware does its average and ends up with either B3 or B2, depending on where the window is looking in the sequence. It does this for both Stern and WPC games, so IF any WPC games do dimming using the duty cycle method, the firmware would handle it.

Once the input brightness is determined, it is used to determine an output brightness for each lamp. It is not a direct mapping, since there are some smoothing algorithms and such going on.

Finally, to control the lamps, we still have to control the transistors as a lamp matrix, we just do it at a faster rate AND we do a PWM within the timeslots rather than a simple duty cycle method. By varying the percentage of the timeslot that is used, we can keep the refresh rate the same, even for lower duty cycles. The method that Stern uses reduces the refresh rate (since the lamps are only turned on every other timeslot, etc), and that reduced refresh rate leads to the massive flickering that you see when using LEDs in a Stern machine that is doing dimming.

Are special bulbs needed for this?

No, any mix of incandescent bulbs and LEDs can be used, and you can configure each to react differently. For example, say you like incandescent bulbs, but you have white inserts in your machine that look too yellow with incandescent bulbs. You can install LEDs under the white inserts, then dim them to match the incandescent bulbs that remain in the machine.

What if I already have non-ghosting bulbs?

Standard LEDs will give the OCD board more direct control over the LEDs, but you can still use non-ghosting bulbs with some minor restrictions.

Be aware that these graphs are just a representation of the observed ramp characteristics, and there's really pulsing and stuff going on behind the scenes.

With standard LEDs, you can usually set the minimum brightness as low as 6% without any noticeable flicker. This means that when a lamp is being turned on, the first step is from 0% to 6%, allowing for a gradual ramp.

With no-ghost LEDs, the bulb will internally squash anything below around 25%, causing it not to light, and it will flicker up to about 35%. I normally set them to 40% minimum brightness to be safe. This results in a step from 0% to 40% when a bulb is first turned on, and as a result, the on/off ramp is not as smooth. It is still better than stock LEDs, though.

Why is the total brightness lower with the OCD?

By default, the maximum brightness is set to 85%. You can set it to 100% if you want, but this may result in ghosting. It has to do with the increased matrix scan rate and the response time of the transistors. I'm using the OCD method of brightness control in a similar way that the no-ghost ROM patch for WPC games works, only here we have more control over the turn-off time in relation to the turn-on of the next column.

So, you do the customizing on a PC and then import the setting to the PCB with the USB?

Yes, customize the settings using a PC, upload them to the LED OCD board using a USB cable, and the settings are stored on the LED OCD board. You can then disconnect the PC and use the pinball machine as you normally would. Power it off and on, unplug it, whatever; the settings are retained on the board and used automatically when you turn on the game.

Can a Mac be used to configure the board instead of a PC?

I am working on a Web GUI and command line interface that can be used on Mac and Linux machines. More information is available here.

What machines does it work with?

Williams WPC95/WPC89, Williams System 11, Williams System 9, Stern SAM, Stern Whitestar, Data East, Capcom, and Spooky machines have been confirmed working.

What about GI?

Williams WPC95/WPC89 use a separate board called GI OCD. Stern games can use a separate board called GIzmo. Capcom games do not have separate GI, so the LED OCD for Capcom does everything other than flashers. More information is available here.