Helligkeit der LEDs mit Pulsweitenmodulation regeln
Dunkel | ![]() |
![]() |
![]() |
![]() |
---|---|---|---|---|
0 | 1 | 2 | 0 | |
33% | ![]() |
![]() |
![]() |
![]() |
0 | 1 | 2 | 0 | |
66% | ![]() |
![]() |
![]() |
![]() |
0 | 1 | 2 | 0 | |
100% | ![]() |
![]() |
![]() |
![]() |
0 | 1 | 2 | 0 |
Das Prinzip wird hier am Beispiel von 4 Helligkeitsstufen verdeutlicht. Ein Zyklus dauert 3 Takte, die LED leuchtet von 0 Takte (gar nicht) bis 3 Takte (ständig). Die LEDs sollen mit 100Hz angesteuert werden, damit kein Flackern wahrnehmbar ist. Zwei Lösungsvarianten bieten sich an:
- Realisierung per Software. Das Signal wird mittels Warteschleife oder ISR erzeugt.
- Vorteile: Beliebige PortPins als Ausgabe möglich. Keine Begrenzung durch Anzahl der PWM-Einheiten
- Nachteile: Zykluszeit kann zu lang sein. Hohe Rechenbelastung.
- Realisierung mit Hardware (Timer PWM System). Die µC habe bereits eine geeignete Hardware zur Erzeugung von PWM-Signalen eingebaut. An bestimmten Ausgängen können diese Signale abgegriffen werden.
- Vorteile: Auch kurze Zykluszeiten realisierbar, Signalerzeugung geschieht im Hintergrund, Hauptprogramm wird nicht belastet
- Nachteile: Festlegung auf bestimmte PortPins, Begrenzte Anzahl von Ausgängen
PWM per Software mit ISR
L0 des Z-Eye @1MHz soll 4 Helligkeitsstufen {0..3} annehmen können und mit einer Frequenz von 100Hz angesteuert werden. In einer CTC-ISR des 8Bit Timer0 werden die Helligkeitslevel durchgezählt. Solange der gewünschte Helligkeitslevel nicht erreicht ist, ist die LED eingeschaltet. Bei 4 Werten sind 3 ISR-Aufrufe pro Zyklus nötig, die ISR wird 300 mal pro Sekunde aufgerufen werden (300Hz). Per Tasten an T0 (runter) und T1 (hoch) soll die Helligkeit eingestellt werden.