Stap 4: 3D LED Software
Software voor de LED-kubus is geschreven in C en opgesteld onder de arduino-ontwikkelomgeving. De code wordt overgebracht naar de arduino uno via een USB-kabel, zodat hiervoor een USB naar seriële converter voor het programmeren van de AVR direct.
De beste manier om te denken van de software bestaat uit twee hoofdonderdelen:
- de filosofie van de afbeelding worden weergegeven
- de patronen en de algoritmen die worden gebruikt voor het genereren van de afbeelding
Filosofie van de afbeelding worden weergegeven
De filosofie van de display laat ons toe om alleen oplichten één laag van LED-lampen tegelijk, dus om te bekijken van de gehele kubus van LEDs simultaan, wij rekenen op een fenomeen dat bekend staat als de Persistentie van de visie. Dit is zodat we door alle LEDs of lagen voor LEDs scannen kunt zonder dat ze allemaal op in één keer. Als we door hen snel genoeg scannen kunt, (meestal 20-25 cycli per tweede of 8 25 keer per seconde lagen) dan zij lijken allemaal op zijn op hetzelfde moment.
In werkelijkheid, vanwege de structuur van de code, de cyclustijd zal variëren dus het beeld of de huidige staat van de afbeelding wordt vertegenwoordigd door een 3 dimensionale byte-matrix. Het is een matrix met de afmetingen van 0 - 8 in alle richtingen, maar realistisch slechts 1-8 worden gebruikt voor de huidige status van display. De 0 adres wordt gebruikt voor het manipuleren van rij, als we over patronen en algoritmen denken. Alleen richten op de 1-8 voor elk zwaartepunt voor nu. Dit geeft ons 512 bytes van opslag en elke byte vertegenwoordigt 0 - 255 grijsschaal waarde die vervolgens wordt omgezet in een puls met gemoduleerde vertegenwoordiging van intensiteit.
Op elke lus van het programma is er een geneste lus die scant via het 3 dimensionale array en schrijft van één laag tegelijk. Er is een preprogram vertraging die kan worden aangepast als hoeft te zijn die bepaalt hoe lang elke laag is op voor.
Wanneer u de snelheid verhoogt van deze scannen er zijn een paar problemen die u kunt tegenkomen dat is waarom we moeten opnemen op de d-multiplexer blanking. Door gebruik te maken van de d ingang voor de d-multiplexer die groter is dan de 3-8-specificatie, kunnen wij vervolgens alle uitgangen van de d-multiplexer leeg. Dit is wat op pin 7 van de arduino is aangesloten en wordt vertegenwoordigd door de output waarde 128, want het is de meest significante bit van een byte. Als wij het scherm sneller, scannen als we niet leeg, zullen we een achterstand van licht door de lagen waar we eigenlijk niet willen het licht zodat de waarde van de vorige laag over op de volgende dragen zal. We moeten de controle van de laag voor een zeer korte tijd leeg terwijl we de nieuwe waarden in de kolommen schrijven, en dan kunnen we overschakelen naar de bovenstaande laag en verwijderen die ghosting effect.
Een ding dat we moeten oppassen voor bij het aanpassen of opstellen van deze code is de configuratie van de TLC-bibliotheek. Moet je kijken in de commentarensectie van de broncode geleverd om te controleren wat instellingen moeten worden gewijzigd in het configuratiebestand van TLC. Bij het opstellen van de TLC-chips biedt de beschikbare bibliotheek dat een interfacing functionwhich ons toelaat om te praten met het kanaal op de TLC-systeem. In het configuratiebestand van de bibliotheek we aangeven dat er 4 TLC chips zijn omdat er 16 uitgangen per TLC chip. Dit laat ons toe om rijden 64 kanalen of 64 uitgangen tegelijkertijd zodat deze worden aangepakt als kanaal 0 - 63. Als we onze geneste lus doen en via zoeken is een laag die we moeten opeenvolgend schrijf elke waarde naar elk kanaal zo er een heleboel nesten of geneste lus. Elke LED wordt vertegenwoordigd door 0 - 255 of 1 greyscale bytewaarde. Dit wordt doorgegeven rechtstreeks in de functie van TLC.