Hacka CharlieCube (1 / 5 steg)
Steg 1: Starta genom att observera, och att utforska...
Observationer, fakta och intressanta saker upptäckte samtidigt hacka om koden.
Charlieplexing allmänhet lyser endast en LED i taget, multiplexering aldrig ljus på en gång, men oftast en helhet ror, eller plan kan vara ljus på en gång. Charlieplexing kräver också tri-state logic (5v, marken eller input), där multiplexing behöver bara binär (5v, eller marken).
Det kan endast ljusa en voxel i taget, men det kan lysa upp en combo av de 3 lysdioderna inuti varje voxel. De flesta kuber ljus ett hela plan av lysdioder på en gång, och som sätter sin plikt cykel (4 x 4 x 4 är 25%, 8 x 8 x 8 är 12,5%,...)
Varje LED styras individuellt genom att använda rätt två mikrokontroller stiften (med rätt polaritet)
Eftersom det finns 64 voxlar, ger detta det en månadskapacitet på 1/64 på smartaste.
Det finns 3 sätt att relatera till någon särskild LED, det kan refereras sekventiellt från 1 till 192, genom det X Y Z axel koordinater eller 2 microcontroller stiften krävs att lysa upp.
Det finns ett par tabeller av information som arbetar tillsammans på ett sätt som liknar DNS i datornätverk, det är en enkel översättning så att när du säger ljus r123 (röd lysdiod på plats x = 1, y = 2 = 3), rätt microcontroller stiften är aktiverade. Denna tabell är en idealisk plats att göra ändringar om du har gjort ett ledningar misstag, och dess var jag gjort ändringar för att justera kuben höjden, men jag hade också att göra många ändringar att konvertera kuben till gemensam anod.
Invertera stiften i anropet till programmet inte tänds kuben som du kanske tror, det var inte så enkelt, men det fick de flesta av lysdioderna, som gjorde det lättare för mig att testa, dokumentera och åtgärda de som inte var rätt. Från 192 lysdioder fick det alla utom 48 rätt. Detta har att göra med hur kuben är wired, 4 lager av kretsar. Det är intressant att vända polariteten fast 3/4 av stiften, men inte alla, och inte ingen.
Sekvensen av 192 lysdioder är ordnade efter färg, sedan i X, Y, och Z-koordinater och enkel ekvation kan avkoda detta såhär: (((färg) %3) * 64) +(x*16) +(y*4) + z så att du ingång du vill tända den röda lysdioden på xyz-koordinater 123, som det vet att rött är den sista gruppen, så Lägg till 2 * 64 + 1 * 16 + 2 * 4 + 3 , och som uppgår till totalt 91, det slår upp den 91: a posten i en tabell och får pin-kod för hög, och låg, att vända på endast höger LED.
När du testar en spira, du kan tala om att dess en perfekt antal lampor styrs med som några antalet kontroll stift. Fyra stift styra tolv lysdioder. Den gör det är ganska enkelt. du ansluter på vanliga bly och de övriga tre är R, G och B. leads. Om du ändrar den vanliga bly, som kommer att kontrollera en annan LED (fysiskt högre eller lägre på spiran), och de andra 3 leder kommer att göra R, G och B. Du kan rotera spiran 4 tiden, och varje gång du rotera spiran, det ändrar höjd.
När du går igenom händelseförloppet, kan du se mönster av tal i grupper om fyra. Var och en av dessa 4 nummer är de ledningar som är ansluten till en enda spira. Jag drog fördel av detta flera gånger om fastställande av misstag överför data i tabellen. Jag kunde se hur mönstret skulle avbrytas vid det LED nummer som inte var fungerar rätt. Förmodligen är den mest intressanta mönstren miswires från Invertera stift. Ett annat sätt att uttrycka det skulle vara att de som inte lyser upp höger, efter swapping gemensamma anoder för katoder.
De verktyg som jag använde för att utföra denna uppgift (förutom i kuben, arduino, IDE, dator), var en text redaktör (som Im användande nu), och ett kalkylblad program (open office calc).
Min kub justeras inte som den ursprungliga kubdata, att få min kub att börja på rätt höjd, jag var tvungen att börja med 4 olika flushbuffer bord (höjd skift på varje, för att finjustera höjden kub), jag började med att ändra pin1 och PIN2-ordning kräver programmet, men när det inte gjorde anod kuben fungerar rätt , Jag nya jag hade att bygga anpassade kartor, men över hälften var redan rätt, så det inte skulle vara så stor av en uppgift som gör dem alla en efter en.
Jag skrev ett program för att lysa upp lamporna i en sekvens, baserat på hur den drawLED program fungerar, looping x, y och z, sedan cykling färger. Jag började med ett program för att lysa upp en random LED i kuben, strippad ut alla random grejer, och plumsade i 3 kapslade slingor (x, y och z), sedan använt funktionen inbyggd i filen charlieplex.h till färg cykel.
Jag använde detta program att titta på vad lysdioder lyser, och gjorde anteckningar av de som lyser på fel ställen, och vad placerar de lyser. När jag sammanställt en lista, jag gick igenom och bekräftat var och en av dem lyste upp fel sak med mitt testprogram. Jag använde denna data, och gjorde en liten Omvandlingstabell. På denna punkt jag hade all info att fixa allt, jag var bara tvungen att göra vissa tabeller, byta några data och testa.
Jag startade processen och fick saker oftast fast, och omedvetet böjd en tråd på kuben precis tillräckligt för att göra det kort med en annan tråd. Det orsakade en hel del kaos, det gjorde om ett dussin lysdioder ljus andra extra lysdioder, och det gjorde några lysdioder inte någonsin ljus. Jag gjorde åter min hela processen med hjälp av ett kalkylblad, och nonchalansen kolumner med data, och hand byta 48 192 datapunkter i tabellen. och jag hade en massa problem igen. Jag var nästan övertygad om att jag behövde ändra den fysiska kabeldragning för att få konverteringen att arbeta. Jag märkte att de lysdioder som misslyckades att tända var alla på en spira, och jag förstod hur spiran fungerar, så jag ansåg att det kan ha vissa problem. Jag granskade det noga för att se till att alla lampor var i rätt position och så var alla andra spiror som var anslutna till den. Jag kollade ledningarna att se till att jag inte hade kablarna röra, eftersom det finns många trådar som korsar över andra trådar, som kan vidröra. Jag hittade en av de styvare kablarna var fastlödda alldeles intill en annan hård tråd, och jag böjde som tråd bara tillräckligt så att det inte längre görs kontakt och problemet när bort.
Att en kort kosta mig ett par dagars bortkastade arbete, men i slutändan det doenst fråga, eftersom mindre än ett veckor, Ive hackat denna kub och har en fungerande gemensam anod charliecube.