Mikro - wrist watch LED mönster TIDMÄTARE (4 / 7 steg)
Steg 4: Charliegrid... layout och programmering
För dem inte känner till detta, det är ett sätt att styra massor av lysdioder med endast några stift genom att utnyttja en mikrokontroller pins tri-state karaktär och framspänning av lysdioder. Det finns många förklaringar av charliegrid och deras tillämpningar på nätet så jag inte kommer ge mer än en snabb förklaring.
Observera konfigurationen av lysdioder på charliegrid.
Du kan sätta en + ve spänning på en kontroll linje, och du kan sätta en 0V på en annan rad. Du lämna andra kontroll linjer utan anknytning till något. Tänk dig att ha en charligrid på en skärbräda och du ansluta två styrledningar till ett batteri. För mikrokontroller, du programmera dessa två stiften att utgångar och ange en PIN-kod till en logik '1' och den andra en logik "0".
Du lämnar andra kontroll linjer osammanhängande, eller vid en micrcontroller du ställa dessa pins som insatsvaror.
LED med direkt anslutning till denna anslutning kommer att tändas. Även om det finns flera vägar genom dessa stift genom andra lysdioder, kommer endast en lätt eftersom när den gör framspänning det led alltid kommer att vara lägre än en kombination av andra lysdioder.
När placeringen av logiken '1' och '0' återförs och samma kontroll linjer är markerade, lyser LED i omvänd position upp. Du kan se dessa i kopplingsschemat som parar av lysdioder mellan varje kombination av kontroll ingångar. Som sådan 6 kontroll linjer kan verka 30 lysdioder individuellt... inte samtidigt förstås!
För att lysa upp en LED handlar det helt enkelt att programmera mikrokontroller skicka en logik '1' eller en logik '0' till som någonsin två kontroll linjer motsvarade det LED och ange de andra ingångarna.
Av kort lysande varje önskad LED i sin tur, kan du bygga en display som en monitor på grund av persistens av vision effekt. Eftersom endast en LED kan tändas samtidigt, det är alltid nödvändigt i en charliegrid.
I koden utgången porta/portb registrerar och tris register är laddade med värde före beräknat att lysa upp en LED. Tog ett tag att beräkna dem alla. Här är ett fragment:
LED1 LED2 LED3 LED4
unsigned char LEDS_TRISA [31] = {0xfd, 0xee, 0xf7, 0xfd,
unsigned char LEDS_PORTA [31] = {0x02, 0x01, 0x08, 0x00, 0
unsigned char LEDS_TRISB [31] = {0xfb, 0xff, 0xfb, 0xfb, 0
unsigned char LEDS_PORTB [31] = {0x00, 0x00, 0x00, 0x04, 0 x
Om någon vet av en generell charliegrid algoritm, ska jag vara mycket intresserad av.
Men först rutnätet måste finnas som ut. För mikro var detta en stor utmaning på grund av brist på utrymme. Huvudbilden visar hur detta blev hanterbar.
Inledningsvis satte jag lysdioderna i par i rutnätet och botten komponenterna i också där jag ville de. Detta var mycket förvirrande när man försöker reda ut den bästa mest effektiva connectivity för den komplexa charliegrid. Genom att flytta lysdioderna från de nedre delarna, blev ratsnest lättare att läsa. Efter som det var enkelt att flytta nätet tillbaka till de nedersta komponenterna och göra botten layout med ett minimum av lager för lager vias och crossover spår. Du kan se effekterna av flytta och rotera lysdioderna för att få den bästa arrangemanget i den galna namnge sekvens av charliegrid Schematisk efter omnumreringen lysdioder i styrelsen.