OBS: Förklaringen till programmet saknas, men kommer inom kort!
Innan ni läser vidare kan det vara av vikt att lära sig hur man använder I/O portarna direkt utan digitalWrite() funktionen och vi har tagit fram lite information om detta här. Vi måste använda oss av detta för att få det att gå så snabbt som möjligt.
Bilden nedan visar inkopplingen på vårt Arduino Starterkit, alla komponenter finns förutom själva LED matrisen. Har ni redan en 8×8 LED matris kan ni använda den, men då kanske inte inkoppling kan ske på samma sätt som i vårt exempel. Vi rekommenderar denna LED matris, dels för att den är billig och att den är så liten att den lätt får plats på vårt kopplingsdäck. Denna inkoppling använder de flesta av I/O pinnarna (16st) på Arduinokortet och använder således inte några andra externa kretsar som sköter matrisen. Vi kommer att lära oss att använda Interrupts och ett externt LIB för detta samt rätt mycket bithantering, direkt I/O hantering för att koden skall bli så snabb och optimal som möjligt. Vi använder även några av de analoga in för digitala utgångar.
Bilden nedan visar info om den LED matris vi använder, vi har färgkodat de fyra hörnbenen. Kolumnen har anoden och raden har katoden. Genom att använda s.k. multiplexing kan vi styra 64 lysdioder med 16 digitala utgångar, där 8 utgångar styr kolumnen och 8 utgångar styr raden. För att visa en bild på dessa 64 lysdioder går det åt 8 bytes, en byte per rad (eller kolumn) där varje bit i byten indikerar om lysdioden för den aktuella raden/kolumnen skall vara tänd eller inte. Genom att se till att en rad i tagen är aktiv (satt till GND/0V) och de andra raderna inaktiva (satta till +5V) så lägger vi ut en byte på kolumnen som motsvarar de lysdioder i den aktuella raden som skall vara tända. Sedan tar man nästa rad och så vidare runt. Gör man detta snabbt nog (mer än 50Hz) kommer ögat inte att märka att vi snurrar runt bland de olika raderna och ögat uppfattar då en bild som består av 64 lysdioder. I vårt exempel kommer vi använda oss av ett s.k. timer interrupt (tidsavbrott) som sker varje millisekund. Genom att använda oss av detta så kan LED matrisen uppdateras i bakgrunden av vårt program och vi endast tala om för denna rutin vilka lysdioder som skall vara tända. Skall vi ha en bild som sträcker sig mer än 8 lysdioder på ena hållet så kan vi scrolla denna bild snyggt med egen tidsfördröjning utan att störa uppdateringen av själva LED matrisen.
Bilden nedan visar hur vi kopplat in denna LED matris till Arduino Uno. Vi använder oss av 8st 330ohms motstånd och kopplar in oss på Arduino Uno som texten på bilden nedan anvisar. Vi använder således inte pinne 0 (RX) och 1 (TX) utan dessa är tänkta att vara fria så man senare t.ex. kan använda dessa till att kommunicera med en dator så vi kan skicka ut större text som kan roteras (låt fantasin flöda). Texten “BL-M07C881” som finns på den LED matris vi använder är tryckt på den sida där pinnarna 1-8 finns.
Koden för detta projekt kan laddas hem här (högerklicka och välj spara som). Nedan finns en film på vad programmet gör.
Mer info kommer inom kort om hur koden fungerar…