Stap 1: Begin met het observeren, en het verkennen van...
Opmerkingen, feiten en interessante dingen ontdekt terwijl het hacken over de code.
Charlieplexing in het algemeen licht slechts één LED tegelijk, multiplexing lichten nooit allemaal tegelijk, maar meestal een hele rij, of met het vliegtuig kan licht tegelijkertijd. Charlieplexing vereist ook tri-state logica (5v, grond of input), waar alleen multiplexing binair (5v, of grond moet).
Het licht kan uitsluitend één voxel tegelijk, maar het kan elke combinatie van de 3 LED's binnen elk voxel oplichten. Meeste kubussen licht een gehele vlak voor LEDs tegelijk, en dat stelt haar taakcyclus (4 x 4 x 4 zijn 25%, 8 x 8 x 8 is 12,5%,...)
Elke LED kan individueel worden aangestuurd met behulp van de juiste twee pennen van de microcontroller (met de juiste polariteit)
Aangezien er 64 voxels, geeft dit het een taakcyclus van 1/64 op helderste.
Er zijn 3 manieren om te koppelen aan een specifieke LED, er kan naar worden verwezen opeenvolgend van 1 192, door het X, Y, Z-as coördineert of door de 2 pinnen van de microcontroller moet het oplichten.
Er zijn een paar tabellen met informatie die op een manier die vergelijkbaar is met DNS in computernetwerken samenwerken, het is een eenvoudige vertaling, zodat wanneer u zeggen lichte r123 (rode LED op locatie x = 1, y = 2 = 3), de juiste microcontroller pinnen zijn geactiveerd. Deze tabel is een ideale plek om wijzigingen aanbrengen als u een fout van de bedrading, hebt gemaakt en haar waar ik wijzigingen aan het aanpassen van de hoogte van de kubus, maar ik had ook veel wijzigingen aan te brengen de kubus omzetten in gemeenschappelijke anode.
Omkeren van de pinnen in de programma-oproep deed niet licht de kubus zoals u verwachten zou, het was niet zo eenvoudig, maar het kreeg de meeste van de LED's, waardoor het makkelijker voor mij om te testen, documenteren en bevestigen van degenen die niet juist waren. Uit 192 LEDs kreeg het allemaal maar 48 recht. Dit heeft te maken met de manier waarop de kubus is bedraad, de 4 lagen van circuits. Het is interessant dat de polariteit omkeren 3/4 van de pinnen, maar niet allemaal vaste, en niet voor niets.
De volgorde van 192 LEDs zijn georganiseerd door kleur en vervolgens in de X, Y, en Z-coördinaten en eenvoudige vergelijking kan decoderen dit als volgt: (((kleur) %3) * 64) +(x*16) +(y*4) + z zodat u input dat u wilt de rode LED licht op de xyz coördineert 123, en dat rood weet is de laatste groep, dus voeg 2 * 64 + 1 * 16 + 2 * 4 + 3 , en die in totaal 91, het de 91ste vermelding in een tabel worden opgezocht en krijgt het pin-nummer voor hoog en laag, alleen de juiste LED inschakelen.
Wanneer u een spits test, u kan zeggen dat het een ideaal getal voor LEDs gecontroleerd met die paar aantal controle pinnen. Vier pinnen controle twaalf LEDs. De manier waarop zij dit doet is vrij eenvoudig. u sluit op gemeenschappelijke leiden, en de andere drie zijn de R, G en B. leads. Als u de gemeenschappelijke leiding, die een verschillende LED (fysiek hoger of lager op de torenspits) zal bepalen, en de andere 3 leads de R, G en B. doen zal U kunt draaien de torenspits 4 tijd, en telkens als die u de torenspits draait, hoogte verandert.
Wanneer u de volgorde zijn doorlopen, kunt u patronen van getallen in groepen van vier. Elk van deze 4 getallen zijn de draden verbonden met een enkele spits. Ik maakte gebruik van dit meerdere malen tot vaststelling van de omzetting van gegevens in de tabel fouten. Ik kon zien hoe het patroon zou worden onderbroken rechtsaf het LED-nummer dat recht niet werkte. Waarschijnlijk zijn de meest interessante patronen de miswires van het omkeren van de pinnen. Een andere manier om het te zetten zou de degenen die recht, na het wisselen van gemeenschappelijke anoden voor kathoden niet oplichten.
De tools die ik gebruikte om deze taak te volbrengen (naast de kubus, arduino, IDE, computer), waren een teksteditor (zoals Im using nu) en een spreadsheetprogramma (open office calc).
Mijn kubus wordt niet uitgelijnd als de oorspronkelijke kubusgegevens, om mijn kubus om te beginnen op de juiste hoogte, ik moest beginnen met 4 verschillende flushbuffer tafels (hoogte verschuiving op elk, om af te stemmen op de hoogte van de kubus), ik begon door het veranderen van de pin1 en PIN2-volgorde in het aanroepen van het programma, maar wanneer dat niet maken de anode kubus goed werkt , Ik nieuwe ik moest bouwen aangepaste kaarten, maar meer dan de helft was al gelijk, dus het zou niet zo groot van een taak als ze alle één voor één uit te voeren.
Ik schreef een programma aan het licht van de LED's in een reeks, gebaseerd op de manier de uitgetekend programma zal werken, looping x, y en z, dan fietsen kleuren. Ik begon met een programma aan het licht van een willekeurige LED in de kubus, ontdaan van alle willekeurige dingen, en plofte in 3 geneste lussen (x, y en z), dan een ingebouwde functie naar het charlieplex.h bestand kleur cyclus hebt gebruikt.
Ik gebruikte dit programma om te kijken wat LEDs verlicht, en maakte aantekeningen van de degenen die op de verkeerde plaatsen verlicht, en wat plaatsen ze verlicht. Nadat ik een lijst samengesteld, ik ging door en elk van deze verlicht het verkeerde ding met mijn testprogramma bevestigd. Ik gebruikte deze gegevens, en maakte een conversietabel voor weinig. Op dit punt had ik alle info om alles vast te stellen, ik had net te maken sommige tabellen, wisselen van sommige gegevens en testen.
Ik begon het proces, en kreeg dingen meestal vast, en gebogen onbewust een draad op de kubus net genoeg om er korte met een andere draad. Het veroorzaakt veel schade aanrichten, het maakte over een dozijn LEDs licht andere extra LEDs, en het maakte een paar LEDs niet ooit licht. Opnieuw heb ik mijn hele proces met behulp van een werkblad en spiegelen van kolommen met gegevens, en hand swappen 48 van de 192 gegevenspunten in de tabel. en vond dat ik had weer een heleboel problemen. Ik was er bijna van overtuigd dat ik veranderen de bekabeling moest om de conversie te werken. Ik merkte dat de LEDs die niet aan het licht allemaal op een spits werden, en ik hoe de torenspits werkt, begrepen zodat ik van mening dat het een probleem zou kunnen hebben. Ik onderzocht het grondig om ervoor te zorgen dat alle de LEDs in de juiste positie, en zo waren al de andere torens die op het aangesloten waren. Ik controleerde de bedrading om ervoor te zorgen dat ik niet draden aan te raken, hoefde omdat er veel draden, die cross over andere draden, die kon aanraken. Vond ik een van de stijvere draden rechts volgende was vastgesoldeerd aan een andere stijve draad, en ik gebogen die draad net genoeg zodat het niet langer contact, en het probleem wanneer het weg.
Dat een korte me een paar dagen van kostte verspild werk, maar uiteindelijk het doenst zaak, omdat in minder dan een weken tijd, Ive deze kubus gehackt en een werkende gemeenschappelijk anode charliecube hebben.