Moin,
Alex schrieb:
> Zum kleinen Einstig in die Mikrocontroller wollte ich eine dieser
> Philips Stimmungslampen mit einem Atmega 8 | 32, selber nachbauen.
> Die PMW Steuerung um die LEDs dunkler oder heller leuchten zu lassen
> kriege ich hin.
> Aber das 120Grad versetzte Aufleuchten und Erlöschen der LEDs ist über
> die AVR Hardware überhaupt nicht machbar. Da jeder OCRnX seinen eigenen
> Counter braucht.
Denkfehler deinerseits. Die Farb-"Rotation" eines solchen Moodlights
läuft komplett in Software. Die PWM ist lediglich für das Dimmen
zuständig und läuft um Faktor 1000..100000 schneller. Es ist allerdings
sinnvoll, den PWM-Takt als Basistakt für das Auf- und Abdimmen der LEDs
zu verwenden. Wenn man die Helligkeit einer LED mittem im PWM-Zyklus
ändert kann es sonst nämlich zu häßlichem Flackern kommen.
Ich hab sowas als Fingerübung auch mal gebaut und hier dokumentiert:
Beitrag "noch ein AVR Moodlight"
Das Grundprinzip ist ähnlich, wie von anderen bereits beschrieben: ein
Zähler Z wird alle 1..32 PWM-Zyklen um eins hochgezählt. Die
Helligkeiten der LEDs ergeben sich dann aus dem Zählerstand und der
Anzahl der Helligkeitsstufen. Z.B. für 100 Helligkeitsstufen könnte man
von Z=1..100 die erste LED von 0 auf 99 aufdimmen, von Z=101..200 die
LED wieder abdimmen, Z=201..300 die zweite LED aufdimmen etc. Praktisch
wird man die einzelnen LED aber "überlappen" lassen, was nochmal einen
Freiheitsgrad ergibt.
Siehe Funktion moodlight_step() in moodlight.c aus obiger Firmware. Da
implementiere ich zwei Modi mit verschiedener Überlappung und einen
Modus, der die 7 möglichen Farben hart durchschaltet.
Die Knackpunkte einer solchen Schaltung sind aber andere:
1. die Empfindlichkeitskurve des Auges ist logarithmisch. Man muß also
für einen "schönen" Effekt eine nichtlineare Kennlinie implementieren
(aka Gamma-Korrektur).
2. in Verbindung damit reicht eine 8-Bit PWM nicht mehr, weil man damit
kaum mehr als ca. 50 Stufen schafft, was wiederum zu stufig ist.
3. für 3x 16-Bit PWM braucht man entweder einen XMega oder man muß es in
Software machen.
XL