Mensch das wird doch wohl nich das Problem sein. Du kannst die LEDs auch
als Matrix aufbauen. Geeignet angeordnet kannst du aufdie Art mit 8 Pins
Portaufwand und einem kleinen bisschen Softwareaufwand alle 32
spotbillig dimmen ! Du hast dann lediglich einen verdrahtungsaufwand
von 4 Widerständen (und den 32 LEDs natürlich) !
5 6 7 8
| | | |
1-R-X-X-X-X
| | | |
2-R-X-X-X-X
| | | |
3-R-X-X-X-X
| | | |
4-R-X-X-X-X
Von den 4 Widerständen kommt jeweils einer an Stelle eines Rs.
Der Wert des Widerstandes muss ein Achtel des üblichen Widerstandes
betragen, damit die Gesamthelligkeit dem Dauerbetrieb entspricht.
(Genaueres später).
So. an jeweils ein X setzt du nun 2 LEDs parallel, aber in
entgegengesetzte Richtungen. Und zwar so, dass senkrechte mit
waagerechter Linie verbunden wird. Das nennt man Matrixbetrieb. Wenn du
noch etwas Softwareaufwand sparen willst, baust du eine 4x8 Matrix auf -
brauchst halt dann 12 Pins, musst dich aber nicht um die Flussrichtung
kümmern.
Mit dem 4x4-Design baust du aber trotzdem eine 4x8 Matrix auf, der
einzige Unterschied besteht lediglich darin, dass du zwischendrin die
Stromrichtung änderst und damit andere LEDs zum Leuchten bringst.
Prinzip ist einfach : Damit die LED leuchtet, muss die Anode auf HIGH
und die Kathode auf LOW. Legst du 5 auf HIGH, dann leuchtet die LED auf
dem Kreuzpunkt mit 1, wenn 1 auf LOW ist. Legst du 5 auf LOW, leuchtet
die LED auf Kreuzpunkt 1, wenn 1 auf HIGh ist. Damit nicht ungewollt
die Kreuzpunkte der anderen Reihen (6-8) aufleuchten, musst du diese
während dieser Zeit auf Eingang ohne Pull-up schalten. Dann kann kein
Strom fließen. Am besten, du betreibst die Schaltung bei 3,3V, da bei
5V jeweils zwei in Serie geschaltete LEDs leuchten könnten (durch eine
Spannung zwischen einen der Pins von 1-4). Wenn du trotzdem 5V willst,
lies am Ende des Textes - dort steht noch eine Alternative.
Nun durchläufst du Sequentiell die Leitungen 5-8 wie oben beschrieben
(5H,5L,6H,6L, ... - die anderen dabei auf Eingang stellen !) und legst
entsprechend an 1-4 den Zustand für die LED an.
Mit etwas Softwareaufwand (bei geschickter Programmierung nicht viel)
kannst du eine Software-PWM realisieren, die die Pins 1-4 während einer
Leuchtperiode vorzeitig abschaltet. So durchläufst du Zeile um Zeile und
zwar so schnell, dass sich das ganze "Bild" mehr als 60-70 mal pro
Sekunde aufbaut. Dann wird das vom Auge nicht mehr als flimmern
wahrgenommen. Das heißt, du musst deine PWM für eine Geschwindigkeit
von 50*8*Auflösung auslegen. Sagen wir mal 32 Helligkeitsstufen - mehr
wird wohl bei einer LED kaum Sinn machen - macht eine PWM-Grundfrequenz
von 12,8 KHz. Das ist durchaus zu schaffen. Bei 8 MHz Taktfrequenz hast
du bequeme 625 Takte für einen (!) PWM-Schritt zeit. Das bedeutet, dass
du das bequem in die ISR eines Timers unterkriegst. Mit Assembler
schluckst du vllt. 10% Rechenleistung des AVRs.
Dreh es wie du willst : mit weniger Aufwand und effektiver wirst du es
kaum schaffen. Das ist die Technik, wie sie auch bei Professionellen
Anwendung findet. Hardwareseitig hast du 0 Aufwand. Geldbeutelseitig
ebenfalls nicht. Du brauchst halt 3,3V damit du kein "Fehlleuchten"
erzeugst. Wenn du doch 5V verwenden willst, kannst du das zur Not aber
auch umgehen, indem du einen Spannungsabfall (kein Widerstand) in die
Leitungen 1-4 einbaust, der die ON-Spannung unter die doppelte
Abfallspannung einer LED drückt.