Step 5: Audio Interface

There are some things that you can never stop. After building Aurora 9x18, I just could not shake off wondering, what if I made it bigger...
So I finally broke down and made a bigger version of Aurora 9x18, Aurora 18x18.

Just as the name implies, it has twice the number of LEDs. The overall dimension is seven inches in diameter. They say bigger isn't always better, but in this instance bigger is indeed better.

Step 1: Background

Those who are not familier with my Aurora 9x18, please view its instructables here.
Aurora 18x18 is built upon the same foundation. Special PWM technique enabling just one microcontroller to control 18x3(R/G/B) channels of brightness levels, without specialized LED controller ICs.

In addition to doubling the number of LEDs, Aurora 18x18 has a built-in infrared remote receiver. Now you can control this beauty from across the room, without leaving your chair.

Step 2: Circuit & Parts

Here are the schematic, parts list, and other technical details. Please refer to Aurora 9x18 instructables for the explanations, as the circuit is basically the extension of it.

Parts List

4x 47 ohm (0603)

324x 150 ohm (0603)

18x 220 ohm (0603)

21x 1k ohm (0603)

4x 10k ohm (0603)

3x 0.1uF (0603)

2x 10uF (1206)

1x 47uF (1210)

3x DMP3098L (P-ch MOSFET)

18x MMBT2222A (NPN transistor)

1x PIC24FV16KA304 (* You need a PIC programmer such as PICKit 3, ICD2, ICD3 to program PIC24FV16KA304. PICKit 2 does not support this newer PIC.)

1x GP1UX311QS or equivalent (IR remote receiver)

1x Tactile Switch

324x Tricolor LED (common-cathode)

Infrared Remote Receiver
Aurora 18x18 recognizes Sony TV remote control protocol. Sony protocol happens to be one of the easiest to implement in firmware. It's also one of the most supported protocols. Virtually all universal remote controllers support Sony TV.
I'm planning to implement other protocol as well in the future though.

You say the PIC runs as 32 MHZ, so 8MIPS. You write that the width of the chart in your 9x18 instrutable is 8.1 ms. 8000000 / 1000 * 8.1 = 65536 SO the width of the chart is 65536 instructions.

There are 256 PWM steps and each step is split into three substeps. 65536 / 256 / 3 = 85 If the maximum width of each substep is 85 you cant increase the length of each pulse 256 times, but in the graph in the 9x18 instructable, this is what happens.

PIC24F is 16 bit microcontroller, running at 32MHz gives 16MIPS. (the architecture is different from 8 bit ones) Shortest pulse this PIC can produce is 62.5ns.

Not sure if I understand what you are saying, but my implementation on Aurora only has 128 levels of brightness levels.

R/G/B channels each go through 127 varying width of pulses to form equivalent of one phase of PWM output. The basic idea is to control the PWM output in exponential curve, instead of linear typical of usual PWM. And to control multiple LEDs, hardware produced pulses are multiplied with the software controlled output pins to keep the timing precise, and reduce the processing time.

My implementation also has a benefit of reducing visible flicker, by breaking up each PWM cycle into subcycles - similar to spread spectrum technique used by specialized LED controller chips.