AVR dubbla RGB Matrix föraren (8 / 12 steg)
Steg 8: Firmware - del 1: översikt
Det medföljande biblioteket definierar följande funktioner i pubnub/pubnub.h.
Den kompletta källkoden är tillgänglig i denna GitHub databaser.
Innan jag dyker in i koden, låt oss ta en stund att gå över allt som händer. När AVR initieras, ansvarar huvudloop endast för LED jaga sekvenser. Alla faktiska kontroll hanteras i avbryta tjänsten rutiner. För detta används 8 bit timer/counter 0.
Begreppsmässigt sett används timern för att ange att det är antingen tid att aktivera lysdioder, eller tid för att stänga lysdioder. Vad lysdioder bör vara på eller av bestäms av ett par av flerdimensionella arrayer:
Därefter kommer tala om hur färgerna faktiskt skapas av Timer 0.
1 bit för varje RGB LED i varje columnstatic utan laga kraft uint8_t lysdioder [matriser] [kolumner] [färger];
Den faktiska färgen på varje RGB (se color_8bit.h)static utan laga kraft uint8_t färger [matriser] [kolumner] [lysdioder];
Arrayen lysdioder är 2 x 8 x 3 byte - en byte för varje färg rad (R, G och B) i varje kolumn, i varje matris. Varje bit i detta byte representerar ett LED i den raden. Arrayen färger är 2 x 8 x 8 byte - en byte att representera önskad färg i varje LED.
För att få tillräckligt med tid att kontrollera båda matriser, används en upplösning på 4. Detta kan verka liten jämfört med upplösningen av 255 i datorn färger, men tänk på att 4 x 4 x 4 = 64 unika färger. Det är möjligt att öka denna resolution några, men 64 unika färger verkar vara gott för mina syften. I verkligheten var många av dessa färger mycket lika, så jag sänkte detta ner till 44 i huvudfilen modules/macros/color_8bit.h. Filen innehåller också en mängd enskilda R, G & B nivåer krävs för att skapa alla tillgängliga färger.
Därefter kommer tala om hur färgerna faktiskt skapas av Timer 0.