Broken LEDCube Recap

Analysis of what went wrong on Version 1 of RGB LEDCube.


The purpose of this project was 5 fold. It was to learn:

  1. how to solder
  2. how to interface with Arduino
  3. more about FFT
  4. how to connect running arduino to computer
  5. how to build an interface and use it in a game

The actual physical goal of this project is to build a working RGB LEDCube such that it can be used to show preprogrammed patterns, Live FFT frequency plot through speaker or line in 3.5mm jack, or be controlled externally by computer. 

This was done by breaking the project into very specific layers, that build on top of one another.

  1. Mechanical cube structure
  2. Board design 
  3. First Light
  4. FFT
  5. Interface
  6. Game

The cube successfully achieved all of these levels, but did so poorly, resulting in work in the higher levels constantly needing to be undone to fix lower level work. 


The cube failed in multiple ways as a reliable device. It failed from dying chips, large noise levels, and slow processing. 

The TLC5940 chips are no longer in production resulting in a large increase in cost as they are only available by Ebay resellers of dubious quality. After I burned 3 chips I had to stop and rebuild the entire cube as I only have 2 in reserve. Poor solder joints and clearance resulted in much of the poor performance electrically. 

For the FFT, it worked but was extremely terrible as the DC bus feeding the arduino was unstable due to the switching mosfets. This resulted in the Analog to Digital converter (ADC) bouncing and having vast swings in readings even with no input. This is being resolved with a buck boost converter separating the 2 areas of dirty and clean power. 

The FFT also took a very long time to run, so switching out the algorithm and processor is needed to have it run at more than 1 frame a second.

The attempted bluetooth conversion went extremely poorly due to difficulty interfacing with the bluetooth device, and unreliable physical connection to the board due to using standard breadboard jumper connections. 

The interface was painfully slow and very unreliable due to the underlying bluetooth issue as well as Java's poor method of opening serial or bluetooth sockets. 

Differences with V2

Version 2 was made using the Max6971 chipset, which were in a different orientation and pinout than the TLC5940. This resulted in a full board rebuild. At this point I started learning about KiCAD which is a free open source electrical schematic and Printed Circuit Board (PCB) designer. I built the board with the changes above fixed, switching over to an Arduino Nano IOT to bypass the bluetooth module completely. I ended up with a major error in the design of the board as the chips were powered at 5V but the logic of the Nano IOT is only 3.3V. This resulted in no detectable signal to the chip. The other issue is that there is no MAX6971 library for the arduino and making said library is out of my skillset currently.

Version 3

Version 3 hopes to correct all of these issues and is what is being described in detail on this site as well as in video form. (See link in menu). Version 3 goes back to TLC but this time using the TLC5948, the grandchild chip of the TLC5940. It has a similar pinout to the MAX6971 but has a library already built. I have managed to breadboard it and have a basic blink program working. I had to modify the library to have a very high GSCLK to make it work though. Code is in a changelog located here 

I look forward to posting more details about this as I continue working on this. Comments will be enabled once I find out how to make them


You need to log in to post comments
97cweb 2023-01-13 22:58:34


97cweb 2023-01-13 22:59:33 Edited: 2023-01-16 17:21:07

subcomment updated

97cweb 2023-02-21 14:36:34


97cweb 2023-01-13 23:30:48

sub subcomment

deleted 2023-01-16 14:39:43