3D LED Cube (4 / 5 steg)
Steg 4: 3D LED-programvara
Programvaran för LED cube är skrivet i C och sammanställt under arduino utvecklingsmiljön. Koden överförs till arduino uno via en USB-kabel så att detta kräver en USB till seriell omvandlare att programmera AVR direkt.
Det bästa sättet att tänka på programvaran är i två delar:
- filosofin av Visa bilden
- mönster och algoritmer används för att generera bilden
Filosofi av Visa bilden
Display filosofin tillåter oss att bara lysa upp ett lager av LED-lampor i taget, så för att visa hela kuben av lysdioder simultant, vi förlitar oss på ett fenomen känt som Persistens av Vision. Detta är så vi kan skanna igenom alla lysdioder eller lager av lysdioder utan att nödvändigtvis ha dem alla på en gång. Om vi kan skanna igenom dem tillräckligt snabbt, (vanligtvis 20-25 cyklar per understöder eller 8 lager 25 gånger per sekund) sedan de visas för alla vara på samtidigt.
I själva verket kommer att cykeltiden koden, struktur varierar så bilden eller bilden aktuella tillstånd representeras av en 3 dimensionell byte-array. Det är en matris med dimensionerna för 0 - 8 i alla riktningar men realistiskt endast 1-8 används för det aktuella läget i displayen. 0 adressen används för att manipulera rad när vi tänker på mönster och algoritmer. Bara fokusera på 1-8 för varje område för nu. Detta ger oss 512 byte av lagring och varje byte representerar 0 - 255 gråskalan värde som sedan får omvandlas till en puls med modulerad representation av intensitet.
På varje slinga av programmet finns en kapslad loop som skannar igenom de 3 dimensionell arrayen och skriver ett lager i taget. Det finns en preprogram fördröjning som kan justeras om behöver vara som avgör hur lång tid varje lager är till för.
När du ökar hastigheten på denna skanning finns det ett par problem du kan stöta på som är därför vi måste införliva blanking på d-multiplexorn. Genom att utnyttja den d ingång för d-multiplexer som överstiger 3-8 specifikationen, kan vi sedan Tom alla utgångar av d-multiplexer. Detta är vad är ansluten till stift 7 av arduino och representeras av produktionsvärde 128 eftersom det är den mest signifikanta biten av en byte. Som vi scanna displayen snabbare, om vi inte tom, kommer vi en avslutande av ljus genom de lager där vi faktiskt inte vill ljuset så att värdet av det föregående lagret kommer att föra över till nästa. Vi behöver tomma lager kontroll för en mycket kort tid medan vi skriver de nya värdena till kolumner, och sedan vi kan växla till lagret ovan och ta bort som spökbilder påverkar.
En sak vi måste vara försiktig med när justera eller sammanställa denna kod är konfigurationen av TLC biblioteket. Du måste titta i avsnittet kommentarer i källkoden förutsatt för att kontrollera vilka inställningar behöver ändras i konfigurationsfilen på TLC. När man behandlar TLC markerna tillhandahåller tillgängliga-biblioteket ett gränssnitt functionwhich tillåter oss att prata med kanalen på TLC systemet. I biblioteket konfigurationsfilen specificerar vi att det finns 4 TLC marker eftersom det finns 16 utgångar per TLC chip. Detta tillåter oss att köra 64 kanaler eller 64 utgångar samtidigt så dessa tas upp som kanal 0 - 63. Som vi gör våra kapslad loop och skanna igenom för är ett lager som vi behöver konsekutivt skriva varje värde till varje kanal så det en hel del häckande eller kapslade slingor. Varje LED representeras av 0 - 255 eller 1 byte gråskala värde. Detta skickas direkt till funktionen TLC.