# LED's with bit modulation

I met a guy named Dave who referred me to an idea for driving LED's with a microcontroller using a shift-register and latch with a technique called "bit modulation." It's a derivative of pulse-width modulation except it's much better suited to driving multiple outputs concurrently.

In traditional pulse-width modulation (I'll assume it's all for LED's although it can apply to any averaged output) the LED is driven at full-brightness for some percentage of the time at a relatively high frequency (enough that the human eye's persistence of vision can't detect the blinking.) So, for instance, to create the illusion of 10% brightness, the LED is turned on for 1 unit of time and then off for 9 units of time. Usually the frequency of the wave remains the same and only the duty-cycle changes.

In bit-modulation, the desired modulation is assumed to be a binary value. The least significant bit (2^0) is read and the LED is turned on or off depending on its value for 1 unit (2^0 units) of time. The same is done for bit 1 (2^1) only for 2 units of time (2^1.) This continues for successive bits. The resulting brightness output averages to the value over 2^(n+1) clock cycles — the illusion works as long as the LED is on for [duty-cycle]% of the time and off for 100%-[duty-cycle]% regardless of how many times the LED is turned on or off during a cycle.

The huge advantage here is that a shift-register with a latch can be used to set the values for any number of LED's in a very short amount of time. That is, if you have X LED's, the same bit from each of the X LED's desired duty-cycles can be shifted in to the register, the latch can be triggered, and then the CPU will wait for (2^bit) time units until the next bit is loaded.

Unfortunately, I'm using a system where the red, green, and blue anodes are on three wires and the common-cathode of each LED cluster is brought back on one wire — so for X LED's I need 3+X wires. I dismissed the idea — although really cool — because it just wasn't practical for what I wanted to do.