Ich hab sowas für zwei RGB-LEDs mal per Software-PWM gemacht.
=> http://johannesneumann.net/index.php...pwm-mit-fading
Vielleicht hilft dir das ein bisschen.

Ansonsten: Ja, Timer kannst du im Prinzip wie Threads benutzen. Du kannst beim Overflow einen Interrupt auslösen lassen, der dann alle X Prozessortakte das Programm unterbricht und eine ISR ausführt. In die kannst du deine PWM-Erzeugung packen: In jedem Durchlauf wird eine Variable hochgezählt. Hat sie den Wert der Helligkeit deiner LED erreicht, so wird der Pin auf LOW gezogen. Wenn diese Variable den Maximalwert erreicht hat, wird sie auf Null gesetzt und alle Pins auf HIGH gezogen und dann gehts von vorn los.

Das Faden kann in einer Schleife passieren, insofern du nicht was anderes abarbeiten willst, während gefadet wird. Unter dem Link oben findest du nen c-File, was genau das macht. Das Faden wird über einen anderen Timer geregelt, sodass du im Programm schon was anderes machen kannst während die LEDs ihre Farbe wechseln.


Wieso packst du da eigentlich einen Elko ran? Das ist doch sinnlos: Der läd sich auf, wenn die PWM gerade High ist und wenn sie Low geht, leuchtet die LED mit der gespeicherten Energie weiter... Damit hast du kein Dimmen mehr, sondern kontinuierliches Leuchten. Nimm die Elkos weg, dann wirds gehen.

Bääääär

[Edit] Aschso, für richtiges Dimmen wäre Gamma-Korrektur noch ne sinnvolle Sache. Siehe ebenfalls mein Link und Sourcecode.