You are on page 1of 116

let's make

Explore(/tag/typeid/)

Publish(/about/create.jsp)

Classes(/classes/) NEW!
Featured: share (/tag/typeid/categorycraft/channelleather/)
Leather(/tag/typeid/categorycraft/channelleather/)
what you make
(/)
(/tag/typeid/categoryoutside/channelcamping/) Camping(/tag/typeid/categoryoutside/channelcamping/)

You (/you/)

(/id/intel/) IntelIoT(/id/intel/)

(/id/Fusion/) Fusion360(/id/Fusion/)

(/file/FUXO1RWGICYBAOS/)

Createyourown8x8x8LEDCube3dimensionaldisplay!
WebelievethisInstructableisthemostcomprehensivestepbystepguideto
buildan8x8x8LEDCubeeverpublishedontheintertubes.Itwillteachyou
everythingfromtheoryofoperation,howtobuildthecube,totheinnerworkings
ofthesoftware.Wewilltakeyouthroughthesoftwarestepbystep,boththelow
leveldrivers/routinesandhowtocreateawesomeanimations.Thesoftware
aspectofLEDcubesisoftenoverlooked,butaLEDcubeisonlyasawesome
asthesoftwareitruns.
AbouthalfwaythroughtheInstructable,youwillactuallyhaveafullyfunctional
LEDcube.Theremainingstepswillshowyouhowtocreatethesoftware.
Avideoisworthathousandwords.I'lljustleaveituptothisvideotoconvince
youthatthisisthenextprojectyouwillbebuilding:

AboutThisInstructable

8 5.188.409 views
4.064 favorites

Posted:
Jan01,2011
License:

chr(/member/chr/)
Follow

1525

(/member/chr/)
Bio:IlikemicrocontrollersandLEDs:D
Morebychr:

(/id/Reverse

EngineeringRGBLEDBulbwithIR

remote/)

(/id/USB

controlledhomeautomationhack/)

(/id/LedCube

ImadethisLEDcubetogetherwithmyfriendchiller.Thebuildtookabout4days
fromsmallscaleprototypingtocompletedcube.Thenanothercoupleofhoursto
debugsomefaultytransistors.
Thesoftwareisprobablyanother45daysofworkcombined.

Step1:Skillsrequired

(/file/FOLS1PKGI0TMHA2/)

Atfirstglancethisprojectmightseemlikeanoverlycomplexanddauntingtask.
However,wearedealingwithdigitalelectronicshere,soeverythingiseitheron
oroff!
I'vebeendoingelectronicsforalongtime,andforyearsistruggledwithanalog

8x8x8/)
Addinstructableto:

; Group

circuits.Theanalogcircuitsfailedoverhalfthetimeevenififollowed
instructions.Oneresistororcapacitorwithaslightlywrongvalue,andthecircuit
doesn'twork.
About4yearsago,Idecidedtogivemicrocontrollersatry.Thiscompletely
changedmyrelationshipwithelectronics.Iwentfromonlybeingabletobuild
simpleanalogcircuits,tobeingabletobuildalmostanything!
Adigitalcircuitdoesn'tcareifaresistoris1kohmor2kohm,aslongasitcan
distinguishhighfromlow.Andbelieveme,thismakesitALOTeasiertodo
electronics!
Withthatsaid,therearestillsomethingsyoushouldknowbeforeventuringout
andbuildingthisratherlargeproject.
Youshouldhaveanunderstandingof:
Basicelectronics.(Wewouldrecommendagainstbuildingthisasyourvery
firstelectronicsproject.ButpleasereadtheInstructable.You'llstilllearna
lot!)
Howtosolder.
Howtouseamultimeteretc.
WritingcodeinC(optional.Weprovideafullyfunctionalprogram,readyto
go)
Youshouldalsohavepatienceandagenerousamountoffreetime.

Step2:Componentlist

(/file/FIBV133GI0TMHAK/)

(/file/F8I9FOLGI0TK31D/)

(/file/FEMQ0VKGICYB3TQ/)

(/file/FYFVSSIGI0TMHAI/)

(/file/FHUMXDOGI0TK42U/)

(/file/FE7QJ1VGI0TDOUJ/)

ShowAllItems

HereiswhatyouneedtomakeaLEDcube:
512xLEDs(plussomeextraformakingmistakes!)
64xresistors.(seeseparatestepforohmvalue)
1xor2xlargeprototypePCBs.Thetypewithcopper"eyes",seeimage.
1xATmega32microcontroller(youcanalsousethepincompatible
ATmega16)
3xstatusLEDs.Youchoosecolorandsize.
3xresistorsforthestatusLEDs.
8x74HC574ICs
16xPN2222transistors
16x1kresistors
1x74HC138IC
1xMaximMAX232IC
1x14.7456MHzcrustal
2x22pFceramiccapacitors
16x0.1uFceramiccapacitors
3x1000uFelectrolyticcapacitor
3x10uFelectrolyticcapacitor
1x100uFelectrolyticcapacitors
8x20pinICsockets
1x40pinICsocket
2x16pinICsocket
1x2pinscrewterminal
1x2wirecablewithplugs
9x8pinterminalpins
1x4pinterminalpins,rightangle
2x16pinribboncableconnector
1x10pinribboncableconnector
Ribboncable
2xpushbuttons
2xribboncableplugs
9x8pinfemaleheaderplugs
Serialcableand4pinfemalepinheader
Pieceofwoodfortemplateandbase
8xoptionalpullupresistorsforlayers
5vpowersupply(seeseparatestepforpowersupply)
Totalestimatedbuildcost:67USD.Seeattachedpricelist.

pricelist.xls(/files/orig/FI7/UP2U/GIJG3QAC/FI7UP2UGIJG3QAC.xls)

Step3:Orderingcomponents

(/file/FOZUK3YGICYB6W6/)

(/file/FR2AFHFGICYB6W3/)

(/file/FLUD611GICYB6W1/)

(/file/F9GM4VVGICYB6W2/)

(/file/FDUN9GOGICYB6W0/)

(/file/FWLG825GICYB6VZ/)

WeseealotofpeopleaskingforpartnumbersforDigiKey,Mouserorotherbig
electronicsstores.
Whenyou'reworkingwithhobbyelectronics,youdon'tnecessarilyneedthe
mostexpensivecomponentswiththebestquality.
Mostofthetime,itismoreimportanttoactuallyhavethecomponentvalueat
handwhenyouneedit.
WearebigfansofbuyingreallycheapcomponentlotsoneBay.Youcanget

assortmentsofresistor,capacitors,transistorsandeverythinginbetween.Ifyou
buythesetypesofassortments,youwillalmostalwayshavethepartsyouneed
inyourpartcollection.
For17USDyoucanget2000resistorsof50differentvalues.Greatvalue,and
veryconvenient.
TrydoingsomeBaysearchesandbuysomecomponentsforfutureprojects!
AnotheroneofourfavoritestoresisFuturlec(http://www.futurlec.com/
(http://www.futurlec.com/)).Theyhaveeverythingyouneed.Thethingtheydon't
haveis1000differentversionsofthatthingthatyouneed,sobrowsingtheir
inventoryisalotlessconfusingthanbuyingfromthosebiggercompanies.

Step4:WhatisaLEDcube

(/file/F9WCPGSGICYB3QA/)

(/file/F7UFAFEGI0TK41S/)

ALEDcubeislikeaLEDscreen,butitisspecialinthatithasathirddimension,
makingit3D.Thinkofitasmanytransparentlowresolutiondisplays.Innormal
displaysitisnormaltotrytostackthepixelsascloseaspossibleinorderto
makeitlookbetter,butinacubeonemustbeabletoseetroughit,andmore
spacingbetweenthepixels(actuallyit'svoxelssinceitisin3d)isneeded.The
spacingisatradeoffbetweenhoweasythelayersbehinditisseen,andvoxel
fidelity.
SinceitisalotmoreworkmakingaLEDcubethanaLEDdisplay,theyare
usuallylowresolution.ALEDdisplayof8x8pixelsisonly64LEDs,butaLED
cubein8x8x8is512LEDs,anorderofmagnitudehardertomake!Thisisthe
reasonLEDcubesareonlymadeinlowresolution.
ALEDcubedoesnothavetobesymetrical,itispossibletomakea7x8x9,or
evenoddlyshapedones.

Step5:HowdoesaLEDcubework

(/file/FTI0UCQGICYB3A7/)

(/file/FIVIJHXGICYB39I/)

(/file/FY9VSJ6GI0TK33H/)

(/file/F55OUWYGI0TMH4I/)

ThisLEDcubehas512LEDs.Obviously,havingadedicatedIOportforeach
LEDwouldbeveryimpractical.Youwouldneedamicrocontrollerwith512IO
ports,andrun512wiresthroughthecube.
Instead,LEDcubesrelyonanopticalphenomenoncalledpersistenceofvision
(POV).
Ifyouflashaledreallyfast,theimagewillstayonyourretinaforalittlewhile
aftertheledturnsoff.
Byflashingeachlayerofthecubeoneafteranotherreallyreallyfast,itgivesthe
illusionofa3dimage,whenintfactyouarelookingataseriesof2dimages
stackedontoponeanother.Thisisalsocalledmultiplexing.
Withthissetup,weonlyneed64(fortheanodes)+8(foreachlayer)IOportsto
controltheLEDcube.
Inthevideo,theprocessissloweddownenoughforyoutoseeit,thenitruns
fasterandfasteruntiltherefreshrateisfastenoughforthecameratocatchthe
POVeffect.

Step6:TheanatomyofaLEDcube

(/file/FHTWYK3GI0TDMW9/)

(/file/F4BH8NDGI0TK2DZ/)

(/file/FJXR7WSGI0TDMW5/)

Wearegoingtobetalkingaboutanodes,cathodes,columnsandlayers,solets
takeamomenttogetfamiliarwiththeanatomyofaLEDcube.

AnLEDhastwolegs.Onepositive(theanode)andonenegative(cathode).In
ordertolightupanLED,youhavetoruncurrentfromthepositivetothe
negativeleg.(Ifiremembercorrectlytheactualflowofelectronsistheotherway
around.Butlet'ssticktotheflowofcurrentwhichisfrompositivetonegativefor
now).
TheLEDcubeismadeupofcolumnsandlayers.Thecathodelegsofevery
LEDinalayeraresolderedtogether.Alltheanodelegsinonecolumnare
solderedtogether.
Eachofthe64columnsareconnectedtothecontrollerboardwithaseparate
wire.Eachcolumncanbecontrolledindividually.Eachofthe8layersalsohave
aseparatewiregoingtothecontrollerboard.
Eachofthelayersareconnectedtoatransistorthatenablesthecubetoturnon
andofftheflowofcurrentthrougheachlayer.
Byonlyturningonthetransistorforonelayer,currentfromtheanodecolumns
canonlyflowthroughthatlayer.Thetransistorsfortheotherlayersareoff,and
theimageoutputtedonthe64anodewiresareonlyshownontheselected
layer.
Todisplaythenextlayer,simplyturnoffthetransistorforthecurrentlayer,
changetheimageonthe64anodewirestotheimageforthenextlayer.Then
turnonthetransistorforthenextlayer.Rinseandrepeatveryveryfast.
Thelayerswillbereferredtoaslayers,cathodelayersorgroundlayers.
Thecolumnswillbereferredtoascolumns,anodecolumnsoranodes.

Step7:CubesizeandIOportrequirements

(/file/FKD2RXGGI0TMG91/)

(/file/FM49FA0GI0TMG94/)

TodriveaLEDcube,youneedtwosetsofIOports.OnetosourcealltheLED
anodecolumns,andonetosinkallthecathodelayers.
Fortheanodesideofthecube,you'llneedx^2IOports,wherex^3isthesizeof
yourLEDcube.Foran8x8x8(x=8),youneed64IOportstodrivetheLED
anodes.(8x8).Youalsoneed8IOportstodrivethecathodes.
KeepinmindthatthenumberofIOportswillincreaseexponentially.Sowillthe
numberofLEDs.YoucanseealistofIOpinrequirementfordifferentcubesizes
intable1.
ForasmallLEDcube,3x3x3or4x4x4,youmightgetawaywithconnectingthe
cathodelayersdirectlytoamicrocontrollerIOpin.Foralargercubehowever,
thecurrentgoingthroughthispinwillbetoohigh.Foran8x8x8LEDcubewith
only10mAperLED,youneedtoswitch0.64Ampere.Seetable2foran
overviewofpowerrequirementsforaLEDlayerofdifferentsizes.Thistable
showsthecurrentdrawwithallLEDson.
Ifyouareplanningtobuildalargercubethan8x8x8orrunningeachLEDat
morethan10ishmA,remembertotakeintoconsiderationthatyourlayer
transistorsmustbeabletohandlethatload.

Step8:IOportexpansion,moremultiplexing

(/file/F84E01IGI0TK2FJ/)

Wegatheredfromthelaststepthatan8x8x8LEDcuberequires64+8IOlines
tooperate.NoAVRmicrocontrollerwithaDIPpackage(thekindofthrough
holechipyoucaneasilysolderoruseinabreadboard,DualInlinePackage)
havethatmanyIOlinesavailable.
Togetgettherequired64outputlinesneededfortheLEDanodes,wewill
createasimplemultiplexercircuit.Thiscircuitwillmultiplex11IOlinesinto64
outputlines.
Themultiplexerisbuiltbyusingacomponentcalledalatchoraflipflop.Wewill
callthemlatchesfromhereon.
Thismultiplexerusesan8bitlatchICcalled74HC574.Thischiphasthe
followingpins:
8inputs(D07)
8outputs(Q07)
1"latch"pin(CP)
1outputenablepin(OE)
Thejobofthelatchistoserveasakindofsimplememory.Thelatchcanhold8
bitsofinformation,andthese8bitsarerepresentedontheoutputpins.Consider
alatchwithanLEDconnectedtooutputQ0.ToturnthisLEDon,applyV+(1)to
inputD0,thenpulltheCPpinlow(GND),thenhigh(V+).
WhentheCPpinchangesfromlowtohigh,thestateoftheinputD0is"latched"
ontotheoutputQ0,andthisoutputstaysinthatstateregardlessoffuture
changesinthestatusofinputD0,untilnewdataisloadedbypullingtheCPpin
lowandhighagain.
Tomakealatcharraythatcanremembertheon/offstateof64LEDsweneed8
oftheselatches.TheinputsD07ofallthelatchesareconnectedtogetherinan
8bitbus.

Toloadtheon/offstatesofallthe64LEDswesimplydothis:Loadthedataof
thefirstlatchontothebus.pulltheCPpinofthefirstlatchlowthenhigh.Load
thedataofthesecondlatchontothebus.pulltheCPpinofthesecondlatchlow
thenhigh.Loadthedataofthethirdlatchontothebus.pulltheCPpinofthe
thirdlatchlowthenhigh.Rinseandrepeat.
Theonlyproblemwiththissetupisthatweneed8IOlinestocontroltheCPline
foreachlatch.Thesolutionistousea74HC138.ThisIChas3inputlinesand8
outputs.Theinputlinesareusedtocontrolwhichofthe8outputlinesthatwill
bepulledlowatanytime.Therestwillbehigh.Eachouttheoutputsonthe
74HC138isconnectedtotheCPpinononeofthelatches.
Thefollowingpseudocodewillloadthecontentsofabufferarrayontothelatch
array:
//PORTA=databus
//PORTB=addressbus(74HC138)
//charbuffer[8]holds64bitsofdataforthelatcharray
PORTB=0x00//ThispullsCPonlatch1low.
for(i=0i<8i++)
{
PORTA=buffer[i]
PORTB=i+1
}
Theoutputsofthe74HC138areactiveLOW.Thatmeansthattheoutputthatis
activeispulledLOW.Thelatchpin(CP)onthelatchisarisingedgetrigger,
meaningthatthedataislatchedwhenitchangesfromLOWtoHIGH.Totrigger
therightlatch,the74HC138needstostayonestepaheadofthecounteri.Ifit
hadbeenanactiveHIGHchip,wecouldwritePORTB=iYouareprobably
thinking,whathappenswhenthecounterreaches7,thatwouldmeanthatthe
outputonPORTBis8(1000binary)onthelastiterationofthefor()loop.Only
thefirst8bitsofPORTBareconnectedtothe74HC138.SowhenportB
outputs8or1000inbinary,the74HC138reads000inbinary,thuscompleting
itscycle.(itstartedat0).The74HC138nowoutputsthefollowingsequence:12
345670,thusgivingachangefromLOWtoHIGHforthecurrentlatch
accordingtocounteri.

multiplex_theoretical.sch(/files/orig/FHJ/ASA2/GICYB6DA/FHJASA2GICYB6DA.tmp)

Step9:IOportexpansion,alternativesolution

(/file/FMS0ULIGI0TMG9R/)

Thereisanothersolutionforprovidingmoreoutputlines.Wewentwiththelatch
basedmultiplexerbecausewehad8latchesavailablewhenbuildingtheLED
cube.
Youcanalsouseaserialinparalleloutshiftregistertoget64outputlines.
74HC164isan8bitshiftregister.Thischiphastwoinputs(mayalsohavean
outputenablepin,butwewillignorethisinthisexample).
data
clock
Everytimetheclockinputchangesfromlowtohigh,thedatainQ6ismoved
intoQ7,Q5intoQ6,Q4intoQ5andsoon.Everythingisshiftedonepositionto
theright(assumingthatQ0istotheleft).Thestateofthedatainputlineis
shiftedintoQ0.
Thewayyouwouldnormallyloaddataintoachiplikethis,istotakeabyteand
bitshiftitintothechiponebitatatime.ThisusesalotofCPUcycles.However,
wehavetouse8ofthesechipstogetourdesired64outputlines.Wesimply
connectthedatainputofeachshiftregistertoeachofthe8bitsonaportonthe
microcontroller.Alltheclockinputsareconnectedtogetherandconnectedtoa
pinonanotherIOport.
Thissetupwilluse9IOlinesonthemicrocontroller.
Intheprevioussolution,eachbyteinourbufferarraywasplacedinit'sownlatch
IC.Inthissetupeachbytewillbedistributedoverall8shiftregisters,withone
bitineach.
Thefollowingpseudocodewilltransferthecontentsofa64bitbufferarrayto
theshiftregisters.
//PORTA:bit0connectedtoshiftregister0'sdatainput,bit1toshiftregister1
andsoon.
//PORTB:bit0connectedtoalltheclockinputs

//charbuffer[8]holds64bitsofdata
for(i=0i<8i++)
{
PORTB=0x00//Pulltheclocklinelow,sowecanpullithighlaterto
triggertheshiftregister
PORTA=buffer[i]//LoadabyteofdataontoportA
PORTB=0x01//Pulltheclocklinehightoshiftdataintotheshift
registers.
}
Thisisperhapsabettersolution,butwehadtousewhatwehadavailablewhen
buildingthecube.Forthepurposesofthisinstructable,wewillbeusingalatch
basedmultiplexerforIOportexpansion.Feelfreetousethissolutioninsteadif
youunderstandhowtheybothwork.
Withthissetup,thecontentsofthebufferwillbe"rotated"90degreescompared
tothelatchbasedmultiplexer.Wireupyourcubeaccordingly,orsimplyjustturn
it90degreestocompensate)

multiplex_alternative.sch(/files/orig/FAH/098K/GICYB6DK/FAH098KGICYB6DK.tmp)

Step10:Powersupplyconsiderations

(/file/FNBP4Z6GI0TK41W/)

Thisstepiseasytooverlook,asLEDsthemselvesdon'tdrawthatmuchcurrent.
Butrememberthatthiscircuitwilldraw64timesthemAofyourLEDsiftheyare
allon.Inadditiontothat,theAVRandthelatchICsalsodrawscurrent.
TocalculatethecurrentdrawofyourLEDs,connectaledtoa5Vpowersupply
withtheresistoryouintendtouse,andmeasurethecurrentinmA.Multiplythis

numberby64,andyouhavethepowerrequirementsforthecubeitself.Addto
that1520mAfortheAVRandacoupleofmAforeachlatchIC.
Ourfirstattemptatapowersupplywastouseastepdownvoltageregulator,
LM7805,witha12Vwallwart.Atover500mAand12Vinput,thischipbecame
extremelyhot,andwasn'tabletosupplythedesiredcurrent.
Welaterremovedthischip,andsolderedawirefromtheinputtotheoutputpin
wherethechipusedtobe.
Wenowusearegulatedcomputerpowersupplytogetastablehighcurrent5V
supply.

Step11:Buyapowersupply

(/file/FAY1SNJGI0TDMXN/)

(/file/FL7ZQWVGI0TK2FS/)

Ifyoudon'thavethepartsnecessarytobuilda5VPSU,youcanbuyone.
eBayisagreatplacetobuythesethings.
Searchfor"5vpowersupply"andlimitthesearchto"Business&Industrial",and
you'llgetalotofsuitablepowersupplies.About15buckswillgetyouanice
PSU.

Step12:Buildapowersupply

(/file/FSCAS9QGI0TK41X/)

(/file/FOV5AJWGICYB3QU/)

(/file/FTPON1YGI0TK41Y/)

AcoupleofyearsbeforewebuilttheLEDcube,wemadeourselfanicelittlelab
powersupplyfromanoldexternalSCSIdrive.Thisiswhatwehavebeenusing
topowertheLEDcube.
PCpowersuppliesarenice,becausetheyhaveregulated12Vand5Vrailswith
highAmpereratings.
YoucanuseeitheraregularATorATXpowersupplyorandoldexternalhard
driveenclosure.
IfyouwanttouseanATXpowersupply,youhavetoconnectthegreenwireon
themotherboardconnectortoground(black).Thiswillpoweritup.

Externalharddriveenclosuresareespeciallynicetouseaspowersupplies.
Theyalreadyhaveaconvenientenclosure.Theonlythingyouhavetodoisto
addexternalpowerterminals.
LEDCube8x8x8
by

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)

Powersupplieshavealotofwires,buttheeasiestplacetogetthepoweryou
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
needisthroughamolexconnector.Thatisthekindofplugyoufindonhard
drives(beforetheageofSATA).
BlackisGNDYellowis+12VRedis+5V

HereisanimageofourlabPSU.Wehave12Voutput,5Voutputwithan
amperemeterand5Voutputwithoutanamperemeter.Weusethesecond5V
outputtopoweran80mmPCfantosuckorblowfumesawaywhenwesolder.
Wewon'tgetintoanymoredetailsofhowtomakeapowersupplyhere.I'm
sureyoucanfindanotherinstructableonhowtodothat.

Step13:ChooseyourLEDs

(/file/F4PZYNZGI0TMHA5/)

(/file/FB7MNVUGICYB3R9/)

(/file/F7CE14YGICYB3RH/)

(/file/F1UXKRKGI0TDOU4/)

TherearemanythingstoconsiderwhenchoosingLEDs.
1)
YouwanttheLEDcubetobeequallyvisiblefromallsides.Thereforewe
stronglyrecommendusingdiffusedLEDs.AclearLEDwillshootthemajorityof

IMadeit!

Favorite

Share

it'slightoutthetopoftheLED.AdiffusedLEDwillbemoreorlessequallybright
fromallsides.ClearLEDsalsocreateanotherproblem.Ifyourcubeismadeup
ofclearLEDs.TheLEDswillalsopartiallyilluminatetheLEDsabovethem,
(/contest/epilog/)
sincemostofthelightisdirectedupwards.Thiscreatessomeunwanted
LEDCube8x8x8 by
ghostingeffects.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
IMadeit!
Collection
h(/id/LedCube8x8x8/) 72Steps .
WeactuallyordereddiffusedLEDsfromeBay,butgot1000clearLEDsinstead.
ShippingthembacktoChinatoreceiveareplacementwouldhavetakentoo
muchtime,sowedecidedtousedtheclearLEDsinstead.Itworksfine,butthe
cubeisalotbrighterwhenviewedfromthetopasopposedtothesides.

TheLEDsweorderedfromeBaywereactuallydescribedas"DefusedLEDs".
Maybeweshouldhavetakenthehint)Defusingissomethingyoudotoabomb
whenyouwanttopreventitfromblowingup,hehe.
2)
LargerLEDsgivesyouabiggerandbrighterpixel,butsincesincethecubeis8
layersdeep,youwantenoughroomtoseeallthewaythroughtothefurthest
level.Wewentwith3mmLEDsbecausewewantedthecubetobeas
"transparent"aspossible.Ourrecommendationistouse3mmdiffusedLEDs.
3)
Youcanbuyverycheaplotsof1000LEDsoneBay.Butkeepinmindthatthe
qualityoftheproductmaybereflectedinit'sprice.Wethinkthatthereisless
chanceofLEDmalfunctionifyoubuybetterquality/moreexpensiveLEDs.
4)
SquareLEDswouldprobablylookcoolto,butthenyouneedtomakea
solderingtemplatethatcanaccommodatesquareLEDs.With3mmroundLEDs,
allyouneedisa3mmdrillbit.
5)
Sincethecubereliesonmultiplexingandpersistenceofvisiontocreateimages,
eachlayerisonlyturnedonfor1/8ofthetime.Thisiscalleda1/8dutycycle.To
compensateforthis,theLEDshavetobebrightenoughtoproducethewanted
brightnesslevelat1/8dutycycle.
6)
Leglength.ThecubedesigninthisinstructableusesthelegsoftheLEDs
themselvesastheskeletonforthecube.TheleglengthoftheLEDsmustbe
equaltoorgreaterthanthedistanceyouwantbetweeneachLED.

Step14:Chooseyourresistors

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F5S0LOMGICYB3SB/)

Therearethreethingstoconsiderwhenchoosingthevalueofyourresistors,the
LEDs,the74HC574thatdrivetheLEDs,andthetransistorsusedtoswitchthe
layersonandoff.
1)
IfyourLEDscamewithadatasheet,thereshouldbesomeampereratingsin
there.Usually,therearetworatings,onemAforcontinuousload,andmAfor
burstloads.TheLEDswillberunningat1/8dutycycle,soyoucanrefertothe
burstrating.
2)
The74HC574alsohassomemaximumratings.IfalltheLEDsononeanode
columnareon,thischipwillsupplycurrent8/8ofthetime.Youhavetokeep
withinthespecifiedmaximummAratingfortheoutputpins.Ifyoulookinthe
datasheet,Youwillfindthisline:DCOutputSourceorSinkCurrentperOutput
Pin,IO:25mA.AlsothereisaVCCorGNDcurrentmaximumratingof50mA.In
ordernottoexceedthis,yourLEDscanonlyrunat50/8mAsincethe74HC574
has8outputs.Thisgivesyou6.25mAtoworkwith.
3)
Thetransistorshavetoswitchonandoff64xthemAofyourLEDs.Ifyour
LEDsdraw20mAeach,thatwouldmeanthatyouhavetoswitchonandoff1.28
Ampere.
Theonlytransistorswehadavailablehadamaximumratingof400mA.
Weendedupusingresistorsof100ohms.
WhileyouarewaitingforyourLEDcubepartstoarriveinthemail,youcanbuild
theguyinthepicturebelow:http://www.instructables.com/id/Resistorman/
(http://www.instructables.com/id/Resistorman/)

IMadeit!

Favorite

Share

Step15:Choosethesizeofyourcube
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FOTII3AGI0TDN1V/)

WewantedtomaketheLEDcubeusingasfewcomponentsaspossible.We
hadseensomepeopleusingmetalrodsfortheirdesigns,butwedidn'thaveany
metalrods.Manyofthemetalroddesignsalsolookedalittlecrooked.
Wefiguredthattheeasiestwaytobuildaledcubewouldbetobendthelegsof
theLEDssothatthelegsbecomethescaffoldingthatholdstheLEDsinplace.
WebentthecathodelegononeoftheLEDsandmeasuredittobe26mmfrom
thecenteroftheLED.BychoosingaLEDspacingof25mm,therewouldbea
1mmoverlapforsoldering.(1inch=25.4mm)
Withasmall3mmLED25mmbetweeneachledgaveusplentyofopenspace
insidethecube.Seeingallthewaythroughtothefurthestlayerwouldn'tbea
problem.Wecouldhavemadethecubesmaller,butthenwewouldhavetocut
everysingleleg,andvisibilityintothecubewouldbecompromised.
OurrecommendationistousethemaximumspacingthatyourLEDcanallow.
Add1mmmarginforsoldering.

Step16:Howtomakestraightwire

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FSFCNSPGI0TMGB4/)

InordertomakeanicelookingLEDCube,youneedsomestraightsteelwire.
Theonlywirewehadwasonspools,soithadtobestraightened.
Ourfirstattemptatthisfailedhorribly.Wetriedtobenditintoastraightwire,but
nomatterhowmuchwebent,itjustwasn'tstraightenough.
Thenwerememberedanepisodeof"Howit'smade"fromtheDiscovery
Channel.Theepisodewasabouthowtheymakesteelwire.Theystartoutwith
aspoolofreallythickwire,thentheypullitthroughsmallerandsmallerholes.
Werememberedthatthewirewastotallystraightandsymmetricalafterbeing
pulledlikethat.
Sowefiguredweshouldgivepullingatry,anditworked!100%straightmetal
wirefromaspool!
Hereishowyoudoit.
cutofthelengthofwireyouneedfromthespool,plusaninchortwo.
Removetheinsulation,ifany.
Getafirmgripofeachendofthewirewithtwopairsofpliers
Pullhard!
Youwillfeelthewirestretchalittlebit.
Youonlyneedtostretchitacoupleofmillimeterstomakeitniceandstraight.
Ifyouhaveavice,youcansecureoneendintheviceanduseonepairofpliers.
Thiswouldprobablybealoteasier,butwedon'townavice.

Step17:Practiceinsmallscale

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FJNF0KMFE7ITU05/)

WheneverMythBustersaretestingacomplexmyth,theystartbysomesmall
scaleexperiments.
Werecommendthatyoudothesamething.
Beforewebuiltthe8x8x8LEDcube,westartedbymakingasmallerversionof
it,4x4x4.Bymakingthe4x4x4versionfirst,youcanperfectyourcubesoldering
techniquebeforestartingonthebigone.
Checkoutour4x4x4LEDcubeinstructableforinstructionsonbuildingasmaller
"prototype".
http://www.instructables.com/id/LEDCube4x4x4/
(http://www.instructables.com/id/LEDCube4x4x4/)

Step18:Buildthecube:createajig

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FEMG3OZGI0TDN4A/)

(/file/F51ATJTGI0TK2HA/)

(/file/FRYBMXFGI0TK2H9/)

(/file/FPR52ONGI0TMGC5/)

InordertomakeanicelookingLEDcube,itisimportantthatitiscompletely
symmetrical,thatthespacebetweeneachLEDisidentical,andthateachLED
pointsthesameway.Theeasiestwaytoaccomplishthisistocreatea
temporarysolderingjig/template.
1)
Findapieceofwoodorplasticthatislargerthanthesizeofyourcube.
2)
FindadrillbitthatmakesaholethatfitsaLEDsnuglyinplace.Youdon'twantit
tobetotight,asthatwouldmakeitdifficulttoremovethesolderedlayerfrom
thejigwithoutbendingit.Iftheholesaretoobig,someoftheLEDsmightcome
outcrooked.
3)
Usearulerandanangleirontodrawupagridof8by8linesintersectingat64
points,usingtheLEDspacingdeterminedinapreviousstep.
4)
Useasharppointyobjecttomakeindentionsateachintersection.These
indentionswillpreventthedrillfromslidingsidewayswhenyoustartdrilling.
5)
Drilloutalltheholes.

IMadeit!

Favorite

Share

6)
TakeanLEDandtryeveryholeforsize.Iftheholeistoosnug,carefullydrillit
againuntiltheLEDfitssnuglyandcanbepulledoutwithoutmuchresistance.

(/contest/epilog/)

LEDCube8x8x8 by

7)
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Somewherenearthemiddleofoneofthesides,drawasmallmarkorarrow.A
Download
Collection
steelwirewillbesolderedinhereineverylayertogivethecubesomeextra
h(/id/LedCube8x8x8/) 72Steps .
stiffening.

Step19:Buildthecube:solderingadvice

(/file/FAXRZD9GI0TDOUE/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FR4B3EMGI0TMHA8/)

YouaregoingtobesolderingVERYclosetotheLEDbody,andyouare
probablygoingtobeusingreallycheapLEDsfromeBay.LEDsdon'tlikeheat,
cheapLEDsprobablymoresothanothers.Thismeansthatyouhavetotake
someprecautionsinordertoavoidbrokenLEDs.
Solderingironhygiene
Firstofall,youneedtokeepyoursolderingironniceandclean.Thatmeans
wipingitonthespongeeverytimeyouuseit.Thetipofyoursolderingiron
shouldbecleanandshiny.Whenevertheyouseethetipbecomingdirtywith
fluxoroxidizing,thatmeansloosingit'sshinyness,youshouldcleanit.Evenif
youareinthemiddleofsoldering.HavingacleansolderingtipmakesitALOT
easiertotransferheattothesolderingtarget.
Solderingspeed
WhensolderingsoclosetotheLEDbody,youneedtogetinandoutquickly.
Wipeyourironclean.Applyatinyamountofsoldertothetip.Touchthepartyou
wanttosolderwiththesideofyourironwhereyoujustputalittlesolder.Letthe
targetheatupfor0.51seconds,thentouchtheothersideofthetargetyouare
solderingwiththesolder.Youonlyneedtoapplyalittlebit.Onlythesolderthat
istouchingthemetalofbothwireswillmakeadifference.Abigblobofsolder
willnotmakethesolderjointanystronger.Removethesolderingiron
immediatelyafterapplyingthesolder.
Mistakesandcooldown
Ifyoumakeamistake,forexampleifthewiresmovebeforethesolderhardens
oryoudon'tapplyenoughsolder.Donottryagainrightaway.Atthispointthe
LEDisalreadyveryhot,andapplyingmoreheatwiththesolderingironwillonly
makeithotter.ContinuewiththenextLEDandletitcooldownforaminute,or

IMadeit!

Favorite

Share

blowonittoremovesomeheat.
Solder
(/contest/epilog/)
WerecommendusingathinsolderforsolderingtheLEDs.Thisgivesyoualot
LEDCube8x8x8 by
morecontrol,andenableyoutomakenicelookingsolderjointswithoutlarge
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
blobsofsolder.Weuseda0.5mmgaugesolder.Don'tusesolderwithoutflux.If
Download
IMadeit!
Collection
Favorite
Share
yoursolderisveryoldandthefluxisn'tcleaningthetargetproperly,getnewer
h(/id/LedCube8x8x8/) 72Steps .
solder.Wehaven'texperiencedthis,butwehaveheardthatitcanhappen.
Areweparanoid?
Whenbuildingthe8x8x8LEDCube,wetestedeachandeveryLEDbefore
usingitinthecube.WealsotestedeveryLEDafterwefinishedsolderinga
layer.SomeoftheLEDsdidn'tworkafterbeingsolderedinplace.We
consideredthesethingsbeforemakingasinglesolderjoint.Evenwithcareful
soldering,someLEDsweredamaged.
ThelastthingyouwantisabrokenLEDnearthecenterofthecubewhenitis
finished.Thefirstandsecondlayerfromtheoutsidecanbefixedafterwards,but
anyfurtherinthanthat,andyou'llneedendoscopicsurgicaltools)

Step20:Buildthecube:testtheLEDs

(/file/FEWIH1EGI0TK33N/)

WegotourLEDsfromeBay,reallycheap!
WetestedsomeoftheLEDbeforewestartedsoldering,andrandomlystumbled
onaLEDthatwasalotdimmerthantherest.SowedecidedtotesteveryLED
beforeusingit.WefoundacoupleofdeadLEDsandsomethatweredimmer
thantherest.
ItwouldbeverybadtohaveadimLEDinsideyourfinishedLEDcube,sospend
thetimetotesttheLEDsbeforesoldering!Thismightbelessofaproblemifyou
areusingLEDsthataremoreexpensive,butwefounditworthwhiletotestour
LEDs.

Getoutyourbreadboard,connectapowersupplyandaresistor,thenpopthe
LEDsinoneatatime.YoumightalsowanttohaveanotherLEDwithitsown
(/contest/epilog/)
resistorpermanentlyonthebreadboardwhiletesting.Thismakesiteasierto
LEDCube8x8x8 by
spotdifferencesinbrightness.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Step21:Buildthecube:solderalayer

(/file/FYHEBS4GI0TMGE1/)

(/file/FCQKLVJGI0TMGDW/)

(/file/FXA85QTGI0TMGFF/)

(/file/FWP5C93GI0TMGGL/)

(/file/FVW932YGICYAZHY/)
ShowAllItems

(/file/F3QIEC8GI0TMGCZ/)

IMadeit!

Favorite

Share

Eachlayerismadeupof8columnsofLEDsheldtogetherbythelegsofeach
LED.AtthetopofeachlayereachLEDisrotated90degreesclockwise,sothat
thelegconnectswiththetopLEDofthenextcolumn.Onthecolumntotheright
(/contest/epilog/)
thislegwillstickoutofthesideofthelayer.Weleavethisinplaceanduseitto
LEDCube8x8x8 by
connectgroundwhentestingalltheLEDsinalaterstep.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
Collection
1)Prepare64LEDs
h(/id/LedCube8x8x8/) 72Steps .
BendthecathodelegofeachLED90degrees.Makesurethelegsarebentin
thesamedirectiononalltheLEDs.LookingattheLEDsittinginaholeinthe
templatewiththenotchtotheright,webentthelegupwards.

2)Startwiththerowatthetop
StartbyplacingthetoprightLEDinthetemplate.Thenplacetheonetotheleft,
positioningitsothatit'scathodelegistouchingthecathodelegoftheprevious
LED.RinseandrepeatuntilyoureachtheleftLED.Solderallthejoints.
3)Solderall8columns
Ifyouarerighthanded,werecommendyoustartwiththecolumntotheleft.
Thatwayyourhandcanrestonthewoodentemplatewhenyousolder.Youwill
needasteadyhandwhensolderingfreehandlikethis.StartbyplacingtheLED
secondfromthetop,aligningitsoit'slegtouchesthesolderjointfromthe
previousstep.ThenplacetheLEDbelowthatsothatthecathodelegtouches
theLEDabove.Repeatuntilyoureachthebottom.Solderallthejoints.
4)Addbraces
Younowhavealayerthatlookslikeacomb.Atthispointthewholethingisvery
flimsy,andyouwillneedtoaddsomesupport.Weusedonebracingnearthe
bottomandonenearthemiddle.Takeastraightpeaceofwire,roughlyalignit
whereyouwantitandsolderoneendtothelayer.Finetunethealignmentand
soldertheotherendinplace.Now,makesolderjointstotheremaining6
columns.Dothisforbothbraces.
5)TestalltheLEDs
Thisiscoveredinthenextstep.Justmentioningheresoyoudon'tremovethe
layerjustyet.
6)Removethelayer
ThefirstlayerofyourLEDcubeisalldone,nowallyouhavetodoisremoveit
fromthetemplate.Dependingonthesizeofyourholes,someLEDsmighthave
moreresistancewhenyoutrytopullitout.Simplygrabbingbothendsofthe
layerandpullingwouldprobablybreakthewholethingifacoupleoftheLEDs
arestuck.
StartbyliftingeverysingleLEDacoupleofmillimeters.Justenoughtofeelthat
thereisn'tanyresistance.WhenalltheLEDsarefreedfromtheirholes,trylifting
itcarefully.Ifitisstillstuck,stopandpullthestuckLEDsout.
Repeat8times!
Noteonimages:
Ifyouarehavingtroubleseeingthedetailinanyofourpictures,youcanviews
thefullresolutionbyclickingonthelittleiiconinthetopleftcornerofevery
image.Allourcloseuppicturesaretakenwithaminitripodandshouldhave
excellentmacrofocus.Ontheimagepage,choosetheoriginalsizefromthe
"Availablesizes"menuonthelefthandside.

IMadeit!

Favorite

Share

Step22:Buildthecube:testthelayer

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FIYJ2SYGI0TMGJ2/)

SolderingthatclosetothebodyoftheLEDcandamagetheelectronicsinside.
WestronglyrecommendthatyoutestallLEDsbeforeproceeding.
Connectgroundtothetabyouleftstickingoutattheupperrightcorner.Connect
awireto5Vthrougharesistor.UseanyresistorthatlightstheLEDupand
doesn'texceeditsmaxmAratingat5V.470Ohmwouldprobablyworkjustfine.
Takethewireandtapitagainstall64anodelegsthatarestickingupfromyour
template.IfaLEDdoesn'tflashwhenyoutapit,thatmeansthatsomethingis
wrong.
1)Yoursolderingisn'tconductingcurrent.
2)TheLEDwasoverheatedandisbroken.
3)Youdidn'tmakeaproperconnectionbetweenthetestwireandtheled.(try
again).
Ifeverythingchecksout,pullthelayerfromthecubeandstartsolderingthenext
one.

Step23:Buildthecube:straigthenthepins

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FETNJR0GI0TMGKA/)

(/file/F4M0QHYGI0TMGKV/)

(/file/FWOUIPDGI0TMGJR/)

(/file/FAALBKFGI0TMGJT/)

(/file/FBAYE5UGI0TMGK1/)

(/file/FDU97KWGI0TMGKW/)

Inouropinion,aLEDcubeisapieceofartandshouldbeperfectlysymmetrical
andstraight.IfyoulookattheLEDsinyourtemplatefromtheside,theyare
probablybentinsomedirection.
Youwantallthelegstopointstraightup,ata90degreeanglefromthe
template.
Whilelookingatthetemplatefromtheside,straightenallthelegs.Thenrotate
thetemplate90degrees,toviewitfromtheotherside,thendothesame
process.
Younowhaveaperfectlayerthatisreadytoberemovedfromthetemplate.

IMadeit!

Favorite

Share

(/contest/epilog/)

Step24:Buildthecube:bendthepins
LEDCube8x8x8
by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F4ZFIYQGISO5193/)

(/file/FDM2K6VGI0TMGLZ/)

(/file/F9VCTZLGI0TMGLQ/)

(/file/FJLOZ5VGI0TMGLP/)

IntheLEDcubecolumns,wewanteachLEDtositcenteredpreciselyabovethe
LEDsbelow.ThelegsontheLEDscomeoutfromtheLEDbodyhalfa
millimeterorsofromtheedge.Tomakeasolderjoint,wehavetobendthe
anodelegsothatittouchestheanodelegontheLEDbelow.
Makeabendintheanodelegtowardsthecathodelegapproximately3mmfrom
theendoftheleg.ThisisenoughforthelegtobendaroundtheLEDbelowand
makecontactwithit'sanodeleg.

Step25:Buildthecube:solderthelayerstogether

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FSUYYBTGICYAZPM/)

(/file/FJB6THLGI0TMGN4/)

(/file/FSUXWOIGI0TMGN5/)

(/file/FNWMWL7GICYAZQK/)

(/file/FQ08FBNGI0TMGN6/)

(/file/FY934UOGICYAZPB/)

ShowAllItems

Nowcomesthetrickypart,solderingitalltogether!
Thefirsttwolayerscanbequiteflimsybeforetheyaresolderedtogether.You
maywanttoputthefirstlayerbackinthetemplatetogiveitsomestability.
Inordertoavoidtotaldisaster,youwillneedsomethingtoholdthelayerinplace
beforeitissolderedinplace.Luckily,thewidthofa9Vbatteryisprettycloseto
25mm.Probablycloserto25.526mm,butthat'sOK.
Warning:The9voltsfroma9VbatterycaneasilyoverloadtheLEDsifthe

IMadeit!

Favorite

Share

contactsonthebatterycomesincontactwiththelegsoftheLEDs.Wetaped
overthebatterypolestoavoidaccidentallyruiningtheLEDsweweresoldering.
(/contest/epilog/)

Wehadplentyof9Vbatterieslyingaround,soweusedthemastemporary
LEDCube8x8x8
by
supports.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Startbyplacinga9Vbatteryineachcorner.Makesureeverythingisaligned
Download
IMadeit!
Collection
Favorite
perfectly,thensolderthecornerLEDs.
h(/id/LedCube8x8x8/) 72Steps .
NowsolderalltheLEDsaroundtheedgeofthecube,movingthe9Vbatteries
alongasyougoaround.Thiswillensurethatthelayersaresolderedperfectly
paralleltoeachother.
Nowmovea9Vbatterytothemiddleofthecube.Justslideitinfromoneofthe
sides.SolderacoupleoftheLEDsinthemiddle.
Thewholethingshouldbeprettystableatthispoint,andyoucancontinue
solderingtherestoftheLEDswithoutusingthe9Vbatteriesforsupport.
However,ifitlookslikesomeoftheLEDsaresaggingalittlebit,slideina9V
batterytoliftthemup!
Whenyouhavesolderedallthecolumns,itistimetotesttheLEDsagain.
Rememberthattabstickingoutfromtheupperrightcornerofthelayer,thatwe
toldyounottoremoveyet?Nowit'stimetouseit.Takeapieceofwireand
solderthetabofthebottomlayertothetabofthelayeryoujustsolderedin
place.
Connectgroundtothethegroundtab.
Testeachledusingthesamesetupasyouusedwhentestingtheindividual
layers.Sincethegroundlayershavebeenconnectedbythetesttabs,andall
theanodesineachcolumnsareconnectedtogether,allLEDsinacolumn
shouldlightupwhenyouapplyvoltagetothetopone.IftheLEDsbelowitdoes
notlightup,itprobablymeansthatyouforgotasolderjoint!ItisALOTbetterto
figurethisoutatthispoint,ratherthanwhenallthelayersaresolderedtogether.
Thecenterofthecubeisvirtuallyimpossibletogettowithasolderingiron.
Younowhave2/8ofyourLEDcubesolderedtogether!Yay!
Forthenext6layers,usetheexactsameprocess,butspendevenmoretime
aligningthecornerLEDsbeforesolderingthem.Lookatthecubefromabove,
andmakesurethatallthecornerLEDsareonastraightlinewhenlookingat
themfromabove.
Rinseandrepeat!

Step26:Buildthecube:createthebase

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FD4UR9RGI0TK2M6/)

(/file/FR4HJCMGICYAZVW/)

(/file/FTCQ6FCGI0TK2M9/)

(/file/FJZ6KGYGICYAZW5/)

Wedidn'thaveanyfancytoolsatourdisposaltocreateafancystandorboxfor
ourLEDcube.Instead,wemodifiedthetemplatetoworkasabaseforthecube.
WeencourageyoutomakesomethingcoolerthanwedidforyourLEDcube!
Forthetemplate,weonlydrilledacoupleofmmintothewood.Totransformthe
templateintoabase,wejustdrilledalltheholesthroughtheboard.Thenwe
drilled8smallerholesforthe8cathodewiresrunninguptothe8cathode
layers.
Ofcourse,youdon'twanttohaveyourLEDcubeonawoodcoloredbase.We
didn'thaveanyblackpaintlyingaround,butwedidfindagiantblackmagic
marker!Stainingthewoodblackwithamagicmarkerworkedsurprisinglywell!I
thinktheoneweusedhada10mmpoint.

Step27:Buildthecube:mountthecube

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FGZRAUGGI0TDNGW/)

Mountthecube.Thatsoundsveryeasy,butit'snot.Youhavetoalign64LED
legstoslidethrough64holesatthesametime.It'slikethreadinganeedle,
times64.
Wefounditeasiesttostartwithoneend,thengraduallypoppingthelegsinto
place.UseapenorsomethingtopokeattheLEDlegsthatmisstheirholes.
Onceall64LEDlegsarepokingthroughthebase,carefullyturnitonit'sside.
Thenbendall64legs90degrees.Thisisenoughtoholdthecubefirmly
mountedtothebase.Noneedforglueoranythingelse.

Step28:Buildthecube:cathoderisers

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FBDG9GBGI0TDOUF/)

(/file/FKN0CRXGICYB3SX/)

YounowhaveaLEDcubewith64anodeconnectionsontheundersideofthe
base.Butyouneedtoconnectthegroundlayerstoo.
Rememberthose8smallholesyoudrilledinapreviousstep?Wearegoingto
usethemnow.
Makesomestraightwireusingthemethodexplainedinapreviousstep.

IMadeit!

Favorite

Share

Westartwithgroundforlayer0.Takeashortpieceofstraightwire,Makea
bendapproximately10mmfromtheend.Pokeitthroughtheholeforground
layer0.Leave10mmpokingthroughtheundersideofthebase.Positionitso
(/contest/epilog/)
thatthebendyoumaderestsonthebackwireofgroundlayer0.Nowsolderit
LEDCube8x8x8 by
inplace.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Layer1through7arealittletrickier.Weusedahelpinghandtoholdthewirein
Download
IMadeit!
Collection
Favorite
Share
placewhilesoldering.
h(/id/LedCube8x8x8/) 72Steps .
Takeastraightpieceofwireandbendit90degrees10mmfromtheend.Then
cutittolengthsothat10mmofwirewillpokeoutthroughtheundersideofthe
base.
Pokethewirethroughtheholeandletthewirerestonthebackwireofthelayer
youareconnecting.Clampthehelpinghandontothewire,thensolderitin
place.
Rinseandrepeat7moretimes.
Carefullyturnthecubeonit'ssideandbendthe8groundwires90degrees.

Step29:Buildthecube:attachcables

(/file/FIF65W8GICYAZYL/)

(/file/FNNOY41GI0TK2MK/)

(/file/FG356N6GI0TK2ML/)

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

(/file/FT49LPKGICYAZZ1/)

72Steps

(/file/FA3XZVSGI0TDNI6/)

Collection
(/file/FW5S541GI0TMGO2/)

ShowAllItems

64+8wireshavetogofromthecontrollertotheLEDcube.Weusedribbon
cabletomakethingsalittleeasier.
Thegroundlayersusean8wireribboncable.
Thecathodesareconnectedwith416wireribboncables.Eachoftheseribbon
cablesaresplitintwoateitherend,togettwo8wirecables.
Atthecontrollerside,weattached0.1"femaleheaderconnectors.Theseplug
intostandard0.1"singlerowPCBheaderpins.
Theheaderconnectorisamodularconnectorthatcomesintwoparts,metal
insertsandaplasticbody.
Themetalinsertsaresupposedtobecrimpedonwithatool.Wedidn'thavethe
appropriatetoolonhand,soweusedpliers.Wealsoaddedalittlesolderto
makesurethewiresdidn'tfallofwithuse.
1)Prepareone8wireribboncableand416wireribboncablesofthedesired
length
2)Crimporsolderonthemetalinserts.
3)Insertthemetalinsertintotheplasticconnectorhousing.
4)Solderthe8wireribboncabletothecathoderisers.Pretinthecablesbefore
soldering!
5)Solderintherestofthecables.Theredstripeonthefirstwireindicatesthat
thisisbit0.
6)Tightenthescrewsonthestrainrelieftomakesureeverythingstaysinplace.
7)ConnectalltheribboncablestothePCBsinthecorrectorder.Seepictures
below.Our8wireribboncabledidn'thavearedwire.Justfliptheconnector180
degreesifyourcubeisupsidedown.

Step30:Buildthecontroller:layout

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FB6QBNQGI0TMGO5/)

(/file/FYZ8EHJGI0TK2MU/)

(/file/FJA4IZJGICYB5XH/)

WetookoutthebiggesttypeofPCBwehadavailable(9x15cm)andstarted
experimentingwithdifferentboardlayouts.Itsoonbecameclearthatcramming
allthecomponentsontooneboardwasn'tagoodsolution.Insteadwedecided
toseparatethelatcharrayandpowersupplypartofthecircuitandplaceitona
separateboard.Aribboncabletransfersdatalinesbetweenthetwoboards.
Choosingtwoseparateboardswasagooddecision.Thelatcharraytookup
almostallthespaceofthecircuitboard.Therewouldn'thavebeenmuchspace
forthemicrocontrollerandotherparts.
Youmaynothavetheexactsamecircuitboardsaswedo,ormaywantto
arrangeyourcomponentsinadifferentway.Trytoplaceallthecomponentson
yourcircuitboardtoseewhichlayoutbestfitsyourcircuitboard.

multiplexer_board.sch(/files/orig/FAU/I50K/GICYB6CJ/FAUI50KGICYB6CJ.tmp)

avr_board.sch(/files/orig/FA9/26YI/GICYB6CH/FA926YIGICYB6CH.tmp)

Step31:Buildthecontroller:clockfrequency

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F2KWL27GI0TK2MZ/)

(/file/F7Q4LXVGI0TMGO6/)

(/file/F89AREYGI0TK2MY/)

(/file/FJZ61SEGI0TMGOE/)

(/file/FGINT42GI0TK2N0/)

Weuseanexternalcrystalof14.7456MHztodrivetheATmegasystemclock.
Youmaybethinkingthatthisisanoddnumbertouse,andwhywedidn'trunthe
ATmegaatthe16MHzitisratedfor.
WewanttobeabletocontroltheLEDcubefromacomputer,usingRS232.
Serialcommunicationrequiresprecisetiming.Ifthetimingisoff,onlybyalittle
bit,somebitsaregoingtobemissedorcounteddoublefromtimetotime.We

IMadeit!

Favorite

Share

won'tberunninganyerrorcorrectingalgorithmsontheserialcommunications,
soanyerroroverthelinewouldberepresentedintheLEDcubeasavoxel
beingonoroffinthewrongplace.

(/contest/epilog/)

LEDCube8x8x8 by

Togetflawlessserialcommunication,youhavetouseaclockfrequencythat
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
canbedividedbytheserialfrequencyyouwanttouse.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

14.7456MHzisdividablebyallthepopularRS232baudrates.
(14.7456MHz*1000*1000)/9600baud=1536.0
(14.7456MHz*1000*1000)/19200baud=768.0
(14.7456MHz*1000*1000)/38400baud=384.0
(14.7456MHz*1000*1000)/115200baud=128.0
TheformulainsidetheparenthesesconvertsfromMHztoHz.First*1000gives
youKHz,thenextHz.
AsyoucanseealloftheseRS232baudratescanbecleanlydividedbyour
clockrate.Serialcommunicationwillbeerrorfree!

Step32:Buildthecontroller:protoboardsolderingadvice

(/file/FMEU2JUGI0TK2NC/)

WeseepeopledoalotofweirdstuffwhentheysolderonprototypePCBs.
Beforeyoucontinue,wejustwanttosharewithyoutheprocessweuseto
createtracksonprototypePCBswithsoldereyes.Onceyoumasterthis
technique,youwillprobablystartusingitalot.
1)Filleachpointofthetrackyouwanttomakewithsolder.
2)Connecteveryotherpointsbyheatingthemandaddingalittlesolder.
3)Connectthe2holelongpiecesyounowhavespanningthedesiredtrack.
4)Lookhowbeautifultheresultis.
Youcanseeinthevideohowwedoit.Wehadtotouchsomeofthepointstwice
tojointhem.Itwasabithardtohavethecamerainthewaywhenwewere
soldering)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Step33:Buildthecontroller:Powerterminalandfiltering
capacitors

(/file/FJG78B4GI0TMGP4/)

(/file/F6B65GZGI0TDNNW/)

(/file/FUCZDZ6GI0TK2NG/)

IMadeit!

Favorite

Share

Thecubeiscomplete,nowallthatremainsisamonstercircuittocontrolthe
thing.
LEDCube8x8x8
by

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)

Let'sstartwiththeeasiestpart,the"powersupply".
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

ThepowersupplyconsistsofascrewterminalwhereyouconnecttheGNDand
VCCwires,somefilteringcapacitors,aswitchandaanLEDtoindicatepower
on.
Initially,wehaddesignedanonboardpowersupplyusinganLM7805step
downvoltageregulator.However,thisturnedouttobeabigfail.
Weusedthiswitha12Vwallwart.Butasyoumayalreadyknow,mostwall
wartsoutputhighervoltagesthantheonesspecifiedonthelabel.Ours
outputtedsomethinglike14volts.TheLM7805isn'taverysophisticatedvoltage
regulator,itjustusesresistancetostepdownthevoltage.Toget5voltsoutput
from14voltsinputmeansthattheLM7805hastodrop9volts.Theexcess
energyisdispersedasheat.Evenwiththeheatsinkthatyouseeinthepicture,
itbecameveryveryhot.Waytohottotouch!Inadditiontothat,theperformance
wasn'tgreateither.Itwasn'tabletosupplythenecessarycurrenttorunthecube
atfullbrightness.
TheLM7805waslaterremoved,andawirewassolderedbetweentheinputand
outputpins.Insteadweusedanexternal5Vpowersource,ascoveredina
previousstep.
Whysomanycapacitors?
TheLEDcubeisgoingtobeswitchingabout500mAonandoffseveralhundred
timespersecond.Themomentthe500mAloadisswitchedon,thevoltageis
goingtodropacrosstheentirecircuit.Manythingscontributetothis.Resistance
inthewiresleadingtothepowersupply,slownessinthepowersupplyto
compensatefortheincreaseinload,andprobablysomeotherthingsthatwe
didn'tknowabout)
Byaddingcapacitors,youcreateabufferbetweenthecircuitandthepower
supply.Whenthe500mAloadisswitchedon,therequiredcurrentcanbedrawn
fromthecapacitorsduringthetimeittakesthepowersupplytocompensatefor
theincreaseinload.
Largecapacitorscansupplylargercurrentsforlongerperiodsoftime,whereas
smallercapacitorscansupplysmallbutquickburstsofenergy.
Weplaceda1000uFcapacitorjustafterthemainpowerswitch.Thisworksas
ourmainpowerbuffer.Afterthat,thereisa100uFcapacitor.Itiscommon
practicetohavealargecapacitorattheinputpinofanLM7805andasmaller
capacitoratit'soutputpin.The100uFcapacitorprobablyisn'tnecessary,butwe
thinkcapacitorsmakeyourcircuitlookcooler!
TheLEDisconnectedtoVCCjustafterthemainpowerswitch,viaaresistor.

IMadeit!

Favorite

Share

Step34:Buildthecontroller:ICsockets,resistorsand
connectors
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FA78F69GI0TK2NJ/)

(/file/FUMBFZQGI0TDNOM/)

Inthisstepyouwillbesolderinginthemaincomponentsofthemultiplexer
array.
Ourmaindesignconsiderationherewastominimizesolderingandwiring.We
optedtoplacetheconnectorsasclosetotheICsaspossible.Ontheoutput

IMadeit!

Favorite

Share

side,thereisonlytwosolderjointsperLEDcubecolumn.ICresistor,resistor
connector.Theoutputsofthelatchesarearrangedinorder07,sothisworks
outgreat.Ifweremembercorrectly,thelatchweareusingisavailableintwo
(/contest/epilog/)
versions,onewiththeinputsandoutputsinsequentialorder,andonewiththe
LEDCube8x8x8 by
inandoutputsinseeminglyrandomorder.Donotgetthatone!)Don'tworry,it
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
hasadifferent74HCxxxname,soyou'llbegoodifyousticktoourcomponent
Download
IMadeit!
Collection
Favorite
Share
list.
h(/id/LedCube8x8x8/) 72Steps .
Inthefirstpicture,youcanseethatwehaveplacedalltheICsockets,resistors
andconnectors.Wesqueezeditastightaspossible,toleaveroomfor
unforeseenstuffinthefuture,likebuttonsorstatusLEDs.
Inthesecondpicture,youcanseethesolderjointsbetweentheresistorsand
theICsocketsandconnectors.NotethattheinputsideofthelatchICsockets
haven'tbeensolderedyetinthispicture.

Step35:Buildthecontroller:PowerrailsandICpower

(/file/FVY329LGICYB1BJ/)

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FDGRX36GICYB1BM/)

Rememberthatprotoboardsolderingtrickweshowedyouinapreviousstep?
Wetoldyouitwouldcomeinhandy,andhereiswhereyouuseit.
Largecircuitboardslikethisone,withlotsofwires,canbecomequiteconfusing.
WealwaystrytoavoidliftingtheGNDandVCClinesofftheboard.Wesolder
themascontinuoussolderlines.Thismakesitveryeasytoidentifywhatis
GND/VCCandwhatissignallines.
IftheVCCandGNDlinesneedstocrosspaths,simplyrouteoneofthemover
theotherusingapieceofwireonthetopsideofthePCB.
Inthefirstpictureyoucanseesomesoldertracesinplace.
Thetwohorizontaltracesisthe"mainpowerbus".ThelowestoneisVCCand
thetoponeisGND.ForeveryrowofICsaGNDandVCClineisforkedoffthe
mainpowerbus.TheGNDlinerunsundertheICs,andtheVCClinerunsunder
theresistors.
Wewentalittleoverboardwhenmakingstraightwireforthecube,andhad
somepiecesleftover.WeusedthatfortheVCClinethatrunsunderthe
resistors.
Inthebottomrightcorner,youcanseethatwehavestartedsolderingthe8+1bit
busconnectingallthelatchICs.Lookhoweasyitistoseewhatissignalwires
andwhatispowerdistribution!
Inthesecondpicture,youcanseetheboardrightsideup,withsomeadditional
componentssolderedin,justignorethemforthemoment.

IMadeit!

Favorite

Share

ForeverylatchIC(74HC574),thereisa100nF(0.1uF)ceramiccapacitor.
Thesearenoisereductioncapacitors.Whenthecurrentontheoutputpinsare
(/contest/epilog/)
switchedonandoff,thiscancausethevoltagetodropenoughtomesswiththe
LEDCube8x8x8 by
internalworkingsoftheICs,forasplitsecond.Thisisunlikely,butit'sbetterto
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
besafethansorry.Debuggingacircuitwithnoiseissuescanbeveryfrustrating.
Download
IMadeit!
Collection
Favorite
Share
h(/id/LedCube8x8x8/) 72Steps .
Besides,capacitorsmakethecircuitlookthatmuchcoolerandprofessional!The
100nFcapacitorsmakesurethatthereissomecurrentavailablerightnexttothe
ICincasethereisasuddendropinvoltage.Wereadsomewherethatitis
commonengineeringpracticetoplacea100nFcapacitornexttoeveryIC,"Use
themlikecandy".Wetendtofollowthatprinciple.
Beloweachrowofresistors,youcanseeatinypieceofwire.ThisistheVCC
linemakingalittlejumptothetopsideoftheboardtocrossthemainGNDline.
Wealsoaddedacapacitoronthefarendofthemainpowerbus,forgood
measure.

Step36:Buildthecontroller:ConnecttheICs,8bitbus+OE

(/file/FUOUVFTGI0TDNOZ/)

Inthepicture,you'llnoticealotofwireshavecomeintoplace.
Allthetinybluewiresmakeupthe8+1bitbusthatconnectsallthelatchICs.8
bitsarefordata,andthe+1bitistheoutputenableline.
Atthetopoftheboard,wehaveaddeda16pinconnector.Thisconnectsthe
latchboardtothemicrocontrollerboard.Nexttothat,youseethe74HC138.
ThetinybluewiresareKynarwire.Thisisa30or32AWG(americanwire
gauge)wire.Verytiny.Weloveworkingwiththistypeofwire.Becauseitisso
thin,itdoesn'ttakeupthatmuchspaceonthecircuitboard.Ifwehadused
thickerwire,youwouldn'tbeabletoseetheboardthroughallthewires.Kynar

wireiscoatedwithtin,soyoucansolderdirectlyafterstrippingit.Noneedfor
pretinning.ThetinybluewiresareconnectedtothesamepinoneverylatchIC.
Fromtheconnectoratthetop,youcansee8greenwiresconnectedtothebus.
LEDCube8x8x8
by
Thisisthe8bitdatabus.Weuseddifferentcolorsfordifferentfunctionsto
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
bettervisualizehowthecircuitisbuilt.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Theorangewireconnectedtothebusistheoutputenable(OE)line.
Ontherighthandsideoftheconnector,thefirstpinisconnectedtoground.

Step37:Buildthecontroller:Addressselector

(/file/FFCWI1TGICYB1D8/)

IMadeit!

(/contest/epilog/)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F9FH61TGI0TK2NV/)

The74HC138isresponsiblefortogglingtheclockpinonthe74HC574latch
ICs.Wecallthisanaddressselectorbecauseitselectswhichoneofthe8bytes
inthelatcharraywewanttowritedatato.Thethreebluewiresrunningfromthe
connectortothe74HC138isthe3bitbinaryinputusedtoselectwhichofthe8
outputsispulledlow.Fromeachoftheoutputsonthe74HC138,thereisawire
(white)runningtotheclockpinonthecorresponding74HC574latchIC.
StartbysolderingtheGNDandVCCconnections.Ifyouusethesoldertrace
methodtorunGND/VCClinesyouwanttodothisbeforeyousolderanyother
wiresinplace.A100nFceramicfilteringcapacitorisplacedclosetotheVCC
andGNDpinsofthe74HC138.
Thenconnecttheaddresslinesandthe8clocklines.
Ifyoulookcarefullyattheconnector,youcanseetwopinsthatarenotused.
ThesewillbeusedforabuttonanddebugLEDlater.

Step38:Buildthecontroller:AVRboard

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F47L5JEGICYB1EZ/)

(/file/F45JMFQGICYB1F5/)

(/file/FWEP48IGI0TMGRB/)

(/file/FDS0O6SGI0TMGRC/)

Braaaaainzz!!!
ThisboardisthebrainoftheLEDcube.ThemaincomponentisanAtmelAVR
ATmega32.
Thisisan8bitmicrocontrollerwith32KBofprogrammemoryand2KBRAM.
TheATmega32has32GPIO(GeneralPurposeIO)pins.Twoofthesewillbe
usedforserialcommunication(TX+RX).ThreeIOpinsareusedforISP(In
circuitSerialProgramming).Thisleavesuswith27GPIOtodrivetheLEDcube,
buttonsandstatusLEDs.
Agroupof8GPIO(8bits,onebyte)iscalledaport.TheATmega32has4ports.
PORTA,PORTB,PORTCandPORTD.OnPORTCandPORTDsomeofthe
pinsareusedforTX/RXandISP.OnPORTAandPORTB,allthepinsare
available.Weusetheseportstodrivethedatabusofthelatcharrayandlayer
selecttransistorarray.
PORTAisconnectedtothedatabusonthelatcharray.
EachpinonPORTCisconnectedtoapairoftransistorsthatdriveaground
layer.
Theaddressselectoronthelatcharray(74HC138)isconnectedtobit02on
PORTB.Outputenable(OE)isconnectedtoPORTBbit3.

IMadeit!

Favorite

Share

Inthefirstimage,youseetheAVRboardrightsideup.
Thelarge40pinPDIP(PlasticDualInlinePackage)chipinthecenterofthe
(/contest/epilog/)
boardistheATmega32,thebrainz!JusttotheleftoftheATmega,youseethe
LEDCube8x8x8 by
crystaloscillatorandit'stwocapacitors.OneithersideoftheATmegathereisa
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
100nFfilteringcapacitor.OneforGND/VCCandoneforAVCC/GND.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Inthetopleftcorner,thereisatwopinconnectorsandtwofilteringcapacitors.
One10uFandone100nF.TheLEDisjustconnectedtoVCCviaaresistor,and
indicatespoweron.
Thelarge16pinconnectordirectlyabovetheATmegaconnectstothelatch
arrayboardviaaribboncable.Thepinoutonthiscorrespondstothepinouton
theotherboard.
Thesmaller10pinconnectortotheleft,isastandardAVRISPprogramming
header.IthasGND,VCC,RESET,SCK,MISOandMOSI,whichareusedfor
programming.Nexttoit,thereisajumper.Whenthisisinplace,theboardcan
bepoweredfromtheprogrammer.
Caution:DONOTpowertheboardfromtheprogrammerwhentheactualLED
cubeisconnectedtothecontroller.Thiscouldpossiblyblowtheprogrammer
andeventheUSBporttheprogrammerisconnectedto!
Thesecondimageshowstheunderside.AgainallGNDandVCClinesare
solderedastracesontheprotoboardorbarewire.Wehadsomemoreleftover
straightmetalwire,soweusedthis.
TheorangewiresconnecttheATmega'sRESET,SCK,MOSIandMISOpinsto
theISPprogrammingheader.
TheGreenwiresconnectPORTAtothedatabus.
Thebluewiresaretheaddressselectlinesforthe74HC138andoutputenable
(OE)forthelatcharray.
1)Startbyplacingthe40pinICsocket,the10pinISPconnectorwithajumper
nexttoitandthe16pindatabusconnector.
2)Solderinplacethepowerconnector,capacitorsandpowerindicatorLED.
3)ConnectalltheGNDandVCClinesusingsoldertracesorwire.Placea
100nFcapacitorbetweeneachpairofGND/VCCpinsontheATmega.
4)Solderinthecrystalandthetwo22pFcapacitors.Eachcapacitoris
connectedtoapinonthecrystalandGND.
5)Runallthedatabus,addressselectandOEwires,andtheISPwires.
Transistors,buttonsandRS232willbeaddedinlatersteps.
Atthistime,theAVRboardcanbeconnectedtoanISPprogrammerandthe
ATmegashouldberecognized.

Step39:Buildthecontroller:Transistorarray

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FM43HOUGI0TK43T/)

(/file/F9ZFMQ9GI0TK43P/)

(/file/F5A9M3HGI0TDOUP/)

ThetransistorarrayisresponsibleforswitchingonandoffGNDforeachlayerin
theLEDcube.
Ourfirstattemptatthiswasanepicfail.Weboughtsometransistorsratedfor
over500mA,thinkingthatwouldbeplentyofjuice.Wedon'trememberthe
modelnumber.
TheLEDcubeworked,butitwasn'tverybright,andthebrightnesswas
inverselyproportionaltothenumberofLEDsswitchedoninanygivenlayer.In
additiontothat,therewassomeghosting.Layersdidn'tswitchcompletelyoff
whentheyweresupposedtobeoff.
Needlesstosay,wewerekindofdisappointed,andstarteddebugging.Thefirst
thingwedidwastoaddpullupresistorstotrytocombattheghosting.This
removedalmostalltheghosting,yay!Butthecubewasstillverydim,bah!
Wedidn'thaveanypowerfultransistorsorMOSFETslyingaround,sowehadto
comeupwithanothersolution.
WepostedathreadintheelectronicssectionoftheAVRFreaks.netforum,

IMadeit!

Favorite

Share

askingifitwaspossibletousetwosmallertransistorsinparallel.Thisistheonly
optionavailabletoususingthepartswehadonhand.Thegeneralresponse
was,thiswillneverworksodon'tevenbothertrying.Theyevenhadvalid
(/contest/epilog/)
theoriesandstuff,butthatdidn'tdeterusfromtrying.Itwasouronlysolution
LEDCube8x8x8 by
thatdidn'tinvolvewaitingfornewpartstoarriveinthemail.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
IMadeit!
Collection
h(/id/LedCube8x8x8/) 72Steps .
WeendeduptryingPN2222A,NPNgeneralpurposeamplifier.Ideally,you'd
wantaswitchingtransistorforthiskindofapplication,butweneeded16
transistorsofthesametype.Thistransistorwasratedat1000mAcurrent,sowe
decidedtogiveitatry.

Foreachlayer,weusedtwoPN2222Asinparallel.Thecollectorsconnected
togethertoGND.Theemittersconnectedtogether,thenconnectedtoaground
layer.Thebaseofeachtransistorswasconnectedtoit'sownresistor,andthe
tworesistorsconnectedtoanoutputpinontheATmega.
Wesolderedinallthetransistorsandturnedthethingonagain,anditworked,
perfectly!
Ifyouknowwhatyouaredoing,youshouldprobablydosomeresearchandfind
amoresuitabletransistororMOSFET.Butoursolutionistriedandtestedand
alsodoesthetrick!
1)Startbyplacingall8alltransistorsonthePBCandsolderingeachoftheir
pins.
2)Runasoldertracebetweenthetheemittersofall16transistors.Connectthis
soldertracetoGND.
3)Solderinaresistorforeachtransistor,thesoldertheresistorstogetherin
pairsoftwo.
4)RunkynarwirefromtheoutputpinsontheATmegatoeachofthe8resistor
pairs.
5)Soldertogetherthecollectorsofthetransistorsinpairsoftwoandrunsolder
traceorwirefromthecollectorpairstoan8pinheader.

Step40:Buildthecontroller:ButtonsandstatusLEDs

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F02189QGI0TMGRN/)

(/file/F2I9WBTGI0TK2P3/)

(/file/FBX85NJGI0TMGRM/)

YoucanmakeaLEDcubewithoutanybuttonsatall,butit'snicetohaveat
leastonebuttonandsomestatusLEDsfordebugging.
WeaddedoneawesomelookingbuttonwithtwobuiltinLEDs,andoneregular
buttonwithanLED.
ThefirstbuttonismountedonthelatcharrayPCB,sincethiswillsitontopof
theAVRboard,andwewantthebuttoneasilyaccessible.Thewiresarerouted
throughtheribboncable.ThesecondbuttonandLEDsitsontheAVRboard
andwasmostlyusedfordebuggingduringconstruction.
ThebuttonsareconnectedbetweenGNDandtheIOpinontheATmega.An
internalpullupresistorinsidetheATmegaisusedtopullthepinhighwhenthe
buttonisnotpressed.Whenthebuttonispressed,theIOpinispulledlow.A
logic0indicatesthatabuttonhasbeenpressed.
TheLEDsarealsoconnectedbetweenGNDandtheIOpinviaaresistorof
appropriatesize.Don'tconnectanLEDtoamicrocontrollerIOpinwithout
havingaresistorconnectedinseries.Theresistoristheretolimitthecurrent,
andskippingitcanblowtheIOportonyourmicrocontroller.

IMadeit!

Favorite

Share

Tofindtheappropriateresistor,justplugtheledintoabreadboardandtest
differentresistorswitha5vpowersupply.Choosetheresistorsthatmakethe
(/contest/epilog/)
LEDlightupwiththebrightnessyouwant.IfyouuseLEDswithdifferentcolors,
LEDCube8x8x8 by
youshouldtestthemsidebyside.DifferentcolorLEDsusuallyrequiredifferent
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
resistorstoreachthesamelevelofbrightness.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

WewillleaveituptoyoutodecidetheplacementofyourstatusLEDs,butyou
canseeinthepicturesbelowhowwedidit:

Step41:Buildthecontroller:RS232

(/file/FRSSY2QGICYB1I2/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FO2ULPZGI0TMGRR/)

Togetthetrulyamazinganimations,weneedtoconnecttheLEDcubetoaPC.
ThePCcandofloatingpointcalculationsthatwouldhavetheAVRworkingin
slowmotion.
TheATmegahasabuiltinserialinterfacecalledUSART(Universal
SynchronousandAsynchronousserialReceiverandTransmitter).
TheUSARTcommunicatesusingTTLlevels(0/5volts).Thecomputertalks
serialusingRS232.ThesignallevelsforRS232areanywherefrom+/5voltsto
+/15volts.
ToconverttheserialsignalsfromthemicrocontrollertosomethingtheRS232
portonaPCcanunderstand,andviceversa,weusetheMaximMAX232IC.
Actually,thechipweareusingisn'tfromMaxim,butitisapincompatibleclone.
Therearesome100nFceramiccapacitorssurroundingtheMAX232.The
MAX232usesinternalchargepumpsandtheexternalcapacitorstostepupthe
voltagetoappropriateRS232levels.Oneofthe100nFcapacitorsisafilter
capacitor.
TheRS232connectorisata90degreeangleforeasyaccesswhenthelatch
arrayboardismountedontopoftheAVRboard.Weuseda4pinconnectorand
cutoneofthepinsouttomakeapolarizedconnector.Thisremovesany
confusionastowhichwaytoplugintheRS232cable.
InthesecondpictureyoucanseetwoyellowwiresrunningfromtheATmegato
theMAX232.ThesearetheTTLlevelTXandRXlines.

IMadeit!

Favorite

Share

1)ConnecttheGNDandVCCpinsusingsoldertraceorwire.Placea100nF
capacitorclosetotheGNDandVCCpins.
2)Solderinplacetherestofthe100nFcapacitors.Youcansolderthesewith
LEDCube8x8x8
by
soldertraces,soitsbesttodothisbeforeyouconnectthetx/rxwires.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
3)Solderinplacea4pin0.1"headerwithonepinremoved.Connectthepin
nexttotheonethatwasremovedtoGND.

4)Connectthetx/rxinputlinestothemicrocontroller,andthetx/rxoutputlines
tothe4pinheader.
Thewiresgoingtothe4pinheaderarecrossedbecausethefirstserialcable
weusedhadthispinout.

Step42:Buildthecontroller:MakeanRS232cable

(/file/FFCF3PVGI0TK2Q0/)

(/file/FS1EWQ8GI0TMGRW/)

(/file/F1MDKJEGICYB1J4/)

IMadeit!

(/contest/epilog/)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

(/file/FF1KJBJGI0TDNU0/)

72Steps

(/file/F6P8MWJGI0TDNU1/)

Collection
(/file/FJXC1BVGI0TK2PP/)

ShowAllItems

ToconnecttheLEDcubetoaserialportonyourcomputer,youneedtomakea
serialcablewithafemaleDSub9pinconnector.
Ouremployerdeployed70Ethernetswitcheswithmanagementlastyear.With
eachswitchcomesanRS232cablethatisneverused.Weliterallyhadabig
pileofRS232cable,sowedecidedtomodifyoneofthose.
OntheLEDcube,a0.1"pinheaderisused,sotheRS232cableneedsanew
connectoronthecubeside.
Wedidn'thavea4pinfemale0.1"connector,soweuseda4pinfemalePCB
headerinstead.
TheconnectorontheLEDcubePCBhasonepinremoved,tovisualizethe
directionalityoftheconnector.Thepinnumbersgoesfromrighttoleft.
PinoutoftheRS232connector:
1)GND(DSub9pin5)
2)Notconnected
3)RX(DSub9pin3)
4)TX(DSub9pin2)
FollowthesestepstomakeyourownRS232cable:
1)Cutoftheconnectoratoneendofthecable.Ifyourcablehasafemaleanda
maleconnector,makesuretoremovethemaleconnector!
2)Stripawaytheoutersheathontheendwhereyouremovedtheconnector.
3)Stripallthewiresinside.
4)Setyourmultimetertocontinuitytestmode.Thismakesthemultimeterbeep
whentheprobesareconnected.Ifyourmultimeterdoesn'thavethisoption,use
theresistancemode.Itshouldgetcloseto0ohmwhenyouconnecttheprobes.
5)ConnectonemultimeterprobetotheDSub9'spin5,thenprobeallthewires
untilyouthemultimeterbeeps.YouhavenowidentifiedthecolorofGNDinyour
cable.Repeatforpin2and3(TXandRX).
6)Writedownthecolorsyouidentified,thencutofftheotherwires.
7)Cutthethreewiresdowntosize,30mmshoulddo.

IMadeit!

Favorite

Share

8)Pretinthewirestomakesolderingeasier.Justapplyheatandsoldertothe
strippedwires.

(/contest/epilog/)

LEDCube8x8x8 by

9)Slideashrinktubeoverthecable.Slidethreesmallershrinktubesoverthe
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
individualwires.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

10)Solderthewirestotheconnector.
11)Shrinkthesmallertubesfirst,thenthelargeone.Ifyouusealighter,don't
holdtheshrinktubeabovetheflame,justholditclosetothesideoftheflame.
Don'tmakeyourcablebasedonthecolorsweused.Testthecabletofindthe
correctcolors.

Step43:Buildthecontroller:Connecttheboards

(/file/F0PJT0OGICYB3E2/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

(/file/FUJ6V1VGICYB6R2/)

Thetwoboardsareconnectedbytwocables:
AribboncablefortheDATAandAddressBUS.
A2wirecableforGNDandVCC.
Afterconnectingthesetwocables,yourboardiscomplete.

Step44:Buildthecontroller:Connectthecube

Collection

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FERUACCGICYB1O0/)

(/file/FPC6VY7GICYB1O4/)

(/file/FZGJCSYGI0TDNV9/)

(/file/FMJ7V6HGI0TMHB1/)

Connecttheribboncablesaccordingtothepinoutsshowninpicture2and3.
Thegroundlayerribboncableconnectstothepinheadernearthetransistor
array.Ifthecubeisupsidedown,justplugitintheotherway.

Step45:ProgramtheAVR:Setthefusebits

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FAC2E2EGI0TMHE8/)

(/file/F79FMGCGI0TMGS5/)

(/file/FUH6PI2GI0TK2QA/)

(/file/FI60DJNGI0TDNVG/)

(/file/FED6901GICYB1P3/)

TheATmega32hastwofusebytes.Thesecontainsettingsthathavetobe
loadedbeforetheCPUcanstart,likeclocksourceandotherstuff.Youhaveto
programyourATmegatouseanexternalhighspeedcrystaloscillatorand
disableJTAG.
Wesetthelowerfusebyte(lfuse)to0b11101111,andthehighfusebyteto
0b11001001.(0bmeansthateverythingafterthebisinbinary).

IMadeit!

Favorite

Share

WeusedavrdudeandUSBtinyISP(http://www.ladyada.net/make/usbtinyisp/)to
programourATmega.
(/contest/epilog/)

Inallthefollowingexamples,wewillbeusinganUbuntuLinuxcomputer.The
LEDCube8x8x8
by
commandsshouldbeidenticalifyourunavrdudeonWindows.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
avrdudecusbtinypm32Ulfuse:w:0b11101111:m
avrdudecusbtinypm32Uhfuse:w:0b11001001:m
Download
IMadeit!
Collection
Favorite
h(/id/LedCube8x8x8/) 72Steps .
Warning:Ifyougetthiswrong,youcouldeasilybrickyourATmega!Ifyoufor
exampledisabletheresetbutton,youwon'tbeabletoreprogramit.Ifyou
selectthewrongclocksource,itmightnotbootatall.

Step46:ProgramtheAVRwithtestcode

(/file/FOSNXR5GI0TK2QC/)

(/file/FDG4UZQGI0TDNVP/)

(/file/F5T13Q6GI0TMGSL/)

TimetotestifyourbrandnewLEDcubeactuallyworks!
WehavepreparedasimpletestprogramtocheckifalltheLEDsworkandif
theyarewiredcorrectly.
Youcandownloadthefirmwaretest.hexinthisstep,ordownloadthesource
codeandcompileityourself.

Share

Asinthepreviousstep,weuseavrdudeforprogramming:
avrdudecusbtinypm32B1Uflash:w:test.hex

(/contest/epilog/)

LEDCube8x8x8 by
cusbtinyspecifiesthatweareusingtheUSBtinyISPfromLadyadapm32
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
specifiesthatthedeviceisanATmega32B1tellsavrdudetoworkatahigher
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
thandefaultspeed.Uflash:w:test.hexspecifiesthatweareworkingonflash
memory,inwritemode,withthefiletest.hex.

test.hex(/files/orig/FQX/H9M5/GICYB93T/FQXH9M5GICYB93T.tmp)

Step47:Testthecube

(/file/FLU2HHFGICYB1R3/)

Thetestcodeyouprogrammedinthepreviousstepwillletyouconfirmthat
everythingiswiredupcorrectly.
Itwillstartbydrawingaplanealongoneaxis,thenmovingitalongall8
positionsofthataxis.(byplanewemeanaflatsurface,notanairplane:p)The
testcodewilltraverseaplanethroughallthreeaxis.
Afterthat,itwilllighttheLEDsinalayeronebyone,startingatthebottomlayer.
Ifanyofthelayersorcolumnsseemtolightupinthewrongorder,youhave
probablysolderedthewrongwiretothewronglayerorcolumn.Wehadone
mistakeinourcube)
Ifyoufindanythingthatisoutoforder,justdesolderthewiresandsolderthem
backintherightorder.Youcouldofcoursemakeaworkaroundinsoftware,but
thatwouldeatCPUcycleseverytimetheinterruptroutineruns.

IMadeit!

Favorite

Share

Youcancompareyourcubetothetestvideobelow:
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Step48:ProgramtheAVRwithrealcode

(/file/F3XMRIDGICYB1RZ/)

(/file/FIIHXWNGI0TMGST/)

(/file/FG5Q7SVGI0TK2QP/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

(/file/FYSSF2FGI0TDNX8/)

Collection

(/file/FVB35IWGICYB1SC/)

Soeverythingcheckedoutinthetest.It'stimetoprogramtheATmegawiththe
realfirmware!
Forthemostpart,theprocessisthesameasinthepreviousprogrammingstep.
ButinadditionyouhavetoprogramtheEEPROMmemory.TheLEDcubehasa
basicbitmapfontstoredinEEPROM,alongwithsomeotherdata.
Firmwareisprogrammedusingthesameprocedureaswiththetestcode.
Firmware:
avrdudecusbtinypm32B1Uflash:w:main.hex
EEPROM:
avrdudecusbtinypm32B1Ueeprom:w:main.eep
Ueeprom:w:main.eepspecifiesthatweareaccessingEEPROMmemory,in
writemode.AvrgccputsalltheEEPROMdatainmain.eep.
Ifyoudon'twanttoplayaroundwiththecode,yourLEDcubeisfinishedatthis
point.Butwerecommendthatyouspendsometimeonthesoftwaresideof
thingsaswell.That'satleastasmuchfunasthehardware!
Ifyoudownloadthebinaryfiles,youhavetochangethefilenamesinthe
commandstothenameofthefilesyoudownloaded.Ifyoucompilefromsource
thenameismain.hexandmain.eep.

ledcube_8x8x8_eeprom.eep
(/files/orig/F53/QFDQ/GICYB944/F53QFDQGICYB944.tmp)

ledcube_8x8x8.hex(/files/orig/FVZ/Y8K2/GICYB945/FVZY8K2GICYB945.tmp)

Step49:Software:Introduction

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FI2CBSYGICYB7KV/)

ThesoftwareiswritteninCandcompiledwiththeopensourcecompileravr
gcc.ThisisthemainreasonweuseAtmelAVRmicrocontrollers.ThePIC
seriesfromMicrochipisalsoanicechoice,butmostoftheCcompilerscost
money,andthefreeversionshavelimitationsoncodesize.
TheAVRrouteismuchmorehasslefree.Justaptgetinstalltheavrgcc
compiler,andyou'reinbusiness.
ThesoftwareontheAVRconsistsoftwomaincomponents,thecubeinterrupt
routineandeffectcodeformakingfancyanimations.
Whenwefinallyfinishedsoldering,wethoughtthiswouldbetheeasypart.Butit
turnsoutthatmakinganimationsinmonochromeatlowresolutionsisharder
thanitsounds.
Ifthedisplayhadahigherresolutionandmorecolors,wecouldhaveusedsin()
andcos()functionsandallthattomakefancyeyecandy.Withtwocolors(on
andoff)andlowresolution,wehavetousealotofif()andfor()tomake
anythingmeaningful.
Inthenextfewsteps,wewilltakeyouonatourofsomeoftheanimationswe
madeandhowtheywork.Ourgoalistogiveyouanunderstandingofhowyou
canmakeanimations,andinspireyoutocreateyourown!Ifyoudo,pleasepost
avideointhecomments!

ledcube_8x8x8v0.1.2.tar.gz
(/files/orig/FJG/AU0K/GICYB94U/FJGAU0KGICYB94U.tmp)

Step50:Software:Howitworks

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F004K0HGICYB3XX/)

Asmentionedinthepreviousstep,thesoftwareconsistsoftwopars.The
interruptroutineandtheeffectcode.
Communicationbetweenthesetwohappensviaavoxelarray.Thisarrayhasa
bitforeveryLEDintheLEDcube.Wewillrefertothisasthecubearrayorcube
bufferfromnowon.
Thecubearrayismadeof8x8bytes.Sinceeachbyteis8bits,thisgivesusa
bufferthatis8voxelswide,8woxelshighand8voxelsdeep(1bytedeep).
volatileunsignedcharcube[8][8]
Theinterruptroutinereadsfromthecubearrayatgivenintervalsanddisplays
theinformationontheLEDcube.
TheeffectfunctionswritesthedesiredLEDstatusestothisarray.
Wedidnotuseanysynchronizationordoublebuffering,sincethereisonlyone
producer(eithertheeffectscurrentlyrunning,orinputfromRS232)andone
consumer(theinterruptcodethatupdatesthecube).Thismeansthatsome
voxelscouldbefromthenextorprevious"frame",butthisisnotaproblem,
sincetheframerateissohigh.
Whenworkingwithmicrocontrollers,codesizeiscritical.Tosavecodesizeand
programmingwork,andtomakethecodeeasiertoread,wehavetriedtowrite
reusablecodeasoftenaspossible.
TheLEDcubecodehasabaseoflowleveldrawingfunctionsthatareusedby
thehigherleveleffectfunctions.Thedrawfunctionscanbefoundindraw.c.
Drawfunctionsincludeeverythingfromsettingorclearingasinglevoxelto
drawinglinesandwireframeboxes.

Step51:Software:IOinitialization

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FC0CBMRGICYB7YO/)

(/file/F75D9SJGICYB7YN/)

ThefirstthingtheATmegadoesafterboot,istocalltheioinit()function.
ThisfunctionsetsupIOports,timers,interruptsandserialcommunications.
AllIOportsontheATmegaarebidirectional.Theycanbeusedeitherasan
inputoranoutput.Weconfigureeverythingasoutputs,excepttheIOpinswhere
thetwobuttonsareconnected.TheRXpinfortheseriallineautomatically
becomesaninputwhenUSARTRXisenabled.
1)DDRxsetsthedatadirectionoftheIOpins.(DataDirectionRegister).1
meansoutput,0meansinput.

IMadeit!

Favorite

Share

2)Afterdirectionalityhasbeenconfigured,wesetalloutputsto0toavidany
blinkingLEDsetcbeforetheinterrupthasstarted.

(/contest/epilog/)

LEDCube8x8x8 by

3)Forpinsconfiguredasinputs,thePORTxbitchangesitsfunction.Settinga1
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
inthePORTxregisterbitenablesaninternalpullupresistor.Theportispulled
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
uptoVCC.ThebuttonsareconnectedbetweentheportandGND.Whena
buttonispressedthecorrespondingPINxbitreadsalogic0.
4)Timer2isconfiguredandatimerinterruptenabled.Thisiscoveredina
separatestep.
5)Serialcommunicationsisconfiguredandenabled.Thisisalsocoveredina
separatestep.

Step52:Software:Modeselectionandrandomseed

(/file/F1B8RBNGI0TK45B/)

Whenwefirststartedwritingeffectsanddebuggingthem,wenoticedthatthe
functionsusingrandomnumbersdisplayedtheexactsameanimationsevery
time.Itwasrandomalright,butthesamerandomsequenceeverytime.Turns
outtherandomnumbergeneratorintheATmeganeedstobeseededwitha
randomnumbertocreatetruerandomnumbers.
Wewroteasmallfunctioncalledbootwait().Thisfunctionservestwopurposes.
1)Createarandomseed.2)Listenforbuttonpressestoselectmodeof
operation.
Itdoesthefollowing:
1)Setcounterxto0.
2)Startaninfiniteloop,while(1).
3)Incrementcounterxbyone.

IMadeit!

Favorite

Share

4)Usexasarandomseed.
5)Delayforawhileandsetredstatusledon.
6)Checkforbuttonpresses.Ifthemainbuttonispressed,thefunctionreturns1.
LEDCube8x8x8
by
IfthePGMbuttonispresseditreturnes2.Thereturnstatementsexitsthe
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
functionthusendingtheinfiniteloop.

h
7)Delayagainandsetgreenledon.
Download

(/id/LedCube8x8x8/)

72Steps

Collection

8)Checkforbuttonpressesagain.
9)Loopforeveruntilabuttonispressed.
Thelooploopsveryfast,sotheprobabilitythatyouwillstopitatthesamevalue
ofxtwotimesinarowisveryremote.Thisisaverysimplebuteffectivewayto
getagoodrandomseed.
Bootwait()iscalledfromthemain()functionanditsreturnvalueassignedtothe
variablei.
Ifi==1,themainloopstartsaloopthatdisplayseffectsgeneratedbythe
ATmega.Ifi==2,itentersintoRS232modeandwaitsfordatafroma
computer.

Step53:Software:Interruptroutine

(/file/FJUHIM1GI0TK2QT/)

IMadeit!

(/contest/epilog/)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

(/file/FTHKRXNGI0TMGT7/)

(/file/FCJ8C6HGI0TDNZS/)

Collection

(/file/FH012ULGI0TDNZR/)

(/file/FNTSQBIGI0TMGT9/)
ShowAllItems

TheheartoftheLEDcubecodeistheinterruptroutine.
Everytimethisinterruptruns,thecubeiscleared,dataforthenewlayeris
loadedontothelatcharray,andthenewlayerisswitchedon.Thisremainson
untilthenexttimetheinterruptruns,wherethecubeisclearedagain,datafor
thenextlayerisloadedontothelatcharray,andthenextlayerisswitchedon.
TheATmega32has3timer/counters.Thesecanbesettocountcontinuously
andtriggeraninterruptroutineeverytimetheyreachacertainnumber.The
counterisresetwhentheinterruptroutineiscalled.
WeuseTimer2withaprescalerof128andanOutputComparevalueof10.
Thismeansthatthecounterisincrementedby1forevery128thcpucycle.
WhenTimer2reaches10,itisresetto0andtheinterruptroutineiscalled.With
acpufrequencyof14745600Hz,128prescalerandoutputcompareof10,the
interruptroutineiscalledevery1408thCPUcycle(128*11)or10472.7timesper
second.Itdisplaysonelayeratatime,soittakes8runsoftheinterrupttodraw
theentirecubeonce.Thisgivesusarefreshrateof1309FPS(10472.7/8).At
thisrefreshrate,theLEDcubeis100%flickerfree.Somemightsaythat1300
FPSisoverkill,buttheinterruptroutineisquiteefficient.Atthishighrefreshrate,
itonlyusesabout21%oftheCPUtime.Wecanmeasurethisbyattachingan
oscilloscopetotheoutputenableline(OE).Thisispulledhighatthestartof
eachinterruptandlowattheend,soitgivesaprettygoodindicationofthetime
spentinsidetheinterruptroutine.
Beforeanytimedinterruptscanstart,wehavetosetuptheTimer2.Thisis
doneintheioinit()function.
TCCR2(TimerCounterControlRegister2)isan8bitregisterthatcontains
settingsforthetimerclocksourceandmodeofoperation.Weselectaclock
sourcewitha1/128prescaler.ThismeansthatTimer/counter2isincrementet
by1every128thCPUcycle.

IMadeit!

Favorite

Share

WesetittoCTCmode.(ClearonTimerCompare).Inthismode,thecounter
valueTCNT2iscontinuouslycomparedtoOCR2(OutputCompareRegister2).
EverytimeTCNT2reachesthevaluestoredinOCR2,itisresetto0andstarts
(/contest/epilog/)
countingfromfrom0.Atthesametime,aninterruptistriggeredandtheinterrupt
LEDCube8x8x8 by
routineiscalled.
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Foreveryrunoftheinterrupt,thefollowingtakesplace:

Collection

1)Allthelayertransistorsareswitchedoff.
2)Outputenable(OE)ispulledhightodisableoutputfromthelatcharray.
3)Alooprunsthroughi=07.ForeverypassabyteisoutputedontheDATA
busandthei+1isoutputedontheaddressbus.Weaddthe+1becausethe
74HC138hasactivelowoutputsandthe74HC574clocklineistriggeredonthe
risingedge(transitionfromlowtohigh).
4)Outputenableispulledlowtoenableoutputfrothelatcharrayagain.
5)Thetransistorforthecurrentlayerisswitchedon.
6)current_layerisincrementedorresetto0ifitmovesbeyond7.
That'sit.Theinterruptroutineisquitesimple.I'msuretherearesome
optimizationswecouldhaveused,butnotwithoutcompromisinghuman
readabilityofthecode.Forthepurposeofthisinstructable,wethinkreadability
isareasonabletradeoffforaslightincreaseinperformance.

Step54:Software:Lowlevelfunctions

(/file/F4NM6VYGICYB7QH/)

Wehavemadeasmalllibraryoflowlevelgraphicfunctions.
Therearethreemainreasonsfordoingthis.
Memoryfootprint
Theeasiestwaytoaddresseachvoxelwouldbethroughathreedimensional
bufferarray.Likethis:

IMadeit!

Favorite

Share

unsignedcharcube[x][y][z](charmeansan8bitnumber,unsignedmeansthat
it'srangeisfrom0to255.signedis128to+127)
(/contest/epilog/)
Withinthisarrayeachvoxelwouldberepresentedbyaninteger,where0isoff
LEDCube8x8x8
by
and1ison.Infact,youcouldusetheentireintegerandhave256different
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
brightnesslevels.Weactuallytriedthisfirst,butitturnedoutthatoureBayLEDs
hadverylittlechangeinbrightnessinrelationtodutycycle.Theeffectwasn't
Download
IMadeit!
Collection
Favorite
Share
h(/id/LedCube8x8x8/) 72Steps .
noticeableenoughtobeworththetrouble.Wewentforamonochromesolution.
Onandoff.

Withamonochromecubeandathreedimensionalbuffer,wewouldbewasting
7/8ofthememoryused.Thesmallestamountofmemoryyoucanallocateis
onebyte(8bits),andyouonlyneed1bittorepresentonandoff.7bitsforeach
voxelwouldbewasted.512*(7/8)=448bytesofwastedmemory.Memoryis
scarceonmicrocontrollers,sothisisasuboptimalsolution.
Instead,wecreatedabufferthatlookslikethis:
unsignedcharcube[z][y]
InthisbuffertheXaxisisrepresentedwithineachofthebytesinthebuffer
array.Thiscanbequiteconfusingtoworkwith,whichbringsustothesecond
reasonformakingalibraryoflowleveldrawingfunctions:
Codereadability
Settingavoxelwiththecoordinatesx=4,y=3,z=5willrequirethefollowing
code:
cube[5][3]|=(0x01<<4)
Youcanseehowthiscouldleadtosomeseriousheadscratchingwhentryingto
debugyoureffectcode)
Indraw.cwehavemadeabunchoffunctionsthattakesx,y,zasargumentsand
doesthismagicforyou.
Settingthesamevoxelasintheexampleaboveisdonewithsetvoxel(4,3,5),
whichis_alot_easiertoread!
draw.ccontainsmanymorefunctionslikethis.Linedrawing,planedrawing,box
drawing,fillingetc.Havealookindraw.candfamiliarizeyourselfwiththe
differentfunctions.
Reusablecodeandcodesize
Asyoucanseeindraw.c,someofthefunctionsarequitelarge.Writingthat
codeoverandoveragaininsideeffectfunctionswouldtakeupalotofprogram
memory.Weonlyhave32KBtoworkwith.Itsalsoboringtowritethesame
codeoverandoveragain)

Step55:Software:Cubevirtualspace

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FAZUJHTGI0TK2R0/)

(/file/FW9XO31GI0TDNZV/)

(/file/F4JKMDEGI0TDNZW/)

(/file/FCTXDX6GI0TK2QY/)

(/file/FJAKB9RGI0TK2QZ/)

(/file/FYKX4F6GI0TMGTQ/)

Nowthatwehaveacubebufferandanicelittlecollectionoflowleveldraw
functionstopopulateit,weneedtoagreeonwhichwaysiswhat,andwhatisup
andwhatisdown)
Fromnowon,thenativepositionoftheLEDcubewillbewiththecablescoming
outtotheleft.
Inthisorientation,theYaxisgoesfromlefttoright.TheXaxisgoesfromfrontto
back.TheZaxisgoesfrombottomtotop.
Coordinatesinthisinstructableisalwaysrepresentedasx,y,z.

IMadeit!

Favorite

Share

Position0,0,0isthebottomleftfrontcorner.Position7,7,7isthetoprightback
corner.
(/contest/epilog/)
WhydidweusetheYaxisforleft/rightandXforback/front?Shouldn'titbethe
LEDCube8x8x8
by
otherwayaround?Yes,wethinksotoo.WedesignedthetheLEDcubetobe
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
viewedfromthe"front"withthecablescomingouttheback.However,thiswas
quiteimpracticalwhenhavingtheLEDcubeonthedesk,itwasmorepractical
Download
IMadeit!
Collection
Favorite
Share
h(/id/LedCube8x8x8/) 72Steps .
tohavethecablescomingouttheside,andhavingcubeandcontrollersideby
side.Alltheeffectfunctionsaredesignedtobeviewedfromthisorientation.

Step56:Software:Effectlauncher

(/file/F8GTGAIGICYB83H/)

(/file/FTG5NCKGICYB836/)

(/file/FK06M68GICYB835/)

Wewantedaneasywaytoruntheeffectsinafixedorderorarandomorder.
Thesolutionwastocreateaneffectlauncherfunction.
launch_effect.ccontainsthefunctionlaunch_effect(inteffect).
Insidethefunctionthereisaswitch()statementwhichcallstheappropriate
effectfunctionsbasedonthenumberlaunch_effect()wascalledwith.
Inlaunch_effect.hEFFECTS_TOTALisdefined.Wesetitonenumberhigher
thanthehighestnumberinsidetheswitch()statement.

Launchingtheeffectsonebyoneisnowasimplematterofjustloopingthrough
thenumbersandcallinglaunch_effect(),likethis:

(/contest/epilog/)

LEDCube8x8x8 by

while(1)
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
for(i=0i<EFFECTS_TOTALi++)

Download
{

h(/id/LedCube8x8x8/)

72Steps

Collection

launch_effect(i)
}
}
Thiscodewillloopthroughalltheeffectsinincrementalorderforever.
Ifyouwantthecubetodisplayeffectsinarandomorder,justusethefollowing
code:
while(1)
{
launch_effect(rand()%EFFECTS_TOTAL)
}
The%EFFECTS_TOTALafterrand()keepstherandomvaluebetween0and
EFFECTS_TOTAL1.

Step57:Software:Effect1,rain

(/file/FOY1PD8GICYB274/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FA0NK40GI0TDO2S/)
(/file/FV1C9SZGICYB866/)

Letsstartwithoneofthesimplesteffects.
Ineffect.cyouwillfindthefunctioneffect_rain(intiterations).
Thiseffectaddsraindropstothetoplayerofthecube,thenletsthemfalldown
tothebottomlayer.
Mostoftheeffectshaveamainfor()loopthatloopsfromi=0toi<iterations.
effect_rain(intiterations)onlytakesoneargument,whichisthenumberof
iterations.
Insidetheiterationloop,thefunctiondoesthefollowing:
1)Createarandomnumberbetween0and3,letscallitnhere.
2)Loopafor()loopnnumberoftimes.
3)Foreachiterationofthisloop,placeapixelonlayer7(z=7)atrandomxand
ycoordinates.
4)Delayforawhile
5)ShiftthecontentsoftheentirecubealongtheZaxisby1positions.This
shiftseverythingdownonelevel.
Thisisaprettysimpleeffect,butitworks!

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Step58:Software:Effect2,planeboing

(/file/F6L3GT0GI0TMGUD/)

(/file/FV7BHEJGI0TDO33/)

(/file/FF2GNQRGI0TK2R7/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

(/file/FDIB22JGICYB87B/)

Collection

(/file/F1UHTEKGICYB87A/)

Anothersimpleeffect,effect_planboing(intplane,intspeed).
Thiseffectdrawsaplanealongthespecifiedaxisthenmovesitfromposition0
to7ontheaxisandbackagain.Thisisverysimple,butitreallybringsoutthe
depthofthe3dLEDcube:)
Thisfunctiondoesn'thaveaniterationloop.Insteaditiscalledtwiceforeach
axisinlaunch_effect().
Hereiswhatitdoes:
1)For()loopifrom0to7.
2)Clearthecubewithfill(0x00)
3)Callsetplane()todrawaplanealongthedesiredaxisatpositioni.Theplane
isn'tactuallydrawnontheaxisspecified,itisdrawnontheothertwoaxis.Ifyou
specifyAXIS_Z,aplaneisdrawnonaxisXandY.It'sjusteasiertothinkofit
thatway.InsteadofhavingconstantsnamedPLANE_XY,PLANE_YZetc.
4)Delayforawhile.
5)Repeatthesameloopwithigoingfrom7to0.
Verysimple,butaverycooleffect!

IMadeit!

Favorite

Share

Step59:Software:Effect3,sendvoxelsrandomZ
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F0HZ98RGICYB2DC/)

(/file/FNPKQC3GICYB2DI/)
(/file/F12GW2ZGICYB89G/)

(/file/FGC6CZ9GICYB89F/)

(/file/FTUBRCGGICYB89E/)

ThiseffectsendsvoxelsupanddowntheZaxis,astheimplies.
voidsendvoxels_rand_z()takesthreearguments.Iterationsisthenumberof
timesavoxelissentupordown.Delayisthespeedofthemovement(higher
delaymeanslowerspeed).Waitisthedelaybetweeneachvoxelthatissent.
Thisishowitworks:
1)Thecubeisclearedwithfill(0x00)

IMadeit!

Favorite

Share

2)Loopthroughall64positionsalongX/Yandrandomlysetavoxelateither
Z=0orZ=7.
(/contest/epilog/)

3)Enterthemainiterationloop

LEDCube8x8x8 by

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
4)SelectrandomcoordinatesforXandYbetween0and7.IftheXandY
Eleds(/tag/typeid/categorytechnology/channelleds/)

coordinatesareidenticaltothepreviouscoordinates,thisiterationisskipped.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

5)CheckifthevoxelatthisX/YcoordinateisatZ=0orZ=7,andsendittothe
oppositesideusingsendvoxel_z().
6)Delayforawhileandsavethecoordinatesofthisiterationsowecancheck
themagainsttherandomcoordinatesinthenextiteration.Itlookedweirdto
movethesamevoxeltwiceinarow.
Theactualmovementofthevoxelsisdonebyanotherfunction,sendvoxel_z.
Thereasonforthis,isthatacoupleofothereffectsdoesthesamethingonlyin
differentways.
Thefunctionsendvoxel_z()takesfourargument.XandYcoordinates.Z
coordinate,thisisthedestinationandcaneitherbe0or7.Delaywhichcontrols
thespeed.
Thisishowitworks:
1)For()loopifrom0to7.
2)Ifthedestinationis7,wesetiito71,thusmakingiithereverseofi.Clearthe
voxelatZ=ii+1.Whenmovingdown,ii+1isthepreviousvoxel.
3)Ifthedestinationis0,letiibeequaltoi.Clearii1.Whenmovingupwards,1
isthepreviousvoxel.
4)Setthevoxelatz=ii.
5)Waitforawhile.

Step60:Software:Effect4,boxshrinkgrowandwoopwoop

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FRKNTEEGI0TK2RH/)

(/file/FWDXKKPGI0TMGUU/)

(/file/FZ1XMO5GI0TMGUZ/)

(/file/F2FNVPSGI0TK2RG/)

(/file/FOO1NOLGICYB8CT/)
ShowAllItems

Awireframeboxisagoodgeometricshapetoshowinamonochrome8x8x8
LEDcube.Itgivesaverynice3deffect.
WemadetwoboxanimationfunctionsfortheLEDcube.
Effect_box_shrink_grow()drawsawireframeboxfillingtheentirecube,then
shrinksitdowntoonevoxelinoneof8corners.Wecallthisfunctiononetime
foreachofthe8cornerstocreateaniceeffect.Effect_box_woopwoop()draws
aboxthatstartsasa8x8x8wireframeboxfillingtheentirecube.Itthenshrinks
downtoa2x2x2boxatthecenterofthecube.Orinreverseifgrowisspecified.
Hereishoweffect_box_shrink_grow()works.

IMadeit!

Favorite

Share

Ittakesfourarguments,numberofiterations,rotation,flipanddelay.Rotation
specifiesrotationaroundtheZaxisat90degreeintervals.Flip>0flipsthecube
upsidedown.

(/contest/epilog/)

LEDCube8x8x8
by
Tomakethefunctionassimpleaspossible,itjustdrawsaboxfrom0,0,0toany
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
pointalongthediagonalbetween0,0,0and7,7,7thenusesaxismirrorfunctions

fromdraw.ctorotateit.
Download

h(/id/LedCube8x8x8/)

72Steps

1)Entermainiterationloop.

Collection

2)Enterafor()loopgoingfrom0to15.
3)Setxyzto7i.Thismakesxyzthereverseofi.Wewanttoshrinktheboxfirst,
thengrow.xyzisthepointalongthediagonal.Wejustusedonevariablesince
x,yandzareallequalalongthisdiagonal.
4)Wheni=7,theboxhasshrunktoa1x1x1box,andwecan'tshrinkitany
more.Ifiisgreaterthan7,xyzissettoi8,whichmakesxyztravelfrom0to7
whenitravelsfrom8to15.Wedidthistricktoavoidhavingtwoforloops,whith
onegoingfrom70andonefrom07.
5)Blankthecubeanddelayalittlebittomakesuretheblankingisrenderedon
thecube.Disabletheinterruptroutine.Wedothisbecausethemirrorfunctions
takesalittletime.Withoutdisablinginterrupts,thewireframeboxwouldflash
brieflyintheoriginalrotationbeforebeingdisplayedrotated.
6)Drawthewireframeboxinitsoriginalrotation.sideoftheboxisalwaysat
0,0,0whiletheothertravelsalongthediagonal.
7)Dotherotations.Ifflipisgreatherthan0,thecubeisturnedupsidedown.rot
takesanumberfrom0to3where0is0degreesofrotationaroundZand3is
270degrees.Toget270degreeswesimplymirroraroundXandY.
8)Enableinterruptstodisplaythenowrotatedcube.
9)Delayforawhilethenclearthecube.
Theotherfunctioninvolvedinthewireframeboxeffectis
effect_box_woopwoop().Thenamewoopwoopjustsoundednaturalwhenwe
firstsawtheeffectrenderedonthecube)
Thewoopwoopfunctiononlydoesoneiterationandtakestwoarguments,delay
andgrow.Ifgrowisgreaterthan0,theboxstartsasa2x2x2boxandgrowtoa
8x8x8box.
Hereishowitworks:
1)Clearthecubebyfillingthebufferwith0x00
2)For()loopfrom0to3.
4)Setiitoi.Ifgrowisspecifiedwesetitto3itoreverseit.
5)Drawawireframeboxcenteredalongthediagonalbetween0,0,0and7,7,7.
Onecorneroftheboxusesthecoordinates4+iionallaxes,movingfrom47.
Theothercorneruses3iionallaxes,movingfrom30.
6)Delayforawhile,thenclearthecube.
Thesetwofunctionsareusedasonesingleeffectintheeffectlauncher.Firstthe
shrinkgroweffectiscalled8times,oneforeachcorner,thenwoopwoopis
calledfourtimes,twoshrinkandgrowcycles.
Tolaunchtheshrinkgrowfunction,weusedaforloopwithsomeneatbit
manipulationtricksinsidetoavoidwriting8linesofcode.

IMadeit!

Favorite

Share

Thesecondargumentoftheshrinkgrowfunctionsistherotation,in4steps.We
arecountingfrom0to7,sowecan'tsimplyfeediintothefunction.Weusethe
modulooperator%tokeepthenumberinsidearangeof04.Themodulo
operatordividesbythenumberspecifiesandreturnstheremainder.
LEDCube8x8x8
by

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Thethirdargumentistheflip.Whenflip=0,thecubeisnotflipped.>0flips.We

usethebitwiseANDoperatortoonlyreadbit3ofi.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Bitwiseoperatorsareanabsolutemusttoknowaboutwhenworkingwithmicro
controllers,butthatisoutsidethescopeofthisinstructable.Theguysoverat
AVRFreakshavepostedsomegreatinformationaboutthistopic.Youcanread
moreathttp://www.avrfreaks.net/index.php?
name=PNphpBB2&file=viewtopic&t=37871

Step61:Software:Effect5,axisupdownrandsuspend

(/file/FR1A1UQGI0TK2RR/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

(/file/FREW2TXGI0TMGV5/)

(/file/FDNZ2O3GICYB8IL/)

72Steps

Collection

(/file/FNOHKA1GI0TDO6E/)

(/file/FFMUVDMGICYB8IK/)

(/file/FET7XGYGICYB8IJ/)

Thisisoneofourfavoriteeffects.Thevoxelsrandomlysuspendedinthecube
givesanice3ddepth,especiallyifyoumoveyourheadwhileviewingtheeffect.
64voxelsstartoutononeofthesidewalls.Thentheyallgetassignedarandom
midwaydestinationbetweenthesidewalltheystartedatandthewallonthe
oppositeside.
Thefunctionthenloops8timesmovingeachvoxelclosertoitsmidway
destination.After8iterations,thevoxelsaresuspendedatdifferentdistances
fromwheretheystarted.Thefunctionthenpausesforawhile,thusthename
axis_updown_randsuspend).Itthenloops8timesagainmovingthevoxelsone
stepclosertotheirfinaldestinationontheoppositewalleachtime.
Theactualvoxeldrawingisdoneinaseparatefunction,draw_positions_axis()
soitcanbeusedindifferenteffects.Forexample,thevoxelscouldbe
suspendedmidwayinanonrandompattern.Wewillleaveituptoyoutocreate
thateffectfunction!:D
Youmayhavenoticedthatthedescriptionforthiseffectwaslessspecific.We
encourageyoutodownloadthesourcecodeandreadthroughthefunctions
yourself.Keepthetextaboveinmindwhenreadingthecode,andtrytofigure
outwhateverythingdoes.

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Step62:Software:Effect6,stringfly

(/file/FCLZ6E7GI0TK2TN/)

(/file/FPMP8MQGICYB2SX/)
(/file/FGSL22MGICYB8K3/)

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

(/file/F5LKGMFGI0TDUCU/)

Collection

(/file/FF1JCMFGICYB8L6/)

8x8isaboutthesmallestsizerequiredtorenderameaningfultextfont,sowe
justhadtodojustthat!
Weloadeda8x5bitmapfontthatwehadpreviouslyusedwithagraphicalLCD
displayintoEEPROMmemory,andcreatedsomefunctionsthattookanASCII
charasanargumentandreturnedabitmapofthecharacter.
Thefunctionstringfly2takesanyASCIIstringanddisplaysitascharactersflying
throughthecube.
Itstartsbyplacingthecharacteratthebackofthecube,thenusestheshift()
functiontoshiftthecubecontentstowardsyou,makingthetextfly.

Step63:Software:RS232input

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FXOUWNGGI0TMLBZ/)

(/file/FAOTSERGI0TDP9U/)
(/file/FGM6DHPGI0TK89D/)

Togeneratethemostawesomeeffects,weuseadesktopcomputer.Computers
candofloatingpointcalculationsandstufflikethatmuchquickerthanamicro
controller.Andyoudon'thavetoreprogramthemicrocontrollerforeveryeffect
youmake,oreverytimeyouwanttotestordebugsomething.
TheUSARTinterfaceintheATmegaisconfiguredtoworkat38400baudwith
onestopbitandnoparity.Eachbytethatissentdownthelinehasastartbit
andastopbit,so10bitsissenttotransmit8bits.Thisgivesusabandwidthof
3840bytespersecond.Thecubebufferis64bytes.Syncingbytesmakeup2
bytespercubeframe.At38400baudweareabletosendabout58framesper
second.Morethanenoughforsmoothanimations.
0xffisusedasanescapecharacter,andputsthers232functionintoescape
mode.Ifthenextbyteis0x00,thecoordinatesforthebufferarerestoredto0,0.
Ifthenextbyteis0xff,itisaddedtothebuffer.Tosend0xff,yousimplysendit
twice.
Thers232functionjustloopsforever.Aresetisneededtoenterthecube's
autonomousmodeagain.

Step64:PCSoftware:Introduction

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FHF3FSFGICYB7UZ/)

ThecubejustreceivesbinarydataviaRS232.Thisdatacouldeasilybe
generatedbyanumberofdifferentprogramminglanguages,likepython,perlor
evenphp.
WechosetouseCforthePCsoftware,sincethemicrocontrollersoftwareis
writteninC.Thiswayeffectsfromthemicrocontrollercodecanjustbecopy
pastedintothePCsoftware.
Justlikeinthemicrocontrollercode,thiscodealsodoestwothings.Wherethe
microcontrollerhasaninterruptroutinethatdrawsthecontentsofcube[][]onto
theLEDcube,thePCsoftwarehasathreadthatcontinuallysendsdatatothe
LEDcube.

cube_pcv0.1.tar.gz(/files/orig/FDJ/3BMV/GICYBAHY/FDJ3BMVGICYBAHY.tmp)

Step65:PCSoftware:Cubeupdaterthread

(/file/F7IVR49GICYB7X3/)

IMadeit!

Favorite

Share

Incube.cwehaveafunctioncalledcube_push().Thistakesthe64bytearray
andsendsitdowntheseriallinetotheLEDcube.
LEDCube8x8x8
by

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
Italsohandlestheformatting,sendingevery0xffbytetwicebecause0xffisour

escapecharacter.0xffand0x00issentfirsttoresettheLEDcubesinternalx
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
andycounters.
Inmain.cwehavethefunctioncube_updater().Thisfunctionislaunchedasa
separatethreadusingpthread_create().Themainthreadandthecubeupdater
threadsharesthememoryarears232_cube[8][8].Thecubeupdaterthreadis
justawhiletrueloopthatcallscube_push()overandover.
Thefirstattemptatanupdaterthreadturnedouttocreatesomeflickeringinthe
animations.Aftersomedebugging,wefoundoutthatframeswerebeing
transmittedbeforetheywerefullydrawnbytheeffectfunctions.Wegenerallydo
afill(0x00),thensomecodetodrawnewpixels.Ifaframeistransmittedright
afterafill(0x00),thecubewillflashanemptyframefor1/60thishofasecond.
Thiswasn'taprobleminthecoderunningontheLEDcube,sinceithasa
refreshrateofover1000FPS,butat60FPSyoucannoticeit.
Toovercomethiswecreateadoublebufferandsyncthetwobuffersatapoint
intimewheretheeffectfunctionhasfinisheddrawingtheframe.Luckilyallthe
effectfunctionsusethedelay_ms()functiontopausebetweenfinishedframes.
Wejustputamemcpy()insidetheretocopythecubebuffertothers232buffer.
Thisworksbeautifully.Nomoreflickering!

Step66:PCSoftware:Effect1,ripples

(/file/FSCKYL8GI0TDO8C/)

ThisisthefirsteffectwemadeforthePCsoftware,andwethinkitturnedout
verynice.

IMadeit!

Favorite

Share

Whilethismayseemlikeacomplicatedeffect,it'sreallynot!
Alltheeffectfunctionsrunningonthemicrocontrollermostlyuseif()statements
(/contest/epilog/)
tocreateeffects.TheeffectsonthePCsoftwarearebuiltalittledifferent.We
LEDCube8x8x8
by
usealotofsin(),cos()andothermathfunctionshere.Mostcoordinatesare
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
calculatedasfloatingpointcoordinatesthentypecastintointegersbeforebeing
drawnonthecube.
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

Theeffectyouseeinthevideoisactuallyjustasinewaveeminatingfromthe
centerofthecube,x=3.5,y=3.5.
Hereishowitworks:
1)Loopthroughtheiterationcounter.
2)Loopthroughall64xandycoordinates.
3)Calculatethedistancebetweenthecenterofthecubeandthex/ycoordinate.
4)Thezcoordinateiscalculatedwithsin()basedonthedistancefromthe
center+theiterationcounter.Theresultisthatthesinewavemovesoutfrom
thecenterastheiterationcounterincreases.
Lookhoweasythatwas!

Step67:PCSoftware:Effect2,sidewaves

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F4W3XW4GI0TMGZ6/)

Thisisbasicallytheexactsamefunctionastheripplefunction.
Theonlydifferenceisthecoordinatesofthepointusedtocalculatethedistance
toeachx/ycoordinate.Wecallthispointtheorigin,sincethewaveemanates
fromthispoint.
Theorigincoordinateiscalculatedlikethis:
x=sin(iterationcounter)y=cos(iterationcounter)
Theresultisthatthesexandycoordinatesmovesaroundinacircle,resultingin
asinwavethatcomesinfromtheside.
Wejustwantedtoshowyouhoweasyitistocompletelyalteraneffectby
tweakingsomevariableswhenworkingwithmathbasedeffects!

IMadeit!

Favorite

Share

Step68:PCSoftware:Effect3,fireworks
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FO5CMRYGI0TK2XC/)

(/file/FZSIWAPGI0TDO8K/)

Thiseffectwasquitefuntomake.
Tomakethiseffect,wereallyhadtositdownandthinkabouthowfireworks
work,andwhichforcesinfluencethefireworkparticles.
Wecameupwithatheoreticalmodelofhowfireworkswork:
1)Arocketisshotuptoarandomposition,origin_x,origin_y,origin_z.

IMadeit!

Favorite

Share

2)Therocketexplodesandthrowsburningparticlesoutinrandomdirectionsat
randomvelocities.
3)Theparticlesaresloweddownbyairresistanceandpulledtowardsthe
LEDCube8x8x8
by
groundbygravity.

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)

Withthismodelinmindwecreatedafireworkseffectwithaprettyconvincing
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
result.Hereishowitworks:
1)Arandomoriginpositionischosen.(withincertainlimits,xandybetween2
and5tokeepthefireworksmoreorlessinthecenterofthecube.zbetween5
and6.Fireworksexplodingnearthegroundcanbedangerous!:p)
2)Therocket,inthiscaseasinglevoxelismoveduptheZaxisatthexandy
coordinatesuntilitreachesorigin_z.
3)Anarrayofnparticlesiscreated.Eachparticlehasanx,yandzcoordinate
aswellasavelocityforeachaxis,dx,dyanddz.
4)Wefor()loopthrough25particleanimationsteps:
5)Aslowrateiscalculated,thisistheairresistance.Theslowrateiscalculated
usingtan()whichwillreturnanexponentiallyincreasingnumber,slowingthe
particlesfasterandfaster.
6)Agravityvariableiscalculated.Alsousingtan().Theeffectofgravityisalso
exponential.Thisprobablyisn'tthemathematicallycorrectwayofcalculating
gravity'seffectonanobject,butitlooksgood.
7)Foreachparticle,thexyandzcoordinatesareincrementedbytheirdx,dy
anddzvelocitiesdividedbytheslowrate.Thiswillmaketheparticlesmove
slowerandslower.
8)Thezcoordinateisdecreasedbythegravityvariable.
9)Theparticleisdrawnonthecube.
10)Delayforawhile,thendothenextiterationoftheexplosionanimation.
Wearequitepleasedwiththeresult.

IMadeit!

Favorite

Share

Step69:PCSoftware:Effect4,Conway'sGameofLife3D
(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FDEIFJVGICYBA5H/)

TheGameofLife,alsoknownsimplyasLife,isacellularautomatondevisedby
theBritishmathematicianJohnHortonConway.Youcanreadmoreaboutthis
onWikipedia(http://en.wikipedia.org/wiki/Conway's_Game_of_Life),ifyou
haven'theardaboutitbefore.
Bypopulardemand,wehaveimplementedGameofLifein3DontheLEDcube.
Tomakeitworkin3dtheruleshavetobetweakedalittle:
Adeadcellbecomesaliveifithasexactly4neighbors
Alivecellwith4neighborslive
Alivecellwith3orfewerneighborsdie
Alivecellwith5ormoreneighborsdie
Theprogramstartsbyplacing10randomvoxelsinonecornerofthecube,then
thegameofliferulesareappliedandtheiterationsstarted.
Inthesecondvideo,weruntheanimationfasterandseedwith20voxels.

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Step70:RunthecubeonanArduino

Collection

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/F3XEXOVGICYB2YC/)

(/file/F9UYXTCGI0TDO8V/)

(/file/FQXQGWPGI0TK2XE/)

(/file/FU5T6VZGI0TDO8R/)

SincewepublishedourlastLEDCubeinstructable,wehavegottenalotof
questionsfrompeoplewonderingiftheycoulduseanArduinotocontrolthe
cube.
Thistime,weareonestepaheadofyouonthe"Caniuseanarduino?"front:D
TheIOrequirementsforan8x8x8LEDcubeis:
Layerselect:8
Databusforlatches:8
Addressbusforlatches:3
Outputenable(OE)forlatches:1
Total:21
TheArduinohas13GPIOpinsand8analoginputs,whichcanalsobeusedas
GPIO.Thisgivesyouatotalof21IOlines,exactlytheamountofIOneededto
runtheLEDcube!
Butwhywriteaboutitwhenwecouldjustshowyou?
WehookedthecubeuptoanArduinoandportedsomeofthesoftware.
SincethemultiplexerarrayandAVRboardareseparatedbyaribboncable,
connectingtheIOlinestoanArduinoisasimplematterofconnectingsome
breadboardwires.Luckily,wesolderedinafemale0.1"pinheaderforthe
transistorlineswhenweweredebuggingthefirstsetoftransistors.Justremove
theATmegaandconnectwiresfromtheArduinotothesepinheaders.

IMadeit!

Favorite

Share

Weconnectedthecubelikethis:DATAbus:Digitalpins07.Thiscorrespondsto
PORTDontheATmega328ontheArduinoboard,sowecanusedirectport
accessinsteadofArduinosdigitalWrite(whichisslow).Addressbus:Digitalpins
(/contest/epilog/)
810.ThiscorrespondstoPORTBbit02.OnthisweHAVEtousedirectport
LEDCube8x8x8 by
access.ArduinosdigitalWritewouldn'tworkwiththis,becauseyoucan'tset
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)
Eleds(/tag/typeid/categorytechnology/channelleds/)
multiplepinssimultaneously.Iftheaddresspinsarenotsetattheexactsame
Download
IMadeit!
Collection
Favorite
Share
time,theoutputofthe74HC138wouldtriggerthewronglatches.OutputEnable:
h(/id/LedCube8x8x8/) 72Steps .
Digitalpin11.Layertransistors:Analogpins05anddigitalpins12and13.
WehadtogoabitoutsidethescopeoftheArduinoplatform.Theintentionof
ArduinoistousedigitalWrite()forIOportaccess,tomakethecodeportableand
someotherreasons.Wehadtosidestepthatandaccesstheportsdirectly.In
additiontothat,wehadtouseoneofthetimersfortheinterruptroutine.
TheregistersfortheinterruptandtimersaredifferentondifferentAVRmodels,
sothecodemaynotbeportablebetweendifferentversionsoftheArduino
board.
ThecodeforourquickArduinohackisattached.

arduinocube.pde(/files/orig/FNH/V3UU/GICYB47D/FNHV3UUGICYB47D.tmp)

Step71:Hardwaredebugging:BrokenLEDs

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

(/file/FJAIRLDGICYB6YO/)

Disasterstrikes.ALEDinsidethecubeisbroken!
WehadacoupleofLEDsbreakactually.Luckilythehardestonetogettowas
onlyonelayerinsidethecube.
ToremovetheLED,justtakeasmallpairofneedlenosepliersandputsome
pressureonthelegs,thengiveitalighttouchwiththesolderingiron.Theleg
shouldpoprightout.Dothisforbothlegs,andit'sout.
InsertinganewLEDisthetrickypart.Itneedstobeassymmetricalandniceas
therestoftheLEDs.Weusedahelpinghandtoholditinplacewhilesoldering.
Itwentsurprisinglywell,andwecan'tevenseewhichLEDshavebeen
replaced.

Step72:Feedback

IMadeit!

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

(/file/F5W33J7GICYB3NJ/)

Welovegettingfeedbackonourprojects!The4x4x4LEDcubehasreceiveda
tonoffeedback,andmanyusershavepostedpicturesandvideosoftheirLED
cubes.
IfyoufollowthisInstructableandmakeyourownLEDcube,pleasepost
picturesandvideo!
Oh,anddon'tforgettoratethisInstructableifyoulikedit:)
Asatokenofgratitudeforallthegreatfeedback,hereisacollageofsomeof
thefeedbackonour4x4x4LEDcubeinstructable:

Wehaveabenicecommentpolicy.

Pleasebepositiveandconstructive.

wIMadeit!

MarekB2(/member/MarekB2)madeit!

AddImages

PostComment

5daysago

Reply

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
IMadeit!
Collection
h(/id/LedCube8x8x8/) 72Steps .
(https://cdn.instructables.com/FCX/S7QT/ISCBZMJC/FCXS7QTISCBZMJC.LARGE.jpg)
Flag

ngPhm(/member/ngPhm)madeit!

8monthsago

Reply

helloallofyou,Ihaveanideatoreplace16BJTbyULN2803,itwouldsaveup
foryourarea,anditworksverytot.Toidid2cubeledsanditallworksfine
however,IdidnotdesigntheRS232connectiononmycircuit.andhereare
somepicturesaboutit:

(https://cdn.instructables.com/F8T/3BRD/IJQNXDYV/F8T3BRDIJQNXDYV.LARGE.jpg)

(https://cdn.instructables.com/F5G/DOPE/IJQNXDYY/F5GDOPEIJQNXDYY.LARGE.jpg)

(https://cdn.instructables.com/F98/WH2B/IJQNXDZ1/F98WH2BIJQNXDZ1.LARGE.jpg)

(https://cdn.instructables.com/FN2/WNL5/IJQNXDZ2/FN2WNL5IJQNXDZ2.LARGE.jpg)

(https://cdn.instructables.com/FTB/SDV8/IJQNXDZ3/FTBSDV8IJQNXDZ3.LARGE.jpg)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
IMadeit!
Collection
h(/id/LedCube8x8x8/) 72Steps .
(https://cdn.instructables.com/F8Q/SWCY/IJQNXDZ4/F8QSWCYIJQNXDZ4.LARGE.jpg)

(https://cdn.instructables.com/FQX/3DC1/IJQNXDZ6/FQX3DC1IJQNXDZ6.LARGE.jpg)

(https://cdn.instructables.com/F29/V0RG/IJQNXDZ9/F29V0RGIJQNXDZ9.LARGE.jpg)

(https://cdn.instructables.com/FXU/0EK6/IJQNXDZD/FXU0EK6IJQNXDZD.LARGE.jpg)

(https://cdn.instructables.com/F6H/IOHF/IJQNXDZI/F6HIOHFIJQNXDZI.LARGE.jpg)

(https://cdn.instructables.com/FOF/QDJP/IJQNXDZK/FOFQDJPIJQNXDZK.LARGE.jpg)

(https://cdn.instructables.com/FJX/62WL/IJQNXDZM/FJX62WLIJQNXDZM.LARGE.jpg)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
(https://cdn.instructables.com/FID/X6TK/IJQNXE0D/FIDX6TKIJQNXE0D.LARGE.jpg)

IMadeit!

(https://cdn.instructables.com/FAD/88UF/IJQNXE0K/FAD88UFIJQNXE0K.LARGE.jpg)

(https://cdn.instructables.com/FR4/NJ3B/IJQNXE0N/FR4NJ3BIJQNXE0N.LARGE.jpg)

(https://cdn.instructables.com/FN7/9JNM/IJQNXE21/FN79JNMIJQNXE21.LARGE.jpg)

(https://cdn.instructables.com/FXM/PMM2/IJQNXE23/FXMPMM2IJQNXE23.LARGE.jpg)

(https://cdn.instructables.com/FQ9/3YAV/IJQNXE26/FQ93YAVIJQNXE26.LARGE.jpg)

(https://cdn.instructables.com/FXW/GL70/IJQNXE2E/FXWGL70IJQNXE2E.LARGE.jpg)
VID_20160123_183017.mp4
(http://www.instructables.com/files/orig/FLF/NMVB/IJQNXEBH/FLFNMVBIJQNXEBH.mp4)

Favorite

Share

Flag

ngPhm(/member/ngPhm) . ngPhm(/member/ngPhm)
Reply
by
8monthsago
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)

LEDCube8x8x8
Download

Led Cube 8x8x8 demo


h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

Flag

ChiranjitK(/member/ChiranjitK) . ngPhm(/member/ngPhm)

Reply

7daysago

Circuitdiagrams
Orkitsdetailsme
Alsothesprogrammescode

Flag

jmaxado(/member/jmaxado) . ngPhm(/member/ngPhm)

Reply

8monthsago

HelloDongP1,
CanyoushareamoreclearschematichowdidyouusedtheULN2803
andexplainwhatchangeshaveyoudonetothecode?
Thanks

Flag

ngPhm(/member/ngPhm)madeit! . jmaxado(/member/jmaxado)
8monthsago

Reply

OKyou,I'mveryfunwhenhelpyou.Youcanuse
ProteustoopenfileschematicandPCB,andididfixedcode.allinhere:
https://drive.google.com/file/d/0BzXbfPpoHKV5eWQxU1VQODZhTTA/view?
usp=sharing
whenyouuseatmega32youmustsetfuseforit.
andwhenyousolderPCBsolderyoushouldnotecarefullyanddidnot
missanylegs,asthisisthesecondcircuitface,youcanalsobookfor
someonetrainedtodoittoensurecircuitreliability.Andmyfinalnon
electriccircuitsbecomerestrictsmotherboardarea,itabsolutelydoesnot
affecttheled.Andcannotforgetthatitisa5Vsupply.Wishsuccess.I
lookforwardtoseeingyourcircuithere.

(/contest/epilog/)

Favorite

Share

Insidethedownloadedfolder:principlediagram,schematicprint,insidea
simulated3dopenedbyProteus,therevisedcodewithexternalhexfile,
insidethecodecaneditcustomandstandardyou,useWINAVR
(recommendedrecommended).andimagestosetthefuseforATmega32.

(/contest/epilog/)

LEDCube8x8x8 by

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

(https://cdn.instructables.com/F40/ALT2/IJSX997A/F40ALT2IJSX997A.LARGE.jpg)
Flag

HimanshuS14(/member/HimanshuS14) . ngPhm(/member/ngPhm)
8monthsago

Reply

Hi!!
DoyouknowhoetoflashtheEEPROMofArduinojustlikewedoin
normalnonarduinoboards..
i.e.weflash.eepfiledirectlyintothemicrocontroller..doyouknowany
similarorequivalantthinginArduino...?

Flag

ngPhm(/member/ngPhm) . HimanshuS14(/member/HimanshuS14)
7monthsago

Reply

Isorryyou,becauseIdonotuseArduino,soIdid
notgothroughthedifficultiesyouface,butyoucanreadmoreonline
materialonitsuse.Icanonlyhelpyouintermsofhardware.Goodluck.I
believeyouwillsucceed!:D

Flag

HimanshuS14(/member/HimanshuS14) . ngPhm(/member/ngPhm)

Thnxforreplying!
Igotasolutionforitalready!

7monthsago

Reply

Flag

ChiranjitK(/member/ChiranjitK) . HimanshuS14(/member/HimanshuS14)

Yourledcube
Whitchkitsusing

Reply

7daysago

Flag

jmaxado(/member/jmaxado) . ngPhm(/member/ngPhm)

Hello,

Reply

8monthsago

NowIgotit.TheideatousetheULN2803istoavoidusingtransistors
correct?
WhatdoyoumeanthatIneedtosetthefusefortheATMEGA32?
Iwillbeusingarduinoboard,eitherNanoormega.
Thanksforyourreply
Jose
Flag

Favorite

Share

ngPhm(/member/ngPhm) . jmaxado(/member/jmaxado)

Reply

8monthsago

(/contest/epilog/)

isthis,ifyouuseityoumustchipatmegafusesetinsidethe
LEDCube8x8x8
by
IC,thefuseistocontrolanumberoffunctionssuchas:usingthe
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
calibratedinternalorexternalcrystal,andandsomeratherdifferent
features,pleasereferenceICdatasheet.sothatitoperatesaccordingto
Download
IMadeit!
Collection
Favorite
h(/id/LedCube8x8x8/) 72Steps .
yourdesiredthisfunction.Iusetheloadcircuittotheloadburneprogram
formyIC,pleasefindoutmoreaboutit,oryoucanusetheloadcircuit
whichyouareavailable.
ULN2803helpreplacethetransistor16inthelayer.youreadthisicdata
sheettolearnmore.Ihadtodiagraminsidefoldersprincipleschematic.
youseethatinordertobetterunderstandhowitworks.wishsuccess!:D
Flag

Phm4(/member/Phm4) . jmaxado(/member/jmaxado) 7monthsago

Reply

Youdon'tneedchangesincode
Flag

ngPhm(/member/ngPhm) . jmaxado(/member/jmaxado)

Reply

7monthsago

Sorryforanswerswilltellyounow,whenusingULN2803then
yourprogramabsolutelynothingchanges,wesimplyoptimizedhardware
only.Goodluck!soonseeyourresultshere.:D

Flag

Hoan1(/member/Hoan1) . ngPhm(/member/ngPhm)

Reply

12daysago

Choexinsmchincko

Flag

X
|
8

SuperTechIT(/member/SuperTechIT) . ngPhm(/member/ngPhm)

YoucanuseevenlessspaceusingSMT2N2222
typetransistors.Myboardwilltakeeither.

6monthsago

Reply

(https://cdn.instructables.com/FVB/NDR8/HYWT35WL/FVBNDR8HYWT35WL.LARGE.jpg)
Flag

KalaniR(/member/KalaniR) . SuperTechIT(/member/SuperTechIT)

Canyoupleasekindlysendmethecircuitanddiagram.

Reply

amonthago

MAymailadd
isurutharanga019@gmail.com
Flag

Share

SisirR(/member/SisirR) . SuperTechIT(/member/SuperTechIT)

Canyoupleasekindlysendmethecircuitanddiagram.

Reply

6monthsago

LEDCube8x8x8 by

(/contest/epilog/)

Flag

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

X
|
8

Collection
h(/id/LedCube8x8x8/) 72Steps .
SuperTechIT(/member/SuperTechIT) . SisirR(/member/SisirR)

Thecircuitdiagramsforthisprojectareinthisinstructable.

IMadeit!

Reply

6monthsago
Flag

SisirR(/member/SisirR) . SisirR(/member/SisirR)

6monthsago

Reply

Myemailaddressissisirroy777@gmail.com
Flag

Dongliangma(/member/Dongliangma) . ngPhm(/member/ngPhm)
7monthsago

Reply

HiDongP1,IamsoliketheCubeandIwanttomake
itandgivetomygirlfriendasabigsurprise.Canyousendallschematics
,programsandotherfilestome.Thanssomuch.
Myemailaddress:dongliang.ma@matrixopto.com
Flag

Phm4(/member/Phm4) . Dongliangma(/member/Dongliangma)

Reply

7monthsago

https://drive.google.com/file/d/0BzXbfPpoHKV5eWQxU1VQODZhTTA/view?
usp=sharing
Flag

Kimwonhuyn(/member/Kimwonhuyn) . Phm4(/member/Phm4)

Heyguy,ifiuseSTK500devicetosetupforatmega32then
plugittotheboard,so,caniremoveRS232andAVRIsp?

Reply

6monthsago

Flag

Namangupta(/member/Namangupta) . Phm4(/member/Phm4)

Reply

7monthsago

sir,ihavesuccessfullymademycube,nowtheproblemis
withthecode...imusingarduinounoandthecodegiveninthisarticlei.e
forarduinouserisworkingfineforme...butothercodeswhichareused
forAVRisnotcompatiblewithaduino?doescodingforbotharduinouno
andAVRaredifferent?
igotaerroras"compilationterminated
existstatus1
errorcompiling"
ifthereissolutionforthisplzpost.
andthecodeinthelinkwhichugaveiscompatiblewitharduinouno?
Thanks:)

Flag

Favorite

Share

X
|
8

SuperTechIT(/member/SuperTechIT) . Namangupta(/member/Namangupta)

Youlikelyneedanolder,orpossiblyanewercopyof
theIDE. by
LEDCube8x8x8

6monthsago

Reply

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Flag

Download

h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

Namangupta(/member/Namangupta) . SuperTechIT(/member/SuperTechIT)

sirpresentlyimusinglatestversionofIDEi.e1.6.7

6monthsago

Reply

caniknowthetheexactversionofIDE??
andsirhowcanimakeotherscodescompatiblewithIDE?
Thanks:)
Flag

HimanshuS14(/member/HimanshuS14) . Namangupta(/member/Namangupta)

mailme..233himanshu@gmail.com

6monthsago

Reply

Flag

Phm4(/member/Phm4) . Dongliangma(/member/Dongliangma)

Reply

7monthsago

Thisishere.
https://drive.google.com/file/d/0BzXbfPpoHKV5eWQxU1VQODZhTTA/view?
usp=sharinganddon'tneedchagerinprogram.
Flag

Dongliangma(/member/Dongliangma) . Phm4(/member/Phm4)

Reply

7monthsago

HiPhamd4,thankyousomuch.Ihaveanotherquestion,I
cannotopentheCUBEschematicandpcbfileswithProtuesDesing
Suite8.0,mycomputerisWin7system.whethertheversionofthe
Protuesisnotmatching?Canyouhelpme.

(https://cdn.instructables.com/FFR/KAXH/IL6VDMXG/FFRKAXHIL6VDMXG.LARGE.jpg)
Flag

ngPhm(/member/ngPhm) . ngPhm(/member/ngPhm)

Reply

8monthsago

helloeveryone,Ihaveanideatoreplace16BJTlayersby
ULN2803,itwillsaveyourarea,anditworksverywellIdid2LEDcube
andallactivitieswellhowever,IdidnotdesigntheRS232connectionon
mycircuit.

Flag

ChiranjitK(/member/ChiranjitK)

Favorite

Share

canyoupleasekindlysendthecodeforprogramming

8daysago

Reply

myemaiidchiranjitkarmakar838@gmail.com
(/contest/epilog/)

Flag

LEDCube8x8x8 by

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
ChiranjitK(/member/ChiranjitK)
Download
h(/id/LedCube8x8x8/)

72Steps

canyoupleasekindlysendthecodeforprogramming

8daysago
Collection

Reply

IMadeit!

Flag

AravindhanV(/member/AravindhanV)madeit!

2monthsago

Reply

lookthevideolednotworkingandbordfileinpdfcanupeoplehelpmefixmy
problem
LKLA5743.MOV
(http://www.instructables.com/files/orig/FI7/C0S4/IQLIA8KK/FI7C0S4IQLIA8KK.mov)
LedCubeboard.pdf
(http://www.instructables.com/files/orig/F9K/9E6V/IQLIA8KL/F9K9E6VIQLIA8KL.pdf)
Flag

AravindhanV(/member/AravindhanV) . AravindhanV(/member/AravindhanV)
2monthsago

Reply

lookmyvideoledwasnotworkingon2rowactually
workingbutworkingdifferentwayIdonwhatmistakeIhavedoneI
attachedboardfileinpdfpleaseanybodycanhelpIamreallyappreciate.
Iputfulleffortforthisprojectbutfinallyanimationmakemeupset

Flag

AravindhanV(/member/AravindhanV)

2monthsago

Reply

haiIhaveproblemincubeIdonewellbutsomeanimationnotcomingproperly
1and2rowImean1and2icIcheckedverywellcircuitiscorrectcanuhelp
meIuploadpdfofmyschematicandpics

(https://cdn.instructables.com/FSJ/0KIN/IQLIA5BY/FSJ0KINIQLIA5BY.LARGE.jpg)

(https://cdn.instructables.com/FT7/NLJJ/IQLIA5E5/FT7NLJJIQLIA5E5.LARGE.jpg)

Favorite

Share

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download
Collection
h(/id/LedCube8x8x8/) 72Steps .
(https://cdn.instructables.com/FY4/VIQQ/IQLIA5FC/FY4VIQQIQLIA5FC.LARGE.jpg)

IMadeit!

(https://cdn.instructables.com/FSE/MA9W/IQLIA5FS/FSEMA9WIQLIA5FS.LARGE.jpg)

(https://cdn.instructables.com/F8S/NGDM/IQLIA5H5/F8SNGDMIQLIA5H5.LARGE.jpg)
LedCubeschematic.pdf
(http://www.instructables.com/files/orig/F8O/78OV/IQLIA5H9/F8O78OVIQLIA5H9.pdf)
Flag

ThanhT32(/member/ThanhT32)

2monthsago

Reply

Hello,
Ireadthesesentencesinthispost:
Withacpufrequencyof14745600Hz,128prescalerandoutputcompareof10,
theinterruptroutineiscalledevery1408thCPUcycle(128*11)or10472.7times
persecond.
Cananybodyhelpmetoexplainhowtocalculateto10472.7timespersecond.
IamnewtoAVRtimer.
Thanks,
Flag

Debanjandas(/member/Debanjandas)

2monthsago

Reply

Thanksforsharingtheawesomeproject.?.Theinstructiblesarevery
elaborative.Atfirstiwasscepticalificouldmakethisproject.Butatlastafter
backbrakinghoursofsolderinganddebugging,itwasasucces.Andthecredit
goestochr.Thankschr.Urock.
Iusedarduinounoasthecontroller.Butthecodeisnotcomplete.Imeanmany
effectsaremissing.Idontknowanythingaboutprogramming.Irequestuto
pleasemailmethecodewitheveryeffect.Itwillbeagreathelp.Thanku.
dbnjnds@gmail.com
Flag

AlinA14(/member/AlinA14)

3monthsago

Reply

Favorite

Share

Istheresomeotherwayotherthangraycodinginsoftwaretoavoid74HC138
glitches
Flag

LEDCube8x8x8 by

(/contest/epilog/)

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
SuperTechIT(/member/SuperTechIT) . AlinA14(/member/AlinA14)
Reply
X
|
Download
(/id/LedCube8x8x8/)
72Steps
Collection
IMadeit!

Favorite
2monthsago
h
.

Ifthelatchorderisincorrectfromthe138,usuallyit'sthe
binaryinputsareeithermiswired(wrongorder,oralinenotconnected)or
2inputsareshortedtogether.
Anotherissueyoumayrunintoisswitchingthedatatoofast,notlatching
longenoughetc.whichhastobefixedinthecode.

Flag

AlinA14(/member/AlinA14)

3monthsago

Reply

heycanyoupleasehelpme.
IC74hc138ismisbehaving.Isuspectittoberacehazard.
Wronglatchesarebeingselectedbytheaddressselecter.
thefollowingsequenceseemstofixtheproplem.
voiddraw(char*buffer)
{
PORTB=0b00001000
PORTA=buffer[0]
PORTB=0b00001001
PORTA=buffer[1]
PORTB=0b00001101
PORTA=buffer[5]
PORTB=0b00001100
PORTA=buffer[4]
PORTB=0b00001110
PORTA=buffer[6]
PORTB=0b00001010
PORTA=buffer[2]
PORTB=0b00001011
PORTA=buffer[3]
PORTB=0b00001111
PORTA=buffer[7]
PORTB=0b00001000
PORTB=0b00000000
}
WhatIdidwastochangeonelogicalstateintheinputtodecoderatatime.
somesitesrecommendtemporarydisablingofoutputtopreventracehazards.
howdidyoudealwiththisissue>
plshelp
Flag

Share

X
|
8

SuperTechIT(/member/SuperTechIT)

3monthsago

Reply

(/contest/epilog/)

WOW5millionviews.

LEDCube8x8x8 by

Ithinkit'ssomekindofrecord!LOL!

chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

AbrahamD12(/member/AbrahamD12)

Flag

Collection
3monthsago

IMadeit!

Reply

Hi,Wheredoibuyallthatstufffor69dlls?Thanks
Flag

gatojchavez(/member/gatojchavez)

3monthsago

Reply

thatsprojectsitsgreat!Imlookingforallthestuffandmakingtimefordoing!
pleasecontinuedoingamazingthing.:)
Flag

astro_mike(/member/astro_mike)

4monthsago

Reply

hi,reallygreatinstructable,kindthatinspirespeople.
Thiscode,cube[5][3]|=(0x01<<4)
Hex01bitwisemove4,orwitha2darray,Ican'tgetmyheadaroundit.
Plz,amoredetaileddescriptionwillsavemefrommoretablets,cheers
Flag

wouterius(/member/wouterius)madeit!

5monthsago

Reply

Madeit!!
Thankyouforthegreatinstruction!!

(https://cdn.instructables.com/F7I/W7ET/IMDZ9QP1/F7IW7ETIMDZ9QP1.LARGE.jpg)

(https://cdn.instructables.com/FUI/XLN1/IMDZ9QP4/FUIXLN1IMDZ9QP4.LARGE.jpg)

Favorite

Share

(https://cdn.instructables.com/FJ3/L4GD/IMDZ9QP8/FJ3L4GDIMDZ9QP8.LARGE.jpg)

(/contest/epilog/)

LEDCube8x8x8 by
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)
Download

h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

Favorite

Share

(https://cdn.instructables.com/FUJ/I22K/IMDZ9QPB/FUJI22KIMDZ9QPB.LARGE.jpg)

(https://cdn.instructables.com/FRG/YSW9/IMDZ9QPI/FRGYSW9IMDZ9QPI.LARGE.jpg)

(https://cdn.instructables.com/FQ5/ZM2W/IMDZ9QPL/FQ5ZM2WIMDZ9QPL.LARGE.jpg)
Flag

floren.vanolden(/member/floren.vanolden) . wouterius(/member/wouterius)

Yourprintlooksveryneat.Mineisverymessy.

4monthsago

Reply

Flag

KevinO37(/member/KevinO37) . wouterius(/member/wouterius)

Wow,howdoyougetyourtracewiressostraightandthe
perfectlength?

Reply

5monthsago

Flag

I MoreComments

FEATURED CHANNELS

Woodworking
(/tag/type

Paper
(/tag/type

KitchenHacks
(/tag/type

Puzzles
(/tag/type

id/category
id/category
id/keyword
id/category
workshop/channelcraft/channel kitchen%20hacks/?play/channel
woodworking/)

paper/)

sort=FAVORITES)

puzzles/)

Space
(/tag/type
id/keyword
astronomy/?

IceCream
(/tag/type

Homesteading
(/tag/type

3DPrinting
(/tag/type

Sewing
(/tag/type

id/keyword
id/category
id/category
id/category
ice%20cream/? home/channel technology/channel
craft/channel

sort=FAVORITES)sort=FAVORITES)homesteading/)

3DPrinting/)

sewing/)

Newsletter
Join2million+toreceiveinstant
DIYinspirationinyourinbox.

(/contest/epilog/)

LEDCube8x8x8
enteremail by

I'min!
chr(/member/chr/)intechnology(/tag/typeid/categorytechnology/)Eleds(/tag/typeid/categorytechnology/channelleds/)

Mobile

Download
Downloadourapps!

h(/id/LedCube8x8x8/)

72Steps

Collection

IMadeit!

Favorite

Android(https://play.google.com/store/apps/details?id=com.adsk.instructables)
iOS(https://itunes.apple.com/app/instructables/id586765571)
Windows(http://apps.microsoft.com/windows/enus/app/7afc8194c771441a959054250d6a8300)

AboutUs

FindUs

WhoWeAre(/about/)

Facebook(http://www.facebook.com/instructables)

Advertise(/advertise/)

Youtube(http://www.youtube.com/user/instructablestv)

Contact(/about/contact.jsp)

Twitter(http://www.twitter.com/instructables)

Jobs(/community/PositionsavailableatInstructables/)
Help(/id/howtowriteagreatinstructable/)

Pinterest(http://www.pinterest.com/instructables)
Google+(https://plus.google.com/+instructables)

Resources
ForTeachers(/teachers/)
ArtistsinResidence(/air)
GiftPremiumAccount(/account/give?sourcea=footer)
Forums(/community/)
Answers(/tag/typequestion/?sort=RECENT)
Sitemap(/sitemap/)

TermsofService(http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=21959721) |
PrivacyStatement(http://usa.autodesk.com/adsk/servlet/item?siteID=123112&id=21292079) |
LegalNotices&Trademarks(http://usa.autodesk.com/legalnoticestrademarks/) | MobileSite(http://www.instructables.com)
(http://usa.autodesk.com/adsk/servlet/pc/index?id=20781545&siteID=123112)
2016Autodesk,Inc.

Share

You might also like