Ansteuerung einer (Full-Color)-RGB-Leuchtdiode (mit PIC-Mikrocontroller, Elektronik)
2. Software:
2.1. Benötigte Register und Portdefinition
Register:
Für die softwaremäßige Ansteuerung werden neben einigen PIC internen Register (SFR,
Spezielle Funktions-Register) noch folgende Register benötigt:
- RGB_ZAEHLER: Zählregister für die Puls-Weiten-Modulation
- RGB_WERT_ROT: Beinhaltet den Rot-Anteil
- RGB_WERT_GRUEN: Beinhaltet den Grün-Anteil
- RGB_WERT_BLAU: Beinhaltet den Blau-Anteil
- TEMP1: Hilfsregister
Portdefinition:
Im Allgemeinen werden bei jeder Anwendung die vier einzelnen Leuchtdioden der RGB-
LED an einem beliebigen Port angeschlossen. Damit dies in der Software nur an einer
Stelle berücksichtigt werden muss befindet sich in der Software eine Portdefinition.
Diese besteht aus den folgenden Parametern:
- RGB_LED_ROT: Dieser Parameter gibt den Portpin für die rote Leuchtdiode an
- RGB_LED_GRÜN: Dieser Parameter gibt den Portpin für die grüne Leuchtdiode an
- RGB_LED_BLAU1: Dieser Parameter gibt den Portpin für die erste blaue Leuchtdiode an
- RGB_LED_BLAU2: Dieser Parameter gibt den Portpin für die zweite blaue Leuchtdiode an
RGB_LED_GRUEN equ 0
RGB_LED_BLAU1 equ 1
RGB_LED_ROT equ 6
RGB_LED_BLAU2 equ 7
2.2. Initialisierung (Unterprogramm "INIT")
Dieses Unterprogramm dient zur Initialisierung des Mikrocontrollers. Die Portpins an
denen die einzelnen Leuchtdioden angeschlossen sind müssen als Ausgang definiert
werden, und anschließend gelöscht werden.
Weiter sollten das Zählregister RGB_ZAEHLER und die Register für den roten, grünen
und blauen Anteil initialisiert (also gelöscht) werden.
Anmerkung:
Hier bei diesem Beispiel befinden sich die vier Leuchtdioden der RGB-LED am Port A
an den Pins 0 (grüne Leuchtdiode), 6 (rote Leuchtdiode) und 1 bzw. 7 (die beiden
blauen Leuchtdioden)
2.3. Unterprogramm für die Ansteuerung der RGB-Leuchtdiode (mittels PWM)
Das Unterprogramm PWM_RGB_LED ist für die Ansteuerung der RGB-Leuchtdiode die
wichtigste Komponente.
Diese Routine muss zyklisch (z.B. alle 512 µs) aufgerufen werden.
Aufgabe:
Die Aufgabe des Unterprogramms DCFROUTINE besteht darin aus den Abtastungen
herauszufinden, ob ein Low, ein High oder ein Minutenwechsel gesendet wurde. Dazu
wird bei jedem Aufruf des Unterprogramms DCFROUTINE entweder das Zählregister
DCFPULS oder das Zählregister DCFPAUSE um 1 erhöht (inkrementiert), wenn sich
der Pegel voPWM für die RGB-Leuchtdiode erzeugen
Vorgehensweise:
- Hilfsregister (TEMP1) löschen
- PWM für den roten Anteil erzeugen: Dazu das Register RGB_WERT_ROT mit dem
Zählregister RGB_ZAEHLER vergleichen. Ist RGB_WERT_ROT größer als das
Zählregister (RGB_ZAEHLER), so muss der Ausgang für den Rotanteil gesetzt
werden. Im Hilfsregister (TEMP1) daher das Flag für den roten Anteil (Flag
RGB_LED_ROT) setzen.
- PWM für den grünen und blauen Anteil erzeugen (Dieser Vorgang erfolgt analog wie
der für den roten Anteil)
- Hilfsregister (TEMP1) am Port A ausgeben
- Zählregister (RGB_ZAEHLER) für den nächsten Aufruf um 8 erhöhen
Anmerkungen:
- Das temporäre Register TEMP1 wird hier nur zum Zwischenspeichern benötigt. Es
kann daher auch in anderen Unterprogrammen verwendet werden.
- Das Zählregister RGB_ZAEHLER wird bei jedem Aufruf um 8 erhöht. Dadurch wird
die Auflösung der Puls-Weiten-Modulation von 8 auf 5 Bit verkleinert. Die PWM kann
nur mehr von 0 bis 31 eingestellt werden. Daraus ergibt sich aber eine PWM-Frequenz
von ca. 61 Hz. (Bei 256 Schritten würde diese Frequenz 7,6Hz (!) betragen.)

Autor: Buchgeher Stefan
Erstellt: 1. April 2004
Letzte Änderung: 10. Oktober 2004