8x8x8 LED cube created with 5 MCP23017 I2C I/O expanders to minimize the microcontroller pins used to control all the 512 LEDs, so we need only 2 connection wires with the microcontroller, the SDA and SCK for the i2c comm with the I/O expanders. Each of the expander IC has 16 output/input digital pins configured as outputs, each of the 5 ICs has a different hardware address on the i2c bus. So 5 ICs in total, 4 are used for controlling the LED columns and one for controlling the layers(selecting). That's pretty much it, for controlling you can use just about any microcontroller which has i2c support. For my project i used an stm32f4discovery dev board because i had one laying around but you can use a far less powerful microcontroller.
Step 1: Hardware
!!! WATCH OUT, on the eagle schematic all the ICs have hardware address 0x00 (A0, A1, A2 are all connected to GND) but in fact those ICs must have different hardware addresses