Ansteuerung einer (Full-Color)-RGB-Leuchtdiode (mit PIC-Mikrocontroller, Elektronik)


zurück zu Elektronik, Homepage


3. Demonstrationsbeispiel:

Das folgende Beispiel dient nur zur Demonstration. Es zeigt eine mögliche Einbindung des oben beschriebenen Unterprogramms.

nach oben

3.1. Hardware

Schaltung des Demonstrationsbeispiel

Bei diesem Demonstrationsbeispiel steuert ein Mikrocontroller vom Typ PIC16F628 über die Strombegrenzungswiderstäne R1 bis R4 die Full-Color-RGB-Leuchtdiode (D1) an.

Mit den Tastern S1 bis S3 kann die auszugebende Farbe bestimmt werden. Durch Drücken der Taste S1 wird der Rot-Anteil um den Wert 16 erhöht. Durch Drücken der Taste S2 der Grün-Anteil und der Blau-Anteil mit der Taste S3. Die Widerstände R4 bis R7 dienen hier als Pull-Up-Widerstände. Bei einem nicht gedrückten Taster (z.B. S1) liegt durch diesen Pull-Up-Widerstand (R5) am Portpin RA2 ein High-Pegel. Dieser wird durch drücken der Taste S1 auf low gezogen. Bei den Tastern S2 und S3 gilt natürlich dasselbe wie für S1.

Bei genauer Betrachtung der Hardware fällt auf, dass keine Oszillator und keine Reset-Schaltung vorhanden sind. Diese ist hier auch nicht notwendig, da diese der Mikrocontroller intern erzeugt. Der intern erzeugte Takt ist zwar nicht so frequenzstabil wie mit einem externen Quarz, reicht aber für diese Anwendung völlig aus.

Der Kondensator C1 dient zur Entkoppelung der Betriebsspannung für den Mikrocontroller (IC1). Für diesen Koppelkondensator sollte ein Keramiktyp verwendet werden. Dieser muss möglichst nahe beim Mikrocontroller angebracht werden.

Der Port B wird hier nicht verwendet und bleibt daher unbeschaltet.

nach oben

3.2. Anmerkungen zur Software

Die Software zum Demonstrationsbeispiel befindet sich im Download- Bereich auf dieser Seite

Die ISR wird alle 512µs aufgerufen und besitzt "nur" die Aufgabe zwei Zeitbasen zu erzeugen, indem sie zwei Botschaftsflags für das Hauptprogramm erzeugt. Eine Zeitbasis alle 512µs und die zweite Zeitbasis ca. alle 4ms. Da die ISR alle 512µs aufgerufen wird ist die 512-µs-Zeitbasis besonders einfach. Es muss nur bei jedem Aufruf ein Flag gesetzt werden, und zwar das Flag FLAG512USEK im Register FLAGSISRHP. Die Generierung für die 4-ms-Zeitbasis ist dagegen schon etwas "umfangreicher". Damit eine Zeit von ca. 4 ms entsteht, muss die ISR 8-mal aufgerufen werden (8 x 512µs = 4096µs = 4ms). Bei jedem ISR-Aufruf muss also ein Zählregister um 1 vermindert werden. Besitzt es danach den Wert 0, so sind 4ms vergangen. Nun wird das Botschaftsflag FLAG4MSEK im Register FLAGSISRHP gesetzt, und das Zählregister muss mit dem Wert 8 neu geladen werden. Der Wert 8 wird hier durch die Konstante KONSTISR4MS ersetzt.

Die ISR wird, wie schon mehrmals erwähnt, alle 512µs aufgerufen Diese 512µs ergeben sich folgendermaßen: TMR0 wird mit dem Wert 0 geladen es dauert also 256 Taktzyklen bis das Register wieder den Wert 0 besitzt, der Vorteiler besitzt den Wert 2 Der Taktzyklus ergibt sich aus dem internen Takt von 4MHz. Dieser ist bei der PIC- Familie wie folgt definiert:

                              4
                        -------------
                        Quarzfrequenz

Daraus ergibt sich folgender Zusammenhang:

                            4 x 256 x 2        4 x 256 x 2
        ISRAUFRUF [s] = ------------------- = ----------- = 512
                         Quarzfrequenz [MHz]       4 

Also ein ISR-Aufruf alle 512µs.

Das Hauptprogramm befindet sich nach der Initialisierung (Unterprogramm INIT) und der Interruptfreigabe in einer Endlosschleife. Diese Schleife besitzt die Aufgabe ständig die so genannten Botschaftsflags abzufragen. Ist eines dieser Botschaftsflags gesetzt, so muss vom Hauptprogramm eine bestimmte Aufgabe ausgeführt werden. Diese Aufgaben sind in Form von Unterprogrammen vorhanden. Hier bei der Ansteuerung einer RGB-Leuchtdiode werden diese beiden Botschaftsflags in der Timer-ISR gesetzt. Und zwar wird alle 512µs ein Flag gesetzt. Das zweite Flag von der ISR wird alle 4ms gesetzt. (Botschaftsflags können aber auch in anderen Unterprogrammen gesetzt werden, was aber hier nicht der Fall ist.)

Hier Zusammenfassend die Tätigkeiten in der Endlosschleife, welche durch die Botschaftsflags ausgelöst werden:

Das Unterprogramm INIT dient zur Initialisierung des Controllers. Hier werden unter anderem die Ports konfiguriert (Port dient als Eingang oder als Ausgang), der oder die Timer eingestellt usw. Dieses Unterprogramm ist vom Controllertyp abhängig und je nach Anwendung mehr oder weniger umfangreich. Siehe auch Abschnitt (2.2. Initialisierung)

Das Unterprogramme PWM_RGB_LED ist für die eigentliche Ansteuerung der RGB-Leuchtdiode zuständig. Siehe Abschnitt (2.3. Unterprogramm für die Ansteuerung der RGB-Leuchtdiode (mittels PWM)

Das Unterprogramm TASTENROUTINE wird zyklisch alle 4ms aufgerufen und ermittelt welche Taste gedrückt wird. Erkennt dieses Unterprogramm, dass eine Taste gedrückt wurde, so erhöht es den entsprechenden Farbanteil. Wie dieses Unterprogramm einen Tastendruck erkennt ist im Listing ausreichend beschrieben.

nach oben


zurück zu Elektronik, Homepage

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