Additive Farbmischung am Beispiel von LEDs Anwenderbericht

Werbung
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.
Herunterladen