Additive Farbmischung am Beispiel von LEDs Anwenderbericht Version 1B / 26.02.2006 Verfasser: Fabian Wetzel Themensteller: Michael Vieth Fabian Wetzel Seite 2 von 17 Additive Farbmischung am Beispiel von LEDs Vorstellung eines Bastelprojektes mit theoretischen Grundlagen. Anwenderbericht Bearbeitungszeitraum: Februar 2006 - März 2006 Verfasser: Name: Fabian Wetzel E-Mail: [email protected] Matrikel-Nr.: 05 6 29 Themensteller: Name: Michael Vieth E-Mail: [email protected] Fabian Wetzel Seite 3 von 17 Vorwort Dieses Dokument ist ein Teil des Studienbegleitprogramms meines Bachelor Studiengangs in der Studienrichtung Telekommunikationsinformatik. Dieser Anwenderbericht stellt ein einfaches Bastelprojekt vor. Es handelt sich um eine elektrische Schaltung, die mit Hilfe von LEDs die additive Farbmischung veranschaulichen soll. Er soll dem interessierten Leser Grundwissen in elektronischen Schaltungen vermitteln, in dem er die verwendeten Bauteile vorstellt und auf die Programmierung des Microcontrollers genauer eingeht. Gewünschter Effekt ist, dass der ein oder andere Leser sich nach diesem Bericht überlegt, eigene kleine Schaltungen aufzubauen. Fabian Wetzel Seite 4 von 17 Inhalt Vorwort ...................................................................................................................................... 3 Inhalt........................................................................................................................................... 4 Abbildungsverzeichnis ............................................................................................................... 5 Tabellenverzeichnis.................................................................................................................... 5 1 Additive Farbmischung ...................................................................................................... 6 2 Schaltplan ........................................................................................................................... 7 2.1 Allgemeines................................................................................................................ 7 2.2 Spannungsregelung mit 7805 ..................................................................................... 8 2.3 LED ............................................................................................................................ 9 2.4 Microcontroller ATTiny2313................................................................................... 10 2.5 Kosten....................................................................................................................... 11 3 PWM ................................................................................................................................ 11 4 Software ........................................................................................................................... 13 5 4.1 Allgemeines.............................................................................................................. 13 4.2 Warum kein ASM?................................................................................................... 13 4.3 C-Einrichtung ........................................................................................................... 13 4.4 C-Quellcode ............................................................................................................. 13 Zusammenfassung............................................................................................................ 16 Quellen ..................................................................................................................................... 17 Literaturquellen .................................................................................................................... 17 Bildquellen ........................................................................................................................... 17 Fabian Wetzel Seite 5 von 17 Abbildungsverzeichnis Abbildung 1: Theorie der additiven Farbmischung (aus Wikipedia)......................................... 6 Abbildung 2: Hauptschaltplan.................................................................................................... 7 Abbildung 3: Foto der Schaltung ............................................................................................... 7 Abbildung 4: Schaltplan der Spannungsversorgung .................................................................. 8 Abbildung 5: Nahaufnahme einer LED (aus Wikipedia)........................................................... 9 Abbildung 6: Schema von Pulsweitenmodulation ................................................................... 12 Abbildung 7: Nicht vermischende Farben ............................................................................... 16 Tabellenverzeichnis Tabelle 1: Kosten der verwendeten Komponenten .................................................................. 11 Fabian Wetzel Seite 6 von 17 1 Additive Farbmischung Die additive Farbmischung findet als wohl bekanntestes Beispiel bei so ziemlich allen Fernsehern und Monitoren Verwendung. Die Farben Rot, Grün und Blau sind als Grundfarben anzusehen, durch die jede andere Farbe darstellbar ist. Wie aus der Abbildung auch zu entnehmen ist, entsteht zum Beispiel durch Mischen von Rot und Blau die Farbe Magenta. Weiß entsteht durch das Mischen aller drei Grundfarben, Schwarz entsteht, wenn keine der drei Grundfarben präsent ist. Abbildung 1: Theorie der additiven Farbmischung Der Versuchsaufbau enthält nun jeweils eine LED für die Grundfarben Rot, Grün und Blau verwendet. Durch gezieltes Steuern der Intensität wird dem menschlichen Auge nun eine gemischte Farbe vorgetäuscht. Fabian Wetzel Seite 7 von 17 2 Schaltplan 2.1 Allgemeines Abbildung 2: Hauptschaltplan Die eigentliche Schaltung besteht aus einigen wenigen Bauteilen. Diese lassen sich grob in die 4 Kategorien einteilen, die auf dem Foto zu sehen sind. Die LEDs sollten alle möglichst nah zusammen sein, so dass der Effekt der Farbmischung gut sichtbar wird. Der Kern der Schaltung ist ein Abbildung 3: Foto der Schaltung ATTiny2313 von ATMEL, welcher so geschaltet wird, dass er die 4 LEDs an- und abschalten kann. Praktische Tests hatten gezeigt, dass die Farben blau und Grün dominanter waren als Rot. Deshalb gibt es zwei rote LEDs, so wirken die entstehenden Farben natürlicher. Nachfolgend werden die Einzelheiten der Schaltung und der verwendeten Bauteile erläutert. Fabian Wetzel Seite 8 von 17 2.2 Spannungsregelung mit 7805 Abbildung 4: Schaltplan der Spannungsversorgung Die Aufgabe der Spannungsregelung ist es, stabilisierte 5V Versorgungsspannung bereit zu stellen für die restliche Schaltung. Die 9-12 V Eingangsspannung kommen von einem handelsüblichen Steckernetzteil. Man hätte natürlich auch einen Transformator und Gleichrichter mit in meine Schaltung integrieren können, habe dies aber aus Gründen des Aufwandes und vor allem der Sicherheit nicht getan. Das Arbeiten mit Netzspannung ist lebensgefährlich! Das verwendete Steckernetzteil hat am Ausgang eine Spannung von 12V und einen maximalen Strom von 1,25A. Die Ungefährlichkeit dieser Spannung war ausschlaggebend für die Auswahl dieser Variante. Man könnte auch ein Labornetzgerät verwenden, welches aber auch nicht gerade günstig sein muss. Wichtig ist, dass das Steckernetzteil mindestens etwa 8 V liefert. Der Anschluss der Eingangsspannung erfolgt auf dem Schaltplan links. Als erstes fließt der Strom durch eine Diode, welche dem Zweck dient, dass die ganze Schaltung nicht verpolt werden kann. Das wichtigste Bauteil in der Spannungsversorgung ist der LM7805. Dieser integrierte Schaltkreis wandelt eine Spannung mit einem weiten Bereich (je nach Typ z.B. von 7 bis 42 V) in konstante 5V am Ausgang. Die Spannungsdifferenz zwischen Eingang und Ausgang wird einfach verheizt, so wird das Bauteil recht schnell warm. Meine Schaltung benötigt annähernd 100 mA (4x20 mA für die LEDs und 20 mA für den Microcontroller) und der LM7805 wird etwa handwarm. Wie auf dem Bild auch zu erkennen ist, ist er so konstruiert, dass Kühlkörper an ihm montiert werden können. Die so erzeugten stabilisierten 5V werden dann an die weitere Schaltung weiter gereicht. Fabian Wetzel Seite 9 von 17 2.3 LED Die LED ist ein spezielles Halbleiterbauelement. Fließt ein Strom durch die LED, so beginnt sie zu leuchten. Das ausgesendete Licht ist monochromatisch. Die gesamte Lichtenergie wird also in nur eine Wellenlänge umgesetzt. Es gibt sie in den verschiedensten Farben und Formen. Am weitesten verbreitet sind die Zylinder-artigen Bauformen mit einem Durchmesser von 5 oder auch 3 mm. Die Gehäuse sind dabei entweder klar oder in der entsprechenden Farbe gefärbt. Eine LED lässt wie normale Halbleiterdioden den Strom nur in eine Abbildung 5: Nahaufnahme einer LED Richtung durch, dabei haben sie einen festen Spannungsabfall in Durchlassrichtung. Um die LEDs nicht durch die Folgen von thermischer Überlastung zu zerstören, muss der Strom, der durch sie durch fließt, begrenzt werden. Dies wird durch einen Vorwiderstand geregelt, dessen Dimensionierung kurz nachfolgend an der grünen LED erläutert wird. Meine Schaltung arbeitet mit einer Versorgungsspannung von 5V. Die LED hat einen Spannungsabfall von 3,1 V. Nach dem Maschensatz fällt über dem Vorwiderstand eine Spannung von 5V - 3,1V = 1,9V ab. Der Strom soll auf 20 mA begrenzt werden. Von dem Widerstand sind jetzt der Spannungsabfall und der Strom bekannt, der durch ihn fließt. Mit dem ohmschen Gesetz kann nun der Widerstandswert ermittelt werden. R = U / I = 1,9V / 0,02 A = 95 Ohm. Da es Widerstände immer nur mit bestimmten Werten gibt, nimmt man in diesem Fall einen Widerstand mit 100 Ohm. Fabian Wetzel Seite 10 von 17 2.4 Microcontroller ATTiny2313 Der ATTiny2313 ist ein 8-Bit-RISC-Microcontroller von ATMEL. Nachfolgend werden kurz einige Eigenschaften des Microcontrollers genannt, so dass sich der Leser ein Bild der Leistungsfähigkeit machen kann. Detailliertes Wissen, was jede Eigenschaft bedeutet, kann z.B. mit Hilfe von Google oder Wikipedia erlangt werden, ist aber für den weiteren Anwenderbericht nicht nötig. Er unterstützt 120 Operationen, von denen die meisten in nur einem Takt erledigt werden können, was ein Merkmal der RISC-Prozessoren ist. Der Arbeitstakt geht bis 20 MHz. Neben 32x8 allgemeinen Registern hat er 2 kB Flash, 128 Byte EEPROM und 128 Byte SRAM. In dem Chip steckt also nicht nur ein reiner Prozessor sondern auch gleich Speicher für Programm und Daten. Dies erspart einem viel externe Beschaltung. Weiterhin bietet er einen 8-Bit und einen 16-Bit Timer, 4 PWM Kanäle 1 , einen Analog Komperator, einen Watchdog Timer und einen voll duplexen USART, um nur einige Merkmale zu nennen. Der Microcontroller kann mit einer Firmware bespielt werden und arbeitet diese dann wie ein gewöhnlicher Computer Schritt für Schritt ab. Zum Beschreiben des Speichers kann man den Microcontroller aus der Schaltung entfernen (er ist in einen Sockel gesteckt) und in speziellen Programmierschaltungen platzieren, dies ist aber sehr umständlich und verlängert den Programmieren - Testen - Kreislauf erheblich. Der Prozessor unterstützt daher auch ein ISP 2 Interface, mit dem man den Microcontroller direkt im System programmieren kann. Hierzu ist ein 10 poliger Sockel mit einigen Pins des Microcontrollers verbunden. Über diesen Sockel wird die Schaltung mit einer weiteren Schaltung verbunden, die wiederum mit dem RS232 Anschlusses eines PCs verbunden ist. Vom PC kommt das Programm, welches durch die Zwischenschaltung in den Zielschaltkreis geschrieben wird. Weitergehendes Wissen zu ISP erhält der interessierte Leser aus der Application Note 910 von ATMEL: http://www.atmel.com/dyn/resources/prod_documents/DOC0943.PDF. Der Controller hat 20 Pins, von denen 2 fest für die Spannungsversorgung genutzt werden. Die restlichen 18 können für Input/Output - Aufgaben benutzt werden oder verschiedene andere Dinge machen. So kann man über den Reset - Pin einen Neustart veranlassen, oder an XTAL1 und XTAL2 einen externen Quarz oder Quarzoszillator anschließen. Weitere Funktionen können auch hier dem Datenblatt entnommen werden. 1 2 Wurden für mein Projekt nicht verwendet, da der Autor PWM „von Hand“ erzeugen wollte. in-system programming Fabian Wetzel Seite 11 von 17 Ein Pin des ATTiny2313 kann 20 mA liefern und somit kann man pro Pin jeweils eine LED direkt betreiben, allerdings beträgt der maximal zulässige Ausgangsstrom aller Pins zusammen 60 mA, so war es nötig, die beiden roten LEDs durch einen Transistor zu schalten. 2.5 Kosten Nachfolgend sind die Preise der benutzten Baueile aufgelistet. Kabel und Lötzinn sind nicht enthalten. Weiterhin ist der Sockel für die ISP - Schnittstelle sowie das Programmierboard selbst und das Steckernetzteil nicht enthalten, da diese bei mehreren Projekten problemlos wieder verwendet werden können. Wie man sieht, haben alle verwendeten Teile sehr moderate Preise. Tabelle 1: Kosten der verwendeten Komponenten Bauteil Einzelpreis Menge Gesamtpreis ATTiny2313 1,42 € 1 1,42 € Diode 0,05 € 1 0,05 € Kondensator 100nF 0,12 € 3 0,36 € Kondensator 22µF 0,12 € 1 0,12 € LED 0,28 € 4 1,12 € LM7805 0,17 € 1 0,17 € Platine 0,87 € 1 0,87 € Quarz 0,44 € 1 0,44 € Sockel 0,05 € 1 0,05 € Transistor 0,03 € 1 0,03 € Wiederstand 0,08 € 6 0,48 € Summe: 21 5,11 € Auffallend ist, dass der ATTiny2313 sich kaum von den restlichen Bauteilen abhebt. Gerade das macht ihn für Hobbyanwendungen so interessant. Wichtig für Microcontroller ist auch, dass er in Mengen ab einer Einheit zu bekommen ist, was nur auf die wenigsten Microcontroller zutrifft. 3 PWM Es ist nun möglich, über den Microcontroller die LEDs selektiv an- oder auszuschalten, damit also sowohl die 3 Grundfarben, als auch die Mischfarben Gelb, Cyan und Magenta erzeugen. Weiß ist theoretisch auch schon möglich. Soweit hätte es sich aber auch noch mit Tastern umsetzen lassen können, wozu also den Microcontroller? Bevor man diese Frage beantworten kann, muss man sich überlegen, wie man Zwischentöne erzeugen will. Im Moment kann eine LED in unserem Schaltplan entweder Leuchten oder nicht Leuchten. Wollte man sie in der Helligkeit variieren, müsste man einen Weg suchen, den Strom, der durch sie fließt, zu begrenzen. Denn eine LED leuchtet nur noch halb so stark, wenn 10 mA an statt der 20 mA fließen, dafür müsste aber der Vorwiderstand dynamisch geregelt werden können, was in Digitaltechnik nicht trivial ist. Fabian Wetzel Seite 12 von 17 Man macht sich stattdessen die Trägheit des menschlichen Auges zu nutze. Wenn die LED sehr oft pro Sekunde an- und ausgeschaltet wird, nimmt das Auge die LED als dauerhaft leuchtend mit verminderter Leuchtkraft wahr. Wenn man jetzt noch die Zeiten, in der die LED an oder aus ist, verändert, kann man auch die empfundene Leuchtstärke manipulieren. t 80% 80% 20% 20% t Abbildung 6: Schema von Pulsweitenmodulation Hierbei nimmt man sich einen Zähler, der in regelmäßigen Zeitabständen um eins erhöht wird und bei seinem maximalen Wert wieder runter bis auf 0 verringert wird. In der Abbildung ist dies der grüne „Sägezahn“. Jetzt nimmt man eine zweite Variable, den Marker, der ein Maß für die Leuchtkraft darstellt. Geht unser Zähler beispielsweise bis 255 und soll unsere LED mit einer Helligkeit von 80 % leuchten, so bekommt unser Marker den Wert 255 * (1 - 0,8) = 51. Der Marker ist in der Abbildung rot gefärbt. So lange unser Zähler jetzt einen höheren Wert hat als unser Marker, muss die LED leuchten, ist der Zähler kleiner als der Marker, muss die LED aus sein. Die zweite Hälfte der Abbildung zeigt das Verhältnis von An zu Aus. Letztendlich muss man nur noch beachten, dass der Zähler schnell genug zählt, so dass es mindestens 25 „Sägezähne“ pro Sekunde ergibt. Fabian Wetzel Seite 13 von 17 4 Software 4.1 Allgemeines In diesem Kapitel soll es uns nun um die Software gehen, die auf den ATTiny2313 aufgespielt werden muss, dass mit den LEDs auch wirklich etwas passiert. Der Kern unserer kleinen Applikation ist hierbei die Implementation des PWM - Verfahrens. Es gibt aber keine Möglichkeit, von außen zu sagen, welche Farbe dargestellt werden soll, deshalb ist ein Weg nötig, dass sich der Microcontroller die Farben selbstständig aussucht und anzeigt. 4.2 Warum kein ASM? Assembler unterscheidet sich doch recht stark von den gewohnten Hochsprachen, die man vom PC kennt wie C/C++ oder Java. Deshalb wurde zur besseren Lesbarkeit C verwendet. Der von mir verwendete Compiler AVR-GCC übersetzt dabei zuerst den C-Quellcode in ein Assembler Äquivalent und diesen dann in die Maschinensprache des ATTiny2313. 4.3 C-Einrichtung Die Einrichtung einer Entwicklungsumgebung auf dem PC zum Erstellen von Firmware und das Finden eines Programms, was zu dem Programmierboard und zum verwendeten Microcontroller kompatibel ist, ist nicht ganz trivial und übersteigt den Umfang dieses Dokuments. Wer einen Anfangspunkt haben will, um sich selbst eine Entwicklungsumgebung einzurichten, dem sei folgender Link als Startpunkt empfohlen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial 4.4 C-Quellcode Außerhalb der Main-Funktion definiert der Quelltext eine Struktur, die die R/G/B-Werte einer Farbe aufnehmen kann. Dieses sind jeweils 8 Bit und haben damit eine Auflösung von 0 bis 255. Der verwendete Zähler für den Sägezahn geht ebenfalls bis 255, so können die Farbwerte der Kanäle gleich als Marker genutzt werden. Die Main-Funktion besteht hauptsächlich aus einer Endlosschleife, welche den Zähler immer wieder um eins erhöht oder erniedrigt und den logischen Wert der 3 Ausgänge ermittelt. Zum Schluss wird noch alle 2 vollständigen Sägezähne, die angezeigte Farbe einer Zielfarbe um einen Schritt angenähert und wenn diese mal erreicht ist, eine neue Zielfarbe durch Zufallswerte ermittelt. Fabian Wetzel Seite 14 von 17 #include <avr/io.h> #include <stdlib.h> //Farbstruktur typedef struct { uint8_t uint8_t uint8_t } farbe; mit den Helligkeitswerten für die 3 Kanäle g; r; b; //nähert den Ist-Wert um 1 an den Soll-Wert an inline uint8_t next(uint8_t ist, uint8_t soll) { if (ist < soll) { return ist + 1; } else if (ist > soll) { return ist - 1; } return soll; } int main(void) { /* Setzt das Richtungsregister des Ports B auf 0xff (alle Pins als Ausgang): */ DDRB = 0xff; //Der Zähler für den Sägezahn uint8_t counter = 0; //Dieser Zähler zählt die Sägezähne uint8_t longcounter = 0; //Mode sagt, ob gerade rauf oder runter gezählt wird int8_t mode = 1; //Die Farbe, die das Ziel ist farbe soll; soll.g = 0xFF; soll.r = 0xFF; soll.b = 0xFF; //Die farbe ist.g ist.r ist.b aktuell dargestellte Farbe ist; = 0x0; = 0x0; = 0x0; //Endlosschleife while (1) { //Sägezahn counter += mode; //Maximalwert erreicht? if (counter == 0xFF) { //jetzt wird wieder runter gezählt mode = -1; } //oder Minimum erreicht? else if (counter == 0) { //wieder hoch zählen mode = 1; //Wieder ein Sägezahn fertig longcounter += 1; } /* Jedes Bit in PORTB beschreibt den logischen Zustand eines Ausgangs */ //Schalten der LEDs je nach Marker und Zähler-Stand PORTB = (ist.g <= counter ? 1 : 0) //Grün ist Bit 0=>2^0=1 + (ist.r <= counter ? 2 : 0) //Rot ist Bit 1 =>2^1=2 Fabian Wetzel Seite 15 von 17 + (ist.b <= counter ? 4 : 0);//Blau ist Bit 2=>2^2=4 //Alle zwei Sägezähne if (longcounter==2) { //Den Zähler wieder zurücksetzen longcounter = 0; //ist dem soll annähern ist.r = next(ist.r, soll.r); ist.g = next(ist.g, soll.g); ist.b = next(ist.b, soll.b); //ist ist=soll? if(ist.r==soll.r && ist.g==soll.g && ist.b==soll.b) { //dann neues Soll wählen soll.r = rand(); soll.g = rand(); soll.b = rand(); } } } } Listing 1: Quellcode der Firmware für den ATTiny2313 Kompiliert belegt das Programm 796 Bytes, was etwa 40% unseres 2 kB Programmspeichers auf dem Microcontroller entspricht. Einen Großteil nimmt davon die Implementation von rand() ein, denn ohne diese wäre unser Programm kompiliert nur 324 Bytes (16 %) groß. Sollte der Platz also einmal eng werden, sollte die Optimierung bei rand() beginnen. Fabian Wetzel Seite 16 von 17 5 Zusammenfassung Zuerst schien es so, als ob es gar nicht funktioniert, denn wie auf dem ersten Bild zu sehen ist, verschwimmen die Farben bei einer einfachen Projektion an einer weißen Fläche nicht richtig. Um den gewünschten Effekt zu erzielen, wurde die ganze Schaltung in ein dünnes Zellstofftaschentuch eingewickelt. Dies sorgt für die nötige Diffusion, so dass der Betrachter eine Fläche mit einer Farbe wahrnimmt. Abbildung 7: Nicht vermischende Farben Zum Abschluss noch ein paar stimmige Bilder. Abbildung 8: Stimmige Bilder des Ergebnisses Fabian Wetzel Seite 17 von 17 Quellen Literaturquellen Datenblatt des ATTiny2313 von ATMEL (letzter Zugriff: 01.03.2006): http://www.atmel.com/dyn/resources/prod_documents/doc2543.pdf Bildquellen Alle nicht benannten Bilder wurden mit eigenen Mitteln erzeugt oder fotografiert. Abb. 1: http://de.wikipedia.org/wiki/Bild:AdditiveFarbmischung.png (01.03.2006) Abb. 5: http://de.wikipedia.org/wiki/Bild:Ledmrp.jpg (01.03.2006) Die Schaltpläne wurden mit der Open - Source (LGPL) Software TinyCad erzeugt.