How To Control 8x8x8 LED Cube w/ Column Anodes?

So, I'm building an 8x8x8 single color led cube, and I messed up and bent all 512 LEDs without looking up my controller chips first. The way I bent them, each tower will be an anode, and each level is the cathode.

Cathode control is simple enough, I'll use either FQP30N06L or IRLZ44N controlled by either a 74hc595 or directly by Arduino, depending on how many free pins I have. Is there a preference for either of these mosfets?

Anode control is where I messed up... 74hc595 can only source like 8.75mA, and TPIC6B595 can only sink current. Currently the only options I see are: 74hc595 and PNP transistors (2n3906), or TLC5940.

74hc595 pros:

  • easier to control brightness with Bit Angle Modulation
  • slightly cheaper than TLC5940

74hc595 cons:

  • 128 resistors (64 current limiting, 64 transistor base resistors)
  • lots of soldering, larger on perf board

TLC5940 pros:

  • All in one solution, less soldering
  • only 4 resistors required (1 per chip)

TLC5940 cons:

  • I've read that multiplexing is harder with the TLC5940

Which would you guys recommend I go with? Or is there another (reasonably cheap) option?

Tlc5940 is sink-only, so cannot drive your anodes.

I've never used them, but have a look at mic5891 which is a high current source driver with shift register built in.

Also possible is using 74hc595 to drive mic2981, but that would be twice as many chips.

Crap, I didn't know that about the TLC5940... The mic5891 would be the ideal choice for me, but I can't find them for less than $2 at mouser, plus $5 shipping, which is just too expensive for this project.
The 74hc595 + transistors will cost less than $5, at the expense of more time soldering. At least I learned my lesson before building an RGB cube.

I tried to calculate the resistor for the base of a 2n3906 sourcing 20ma, and I come up with a 2.2k resistor. Does that sound right?

2K2 will be fine. You could use 4K7 or 6K8.

Assuming gain is at least 60, you need a base current of

20mA / 60 = 0.33mA

Double that to 0.67mA to ensure saturation.

Base resistor should be at most

5.0 / 0.67 = 7K5