Minidot 2 - de holoclock (2 / 6 stap)

Stap 2: Het dimmen algoritme - charliplexed puls breedte modulatie


Zoals eerder vermeld, ik wilde de verschillende dot patronen voor de fade tijd soepel in plaats van de schokken van een patroon naar de andere.

Zie de video voor een demonstratie. In de middleis is de nieuwe Minidot klok, aan de rechterkant de oudere Minidot. Merk op hoe veel mooier, de nieuwe is.

(FYI anderzijds wordt weergegeven op de achtergrond zijn mijn Minicray supercomputer statusdisplay en mijn gevangen Nebulon deeltjes die de bevoegdheden van de Minicray op een gebied van de magnetische opsluiting antimaterie. Zie hier:
http://www.YouTube.com/watch?v=bRupDulR4ME
voor een demonstratie van de kamer van nebulon opsluiting)

Als je in de code kijkt, open het bestand display.c. Opmerking Er zijn vier arrays voor het toewijzen van de tris/poortwaarden om te verlichten van een bepaalde matrix en twee matrices (één meer dan de Microdot-code) voor het definiëren van welke LEDs verlicht moeten worden voor een bepaald patroon van LEDs.
BV:

 // LED1 LED2 LED3 ...unsigned char LEDS_PORTA[31] = { 0x10, 0x00, 0x00, ...unsigned char LEDS_TRISA[31] = { 0xef, 0xff, 0xff, ...unsigned char LEDS_PORTB[31] = { 0x00, 0x02, 0x04, ...unsigned char LEDS_TRISB[31] = { 0xfd, 0xf9, 0xf9, ...unsigned char nLedsA[30];unsigned char nLedsB[30]; 

Als u wilt oplichten LED1 bijvoorbeeld, moet u de TRIS registers TRISA:B = 0xef:0xfd en poort registers PORTA:B = 0x10:0x00, enzovoort. Als u de waarden van de tris in binaire uitschrijven ziet u op een bepaald moment, zijn er slechts twee uitgangen ingeschakeld. De anderen zijn allemaal ingesteld op Tri-state (vandaar TRIS registreren). Dit staat centraal in charlieplexing. U zult ook merken dat één output altijd is een logisch '1' en de andere altijd een logische '0' is... de richting van die draait op welke LED is tussen deze dat twee output lijnen.
De laatste waarde in de haven/tris matrices is een null-waarde om helemaal geen LED inschakelen.

In de Microdot fietste de update_display functie continu door een andere array (nLeds[]) om te zien of dat bepaalde LED verlicht. Als het was, dan is de tegenwaarde van de tris/poort waren set en de LED verlichte voor een periode van tijd. Anders de null-waarde werd verzonden naar de PICs TRIS/PORT registreert en geen LED werd verlicht voor een periode van tijd. Wanneer gedaan snel genoeg gaf dit een patroon. De rest van het programma zou periodiek de RTC-waarden lezen en make-up een mooi willekeurig patroon in die matrix... en zo de weergave gewijzigd.

Als u wilt ervoor zorgen dat een dimmen werkt, werd dit enigszins uitgebreid zodat na de 30 LED's dat ofwel verlicht waren (of niet) dan extra perioden zou worden besteed aan het verzenden van null-waarden als het display worden grijs weergegeven... voor volledige helderheid moest dan geen extra perioden zou worden besteed. Toen herhaald als er een heleboel null periodes tot en met de verlichte LED's waren, zou het display dim. In feite is dit multiplexed puls breedte modulatie... of omdat de hardware is geconfigureerd in een regeling van de charlieplex, dan charlieplexed puls breedte modulatie.

Het tweede diagram hieronder toont de basisopstelling hiervoor. Ik noem dit een scan-frame. De eerste 30 perioden aan het frame worden gebruikt om te gaan door middel van de LEDs... en een variabel aantal extra perioden definiëren hoe dim het display zal worden. Deze cyclus herhaalt. Meer null perioden betekent minder tijd voor een LED als op per frame (want het aantal perioden voor een verhoogde). Opmerking de verticale as betekent niet spanningsniveau. De werkelijke staat van de pinnen gaat de LED's hangt af van zijn positie in de matrix van charlieplex... in het diagram dat het betekent alleen in- of uitschakelen.

Dit betekende ook de totale lengte van het frame in tijd ook verhoogd, dus het verminderen van de refresh rate. Als de LEDs kreeg dimmer, zouden ze beginnen te trillen met andere woorden. Deze methode is dus handig alleen tot op zekere hoogte. Voor de klok was het OK.

Een functie heet intermittantly die leest de A/D converter op de PIC en dit helderheidsniveau ingesteld. Als je de code leest, het ook wordt gecontroleerd als de LED dichtstbijzijnde de LDR brandt, en niet elk niveau instellen als dat zo is, dat het display onverwacht stopt brighting wanneer het patroon gewijzigd.

Naast het Kruis fade functie.

Gerelateerde Artikelen

Microdot - pols horloge LED patroon uurwerk

Microdot - pols horloge LED patroon uurwerk

een andere RGB-zonsondergang Productions productie!Dit project is een Printplaat voor het maken van een pols horloge grootte versie van mijn minidot-klok:met een paar meer functies meer toepassing naar een draagbaar apparaat. Een heleboel hulp en sug
Charlieplexing LED's - de theorie

Charlieplexing LED's - de theorie

dit instructable is minder een te bouwen uw eigen project en meer een beschrijving van de theorie van charlieplexing. Het is geschikt voor mensen met de basisprincipes van de elektronica, maar niet volslagen beginners. Ik heb het geschreven in antwoo