LED Cube/Die Elektronik verstehen: Unterschied zwischen den Versionen

Aus Wiki CCC Göttingen
Wechseln zu: Navigation, Suche
 
(15 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
under construction
+
{{LED Cube Series/de}}
 
+
{{Template:LED Cube Series}}
+
 
Diese Seite soll dir die Arbeitsweise des LED-Cubes vermitteln. Wir versuchen üblichen Elektronikslang zu vermeiden, um die Erklärungen besonders für Menschen verständlich zu machen, die sich nicht so sehr mit Elektronik auskennen. Hast Du hingegen Ahnung, wirf einfach einen Blick auf den Schaltplan und den Cube, diese sind nicht sehr komplex.
 
Diese Seite soll dir die Arbeitsweise des LED-Cubes vermitteln. Wir versuchen üblichen Elektronikslang zu vermeiden, um die Erklärungen besonders für Menschen verständlich zu machen, die sich nicht so sehr mit Elektronik auskennen. Hast Du hingegen Ahnung, wirf einfach einen Blick auf den Schaltplan und den Cube, diese sind nicht sehr komplex.
  
==The Cube Structure==
+
==Die Cubestruktur==
We will first explain the cube structure and then work our way to the USB connector. First of all, some basic understanding on how you work with LEDs.
+
Als erstes werden wir uns die Struktur des Cubes angucken und danach einen Blick auf die USB-Verbindung werfen. Zunächst folgen ein paar Grundlagen zur Arbeitsweise von LEDs.
  
LEDs are very handy and mostly nice-looking devices which is the reason we chose to create this cube kit. Usually, if you connect a LED to a battery, there is a characteristic of the LED you have to take into consideration. For batteries with very low voltage ratings, your LED will not emit light. If you slowly increase the voltage, for example by using different batteries, or, if you are more used to electronics, use a variable voltage source, you will see that at some voltage, current will start to flow through the LED and it lights up. This depends on the color (or the technology) of the LED. Red LEDs for example start to light up at about 1.5 V. However, in contrast to a light bulb, which will not get much brighter or draw much more current at higher voltages, the LED will! Thus, if you want to connect a LED to a commonly available voltage source with a fixed voltage, it is necessary to add a resistor to the circuit which is able to limit this current. So, if you want to connect an LED to a battery, the circuit will look somewhat like this:
+
LEDs sind diese hübschen leuchtenden Bauteile, wegen denen wir den Cubebausatz erstellt haben. Wenn Du LEDs mit einer Batterie verbindest musst Du normalerweise die Charakteristiken der LED mitbeachten. Batterien die nur geringe Spannungen liefern werden deine LED nicht sehr hell zum leuchten bringen. Wenn Du langsam die anliegende Spannung an einer LED erhöhst, z.B. indem Du verschiedene Batterien verwendest oder (wenn Du etwas mehr von Elektronik verstehst) eine variable Spannungsquelle verwendest, wirst Du sehen, dass der Strom ab einem bestimmten Spannungswert anfängt zu fließen und die LED aufleuchtet. Der Punkt hängt von der Farbe (oder der Beschaffenheut) der LED ab. Rote LEDs beginnen zum Beispiel bei ungefähr 1.5 V an zu leuchten. Im Vergleich zu einer Glühlampe, die ab einem bestimmten Punkt nicht heller wird und nicht mehr Strom durch sie hindurchfließt, wird Stom und Helligkeit bei einer LED weiter zunehmen bis diese kaputt geht. Deshalb ist es wichtig, dass Du in dem Schaltkreis einen Widerstand einfügst, wenn Du eine LED mit einer gebräuchlichen Stromquelle mit festem Stromwert anschliessen willst. Wenn Du eine LED mit einer Batterie verbinden möchtest, sieht der Schaltplan also folgendermaßen aus:
  
 
[[File:cube-structure-01.png]]
 
[[File:cube-structure-01.png]]
  
Please notice that I have used two colors for the wires: black and blue. You can use these colors to find the same wires in future schematics.
+
Beachte bitte, dass ich zwei Farben für die Drähte verwendet habe: Schwarz und blau. Du kannst anhand dieser Farben die gleichen Drähte in künftigen Schaltplänen finden.
  
Now, we are not interested to always light up an LED, but we want to be able to switch them off and on to display different patterns on our cube. Thus we add a switch:
+
Nun möchten wir keine dauerhaft leuchtende LED haben, sondern dazu in der Lage sein diese ein- und auszuschalten, um verschiedene Muster auf dem Cube zu zeigen. Darum fügen wir einen Schalter hinzu:
  
 
[[File:cube-structure-02.png]]
 
[[File:cube-structure-02.png]]
  
With this circuit we can control the LED with the switch. If the switch is closed, the LED lights up. If it is opened, the LED is off. You may have wondered that you do not see this switch on your own LED cube: The switch is included in the microcontroller (the largest device on your board) and controlled by a program that is running on it. Thus you do not have to switch your LED off and on manually, but it is cone automatically.
+
Mit dieser Schaltung können wir die LED mit einem Schalter kontrollieren. Wenn der Schalter geschlossen ist, leuchtet die LED. Wenn er offen ist, ist die LED aus. Du wirst dich fragen, weshalb Du keinen Schalter auf deinem LED-Cube finden kannst: Der Schalter befindet sich im Mikrocontroller (das größte Bauteil auf der Platine) und wird von einem Programm kontrolliert, das auf diesem läuft. Dadurch brauchst Du die LED nicht manuell an- und auszuschalten, das wird automatisch passieren.
  
However, we are not nearly done. We do not have only one LED, we have 27 in a 3 * 3 * 3 cube! So, let's add further LEDs to our circuit, which will give us one plane of your cube:
+
Wir sind an dieser Stelle nichteinmal annährend fertig. Wir haben nicht nur eine LED, wir haben 27 in einem 3 * 3 * 3 Cube! Also lass uns mehr LEDs in unseren Schaltplan einfügen, so dass wir eine Ebene des Cubes erhalten:
  
 
[[File:cube-structure-03.png]]
 
[[File:cube-structure-03.png]]
  
This is quite a bit more complex. Please take some time and look at this diagram. You can clearly see that the "Switch-Resistor-LED" construct has simply been duplicated until we had nine of them. The battery is still only one - we can connect all of these constructs to the same battery. Notice especially that you can already recognize that this is one plane of your cube. The black wires are going downwards, the blue wire is used to connect the short pins of the LEDs together and is then going down separately, using only one wire. Using this pattern and our intelligent switches within our microcontroller we are already able to display two-dimensional patterns.
+
Dies ist ein bisschen komplexer als vorher. Nimm dir bitte etwas Zeit zum Betrachten des Diagramms. Du kannst feststellen, dass das "Schalter-Widerstand-LED"-Modul einfach dupliziert wurde, bis wir es neun mal hatten. Die Batterie ist in einfacher Ausführung geblieben - wir können alle diese Module an die gleiche Batterie anfügen. Du wirst jetzt schon feststellen können, dass es sich hier um eine Ebene des Cubes handelt. Die schwarzen Drähte führen runter, der blaue Draht wird dafür verwendet die kurzen Beine der LEDs zu verbinden und wird dann separat durch einen einzelnen Draht nach unten geführt. Mit dieser einen Ebene und unserem intelligenten Schalter in dem Microcontroller sind wir nun schon in der Lage zweidimensionale Muster anzuzeigen.
  
But, that's not enough! We need two additional planes. The first idea that comes to ones mind may be to again add two copies of that plane, leading to 27 LEDs, 27 Resistors and 27 Switches, and be done. However, this would be quite problematic: One would first of all require a device which has enough switches, is able to bear the current required by the LEDs to light up. Also, we would have a big mess of wires in our cube which will probably not be as nice at one would with their cube to be. So, we are now doing something which is called multiplexing. Don't be scared of this word, it is really easy and we will develop it step by step.
+
Aber das ist uns nicht genug! Wir brauchen zwei zusätzliche Ebenen. Die erste Idee die einem kommen könnte, wäre wieder zwei gleiche Ebenen hinzuzufügen, so dass der Schaltplan 27 LED, 27 Widerstände und 27 Schalter hat. Dann wären wir schnell fertig.
 +
Dies würde jedoch zu einem Problem führen: Als erstes bräuchten wir ein Bauteil, das uns genügend Schalter zur Verfügung stellt und in der Lage ist die momentan benötigten LEDs aufleuchten zu lassen. Dazu würden wir in unserem Cube ein riesiges Gewirr von Kabeln haben, war wahrscheinlich nicht so hübsch aussehen würde, wie ein einzelnes Kabel. Also werden wir etwas machen, das sich Multiplexen nennt. Lass dich nicht von diesem Wort abschrecken, der Vorgang ist wirklich einfach und wir werden ihn nun Schritt für Schritt nachvollziehen.
  
First, we simply add additional planes of LEDs, however we connect all LEDs together at the lead to the resistor. Thus, three LEDs share one resistor and one switch:
+
Als erstes werden wir einfach zwei weitere LED-Ebenen hinzufügen und alle LEDs an dem Ende mit den Widerständen verbinden. Also teilen sich jeweils drei LEDs einen Widerstand und einen Schalter:
  
 
[[File:cube-structure-04.png]]
 
[[File:cube-structure-04.png]]
  
But, you see a big, red question mark in this diagram: How do we connect the opposite wires of the LEDs? Well, we could for example do this:
+
Aber Du siehst hier ein großes rotes Fragezeichen indem Diagramm: Wie sollen wir die gegenüberliegenden Drähte der LEDs verbinden? Ein Beispiel wäre so:
  
 
[[File:cube-structure-05.png]]
 
[[File:cube-structure-05.png]]
  
Now, (as you may have already guessed) this is not the best idea. If we now close one switch, the three LEDs that share one resistor and switch will all light up. (Probably only, actually. Something else is possible, but I will not go into it in this document as this would only confuse you.) This is not what we want, as always complete columns would be on. We need a way to disable the other two LEDs if we only wish to switch on one at a time. And the solution is, you probably guessed it, we add some switches:
+
Wie Du vielleicht festgestellt hast, ist dies sicher nicht die beste Idee. Wenn wir jetzt einen Schalter schließen leuchten die drei LEDs die sich einen Widerstand teilen alle zusammen auf.
 +
''(Probably only, actually. Something else is possible, but I will not go into it in this document as this would only confuse you.)''
 +
Das ist natürlich nicht das, was wir wollen, denn dann würden immernur einzelne Spalten aufleuchten. Wir suchen einen Weg, um die beiden anderen LEDs auszuschalten, damit nur eine LED zur Zeit leuchtet. Vermutlich hast Du es schon erraten: Wir werden ein paar Schalter hinzufügen:
  
 
[[File:cube-structure-06.png]]
 
[[File:cube-structure-06.png]]
  
Now we are able to switch on a single LED, for example by switching on one blue and one black switch:
+
Nun sind wir in der Lage eine einzelne LED zu steuern, zum Beispiel indem wir einen blauen und einen schwarzen Schalter umlegen:
  
 
[[File:cube-structure-07.png]]
 
[[File:cube-structure-07.png]]
  
This is nice! We are able to control single LEDs! However, if you want to switch on multiple LEDs we will again hit a bump. If these multiple LEDs are on the same plane, we have no problem. However, if we want to enable LEDs on different planes that are not in the same column, we will experience an effect called ghosting: Two additional LEDs will light up. For example, if we close two switches at opposing edge LEDs we get two additional edge LEDs lighting up:
+
Ist das nicht toll?! Whooohooo!!! Aber wenn Du mehrere LEDs schalten möchtest, stehst Du wieder vor einem Dilemma. Wenn sich diese LEDs auf der gleichen Ebene befinden, haben wir kein Problem. Sind sie jedoch auf verschiedenen Ebenen und nicht in der gleichen Spalte, lernen wir einen Effekt kennen, der ''ghosting'' heisst: Zwei zusätzliche LEDs werden aufleuchten.
 +
Schalten wir zum Beispiel zwei Schaltungen zu LEDs an, die an gegenüberliegenden Enden liegen, werden folgende zwei LEDs aufleuchten:
  
 
[[File:cube-structure-08.png]]
 
[[File:cube-structure-08.png]]
  
There is no way to fix this electrically - this is the price you have to pay for multiplexing. However, the cubes are still able to display any pattern you want, even two LEDs of different columns in different planes: The switches we are using are *really* fast, much faster than your eye. Thus the microcontroller will only enable one plane at a time and then show you the image on that plane. Then it will go on to the next plane and display this 2D image and so on. This is then done so fast that you are unable to see it and the cube seems to be illuminated completely all the time.
+
Es gibt keinen Weg dieses Problem auf elektronische Weise zu fixen - das ist der Preis, den Du fürs Multiplexen bezahlen musst. Die Cubes sind dennoch in der Lage jedes Muster anzuzeigen, das Du haben möchtest, auch wenn es verschiedene LEDs in verschiedenen Spalten und Ebenen beinhaltet: Die Schalter die wir benutzen sind *sehr* schnell, sehr viel schneller als deine Augen. So aktiviert der Microcontroller nur eine Ebene zur Zeit und zeigt dabei die zu dem Muster gehörigen LEDs an. Dann ist die nächste Ebene dran und der 2D-Musterteil dieser Ebene wird angezeigt und so weiter. Das Ganze passiert so schnell, dass Du nicht in der Lage bist diesen Vorgang zu sehen und der Cube scheint die ganze Zeit im kompletten Muster zu leuchten.
  
Now, just for completeness: The blue switches are different from the black switches. You will see that the full current of one plane has to be handled by them. Depending on your resistors, this can be quite much for hobby electronics. Also, the microcontoller is not able to handle those currents. Thus, there is a second IC on the board, called "ULN2003". This is simply an array of switches which are able to handle much more current. Thus, the circuit actually looks somewhat like this:
+
Nur zur Vollständigkeit: Die blauen Schalter sind von den Schwarzen verschieden. Bei genauerem Betrachten siehst Du, dass sie den kompletten Strom einer Ebene aushalten müssen. Abhängig von den Widerständen kann dieser für Hobbyelektroniker sehr hoch werden. Der Microcontroller ist auch nicht in der Lage mit diesen Strömen umzugehen. Dafür ist ein zweiter IC auf dem Board, der "ULN2003". Das ist ein einfaches Array aus Schaltern, die in der Lage sind die hohen Stöme auszuhalten. Nun sieht der Schaltplan folgendermaßen aus:
  
 
[[File:cube-structure-09.png]]
 
[[File:cube-structure-09.png]]
  
==The Microcontoller and Its Periphery==
+
==Der Microcontoller und seine Peripherie==
 
[[File:Ucper-01.png|thumb|415px]]
 
[[File:Ucper-01.png|thumb|415px]]
There is not as much to understand about the microcontroller than about the cube. However, there are some things we can show you:
+
An dem Microcontroller gibt es nicht viel mehr zu verstehen, als an dem restlichen Cube. Es gibt einige Sachen die wir dir erklären wollen:
===The Oscillator===
+
===Der Oszillator===
The microcontroller is a synchronous device - and as such it requires a clock. What synchronous means, is actually fairly irrelevant, but implied by the word: Everything happens synchronously - at the same time. This is the reason this clock is required - as a signal when "things" should happen.
+
Der Microcontroller ist ein synchones Bauteil und als solches benötigt es einen Taktgeber. Was synchron bedeutet ist zur Zeit fast irrelevant, ausßer dass dieses Wort impliziert, dass alles synchron, also zur gleichen Zeit, passiert. Das ist der Grund, weshalb dieser Taktgeber benötigt wird, er gibt die Signale, wann etwas passieren soll.
  
The clock for the microcontroller is provided by a crystal. To see how such a crystal works, have a look at [http://www.youtube.com/watch?v=1pM6uD8nePo]. The microcontroller basically excites a device like a tuning fork which then gives it a fairly accurate frequency. (There is much more behind that, but let's leave it at that.) It may be interesting to note that the fork is oscillating at 16 MHz, that are sixteen million oscillations per second.
+
Dieser Taktgeberjob wird für den Microcontroller von einem Kristall übernommen. Um zu sehen wie ein solcher Kristall funktioniert, schau dir [http://www.youtube.com/watch?v=1pM6uD8nePo] an. Der Microcontroller versetzt ein Bauteil in Schwingung, wie eine Stimmgabel, um ihm eine bestimmte Frequenz zu geben. (Dahinter steckt noch einiges mehr, aber lasst es uns dabei belassen.) Es ist vielleicht interessant zu wissen, dass die Stimmgabel bei 16 MHz schwingt, das sind sechtzehnmillionen Schwingungen pro Sekunde.
  
===Decoupling Capacitors===
+
===Entkoppelte Kondensatoren===
On each side of the microcontroller, you find a 100 nF capacitor. The reason for these capacitors also has to do with the synchronousity of the microcontroller: As everything happens at the same time, the energy required at that time is really large compared to the average energy consumption of the microcontroller. Supplying this energy via the long USB cable would not work very good due to many reasons. (To name three: Resistance and Inductance of the USB line and the limited speed of light.) Thus these two capacitors are used to store some energy, which is available when required, directly at the microcontroller.
+
Auf jeder Seite des Microcontrollers kanns Du einen 100 nF Kondensator finden. Der Grund weshalb diese Kondensatoren dort sind, hat auch mit der Synchonität des Microcontrollers zu tun: Dadurch dass alles zum gleichen Zeitpunkt passiert ist die Energie die zu dieser Zeit gebraucht wird sehr hoch im Vergleich zum durchschnittlichen Energieverbrauch des Microcontrollers. Diese Energie durch das lange USB-Kabel bereitzustellen würde aus vielen Gründen nicht so gut funktionieren. (Um drei zu nennen: Widerstand, Induktion des USB-Kabels und die limitierte Geschwindigkeit des Lichtes.) Die beiden Kondensatoren sind dafür da, um dieses Problem zu lösen. Sie speichern etwas Energie, die dann direkt am Microcontroller zur Verfügung steht, sobald sie benötigt wird.
  
===Programming Header and Reset Resistor===
+
===Programmierstecker und Resetwiderstand===
You have probably noticed the big unpopulated 2 * 5 pin area on your board with an adjacent 10 kOhm resistor. This header can be used to upload new programs (which you can also do via USB) to the microcontroller or connect additional devices to it, like a bigger memory, for example
+
Vielleicht sind dir die großen unbestückten 2 * 5 Pinreihen auf deinem Board aufgefallen, die einen adjazenten 10 kOhm Widerstand haben. Diese Steckerreihen können dafür benutzt werden neue Programme auf den Microcontroller zu flashen (dies kann auch per USB geschehen), oder zusätzliche Dinge an den Cube anzuschliessen, wie zum Beispiel größeren Speicher.
  
The adjacent resistor is called "reset pullup". In normal operation of the microcontroller it will keep the reset pin at "logic high", which is the positive supply voltage. If the reset pin would actually go to "logic low", which is at a much lower voltage, the microcontroller would stop its operation until the pin assumes a "logic high" status.
+
Der adjazente Widerstand wird "reset pullup" genannt. Im normalen Betrieb wird er Microcontroller den Resetpin auf "logisch high" halten, was der positiven Versorgungsspannung entspricht. Wenn der Resetpin auf "logisch low" gezogen wird, was einer sehr viel niedrigeren Spannung entspricht, hört der Microcontroller mit seinen Operationen auf, bis an dem Pin wieder high anliegt.
  
===Bootloader Jumper===
+
===Bootloaderjumper===
One very important part is of course the bootloader jumper, which tells the microcontroller to accept an update or to run the old software. It works very much like the reset pin. If at the time of power-on the jumper connects the reset pin to the positive supply voltage, it runs the program. If it connects to the negative supply voltage, the bootloader starts.
+
Ein sehr wichter Teil am Cube ist der Bootloaderjumper, der dem Microcontroller sagt ob er ein Update annehmen, oder mit der alten Software weiterlaufen soll. Dies funktioniert sehr ähnlich wie der Resetpin. Wenn der Jumper zu dem Zeitpunkt des Einschaltens mit dem Resetpin und der positiven Versorgungsspannung verbunden ist, wird das Programm ausgeführt. Wenn er mit der negativen Versorgungsspannung verbunden ist, startet der Bootloader.
  
===Serial Connector===
+
===Serieller Anschluss===
Near the USB sockey, you will find four adjacent pins which don't hold components. These pins are going directly to the microcontroller and can be used for other stuff. Especially interesting should be that you can very easily use this connector to connect to your PC via a USB UART cable.
+
In der Nähe des USB-Sockets befinden sich vier adjazente Pins, die keine Komponenten haben. Diese Pins gehen direkt zum Microcontroller und können für andere Dinge verwendet werden. Besonders interessant ist, dass es sehr einfach möglich ist diese Pins für eine Verbindung zum Computer via USB-UART-Kabel zu verwenden.
  
===Transistor Array===
+
===Transistorarray===
The aforementioned transistor array, which contains the "blue" switches for the planes is connected to three microcontroller pins. These three pins control which switch is currently closed.
+
Das Transistorarray wurde bereits erwähnt. Es enthält die blauen Schalter für die Ebenen und ist mit den Microcontrollerpins verbunden. Diese drei Pins kontrollieren welche Schalter zu einem Zeitpunkt geschlossen sind.
  
 
===USB===
 
===USB===
 
[[File:Ucper-02.png|thumb|300px]]
 
[[File:Ucper-02.png|thumb|300px]]
The USB part is more interesting. We are using the [http://www.obdev.at/products/vusb/index.html V-USB Stack], a very nice, open source USB stack for hobby projects. However, the USB hardware implementation is not much more than a hack. With our LED cube we have quite a problem here: To use the internal switches of the microcontoller, we have to operate it at 5 V. However, the USB data lines do not tolerate much more than 3.3 V. This is the reason for the two diodes directly behind the USB connector: They limit the voltage we get from the microcontroller to acceptable levels.
+
Der USB-Teil ist interessanter. Wir benutzen den [http://www.obdev.at/products/vusb/index.html V-USB Stack], einen sehr hübschen open source USB-Stack für Hobbyprojekte. Die USB-Hardwareimplementation ist nicht viel mehr als ein Hack. Mit unseren LED-Cubes haben wir hier immernoch ein Problem: Um die internen Schalter des Microcontrollers zu verwenden, müssen wir mit 5 V arbeiten. Die USB-Datenleitung tolleriert jedoch nicht viel mehr als 3.3 V. Das ist der Grund für die beiden Dioden direkt hinter dem USB-Anschluss: Sie limitieren die Spannung die wir vom Microcontroller bekommen auf ein akzeptables Level.
  
Then there are three resistors: Two times 68 Ohms are used for the voltage limiting and are "termination resistors". What this means is quite complex to explain, if you do not have some basic background in electronics. Maybe you remember an experiment about waves from your physics classes: If you lay a long rope on the ground and excite it, a wave will traverse this rope. When it reaches the end, it will come back to you! (see [http://www.youtube.com/watch?v=aVCqq5AkePI]) The same thing happens, if you tighten the end of the rope to a fixed object, but this time it is mirrored (see [http://www.youtube.com/watch?v=LTWHxZ6Jvjs]). If you could find something between a loose rope end and a fixed rope end, there will be no reflection. Transmission lines experience a similar behaviour as the rope: The 68 Ohm resistors prevent reflections.
+
Dann sind da noch drei Widerstände: Zwei Mal 68 Ohm werden für die Strombegrenzung gebraucht und sind Abschlusswiderstände.? Was das bedeutet ist schwer zu erklären, wenn Du noch keine Elektronikgrundkenntnisse hast. Vielleicht erinnerst Du dich an ein Experiment mit Wellen aus deinem Physikunterricht: Wenn ein langes Seil auf den Boden gelegt und in Schwingung versetzt wird, werden die Wellen das Seil entlanglaufen. Wenn sie das Ende des Seils erreichen, kommen sie zurück zu dir (siehe auch [http://www.youtube.com/watch?v=aVCqq5AkePI]). Es wird das Gleiche passieren, wenn Du die Enden des Seils an einem festen Objekt befestigst, aber dieses Mal verhält es sich spiegelverkehrt (siehe [http://www.youtube.com/watch?v=LTWHxZ6Jvjs]). Wenn Du etwas zwischen dem losen Seilende und dem festen Seilende finden kannst, wird es keine Reflexion geben. Übertragungsleitungen zeigen ein ähnliches Verhalten wie das Seil: Das 68 Ohm Widerstand verhindert Reflexionen.
  
At last there is one 1.5 kOhm resistor. Once a cube is connected to a USB port, one data line will automatically assume nearly the potential of the supply voltage. This is used to signal the USB host that there is a USB device connected on this port. Once the host and the device assume normal operation modes, this resistor has nearly no impact.
+
Als Letztes ist da noch ein 1.5 kOhm Widerstand. Wenn ein Cube mit einem USB-Port verbunden ist, wird eine der Datenleitungen automatisch das Potential der Versorgungsspannung annehmen. Das passiert, um dem USB-Host zu signalisieren, das ein USB-Gerät an dem Port angeschlossen ist. Sobald der Host und das angeschlossene Gerät den normalen Oerationsmodus annehmen, hat dieser Widerstand nahezu keine Bedeutung mehr.

Aktuelle Version vom 3. Mai 2012, 16:21 Uhr

LED Cube-Serie

Lc-front.jpg

Kapitel 1: Bauen

Teil 0: Voraussetzungen & Vorbereitung

Teil 1: PCB Lötanleitung

Teil 2: Cube Lötanleitung

Teil 3: Zusammensetzen und testen

Kapitel 2: Spielen

Benutzeranleitung

Eine Animation erstellen

Kapitel 3: Lernen

Die Elektronik verstehen

Eigene Programme

Diese Seite soll dir die Arbeitsweise des LED-Cubes vermitteln. Wir versuchen üblichen Elektronikslang zu vermeiden, um die Erklärungen besonders für Menschen verständlich zu machen, die sich nicht so sehr mit Elektronik auskennen. Hast Du hingegen Ahnung, wirf einfach einen Blick auf den Schaltplan und den Cube, diese sind nicht sehr komplex.

Die Cubestruktur

Als erstes werden wir uns die Struktur des Cubes angucken und danach einen Blick auf die USB-Verbindung werfen. Zunächst folgen ein paar Grundlagen zur Arbeitsweise von LEDs.

LEDs sind diese hübschen leuchtenden Bauteile, wegen denen wir den Cubebausatz erstellt haben. Wenn Du LEDs mit einer Batterie verbindest musst Du normalerweise die Charakteristiken der LED mitbeachten. Batterien die nur geringe Spannungen liefern werden deine LED nicht sehr hell zum leuchten bringen. Wenn Du langsam die anliegende Spannung an einer LED erhöhst, z.B. indem Du verschiedene Batterien verwendest oder (wenn Du etwas mehr von Elektronik verstehst) eine variable Spannungsquelle verwendest, wirst Du sehen, dass der Strom ab einem bestimmten Spannungswert anfängt zu fließen und die LED aufleuchtet. Der Punkt hängt von der Farbe (oder der Beschaffenheut) der LED ab. Rote LEDs beginnen zum Beispiel bei ungefähr 1.5 V an zu leuchten. Im Vergleich zu einer Glühlampe, die ab einem bestimmten Punkt nicht heller wird und nicht mehr Strom durch sie hindurchfließt, wird Stom und Helligkeit bei einer LED weiter zunehmen bis diese kaputt geht. Deshalb ist es wichtig, dass Du in dem Schaltkreis einen Widerstand einfügst, wenn Du eine LED mit einer gebräuchlichen Stromquelle mit festem Stromwert anschliessen willst. Wenn Du eine LED mit einer Batterie verbinden möchtest, sieht der Schaltplan also folgendermaßen aus:

Cube-structure-01.png

Beachte bitte, dass ich zwei Farben für die Drähte verwendet habe: Schwarz und blau. Du kannst anhand dieser Farben die gleichen Drähte in künftigen Schaltplänen finden.

Nun möchten wir keine dauerhaft leuchtende LED haben, sondern dazu in der Lage sein diese ein- und auszuschalten, um verschiedene Muster auf dem Cube zu zeigen. Darum fügen wir einen Schalter hinzu:

Cube-structure-02.png

Mit dieser Schaltung können wir die LED mit einem Schalter kontrollieren. Wenn der Schalter geschlossen ist, leuchtet die LED. Wenn er offen ist, ist die LED aus. Du wirst dich fragen, weshalb Du keinen Schalter auf deinem LED-Cube finden kannst: Der Schalter befindet sich im Mikrocontroller (das größte Bauteil auf der Platine) und wird von einem Programm kontrolliert, das auf diesem läuft. Dadurch brauchst Du die LED nicht manuell an- und auszuschalten, das wird automatisch passieren.

Wir sind an dieser Stelle nichteinmal annährend fertig. Wir haben nicht nur eine LED, wir haben 27 in einem 3 * 3 * 3 Cube! Also lass uns mehr LEDs in unseren Schaltplan einfügen, so dass wir eine Ebene des Cubes erhalten:

Cube-structure-03.png

Dies ist ein bisschen komplexer als vorher. Nimm dir bitte etwas Zeit zum Betrachten des Diagramms. Du kannst feststellen, dass das "Schalter-Widerstand-LED"-Modul einfach dupliziert wurde, bis wir es neun mal hatten. Die Batterie ist in einfacher Ausführung geblieben - wir können alle diese Module an die gleiche Batterie anfügen. Du wirst jetzt schon feststellen können, dass es sich hier um eine Ebene des Cubes handelt. Die schwarzen Drähte führen runter, der blaue Draht wird dafür verwendet die kurzen Beine der LEDs zu verbinden und wird dann separat durch einen einzelnen Draht nach unten geführt. Mit dieser einen Ebene und unserem intelligenten Schalter in dem Microcontroller sind wir nun schon in der Lage zweidimensionale Muster anzuzeigen.

Aber das ist uns nicht genug! Wir brauchen zwei zusätzliche Ebenen. Die erste Idee die einem kommen könnte, wäre wieder zwei gleiche Ebenen hinzuzufügen, so dass der Schaltplan 27 LED, 27 Widerstände und 27 Schalter hat. Dann wären wir schnell fertig. Dies würde jedoch zu einem Problem führen: Als erstes bräuchten wir ein Bauteil, das uns genügend Schalter zur Verfügung stellt und in der Lage ist die momentan benötigten LEDs aufleuchten zu lassen. Dazu würden wir in unserem Cube ein riesiges Gewirr von Kabeln haben, war wahrscheinlich nicht so hübsch aussehen würde, wie ein einzelnes Kabel. Also werden wir etwas machen, das sich Multiplexen nennt. Lass dich nicht von diesem Wort abschrecken, der Vorgang ist wirklich einfach und wir werden ihn nun Schritt für Schritt nachvollziehen.

Als erstes werden wir einfach zwei weitere LED-Ebenen hinzufügen und alle LEDs an dem Ende mit den Widerständen verbinden. Also teilen sich jeweils drei LEDs einen Widerstand und einen Schalter:

Cube-structure-04.png

Aber Du siehst hier ein großes rotes Fragezeichen indem Diagramm: Wie sollen wir die gegenüberliegenden Drähte der LEDs verbinden? Ein Beispiel wäre so:

Cube-structure-05.png

Wie Du vielleicht festgestellt hast, ist dies sicher nicht die beste Idee. Wenn wir jetzt einen Schalter schließen leuchten die drei LEDs die sich einen Widerstand teilen alle zusammen auf. (Probably only, actually. Something else is possible, but I will not go into it in this document as this would only confuse you.) Das ist natürlich nicht das, was wir wollen, denn dann würden immernur einzelne Spalten aufleuchten. Wir suchen einen Weg, um die beiden anderen LEDs auszuschalten, damit nur eine LED zur Zeit leuchtet. Vermutlich hast Du es schon erraten: Wir werden ein paar Schalter hinzufügen:

Cube-structure-06.png

Nun sind wir in der Lage eine einzelne LED zu steuern, zum Beispiel indem wir einen blauen und einen schwarzen Schalter umlegen:

Cube-structure-07.png

Ist das nicht toll?! Whooohooo!!! Aber wenn Du mehrere LEDs schalten möchtest, stehst Du wieder vor einem Dilemma. Wenn sich diese LEDs auf der gleichen Ebene befinden, haben wir kein Problem. Sind sie jedoch auf verschiedenen Ebenen und nicht in der gleichen Spalte, lernen wir einen Effekt kennen, der ghosting heisst: Zwei zusätzliche LEDs werden aufleuchten. Schalten wir zum Beispiel zwei Schaltungen zu LEDs an, die an gegenüberliegenden Enden liegen, werden folgende zwei LEDs aufleuchten:

Cube-structure-08.png

Es gibt keinen Weg dieses Problem auf elektronische Weise zu fixen - das ist der Preis, den Du fürs Multiplexen bezahlen musst. Die Cubes sind dennoch in der Lage jedes Muster anzuzeigen, das Du haben möchtest, auch wenn es verschiedene LEDs in verschiedenen Spalten und Ebenen beinhaltet: Die Schalter die wir benutzen sind *sehr* schnell, sehr viel schneller als deine Augen. So aktiviert der Microcontroller nur eine Ebene zur Zeit und zeigt dabei die zu dem Muster gehörigen LEDs an. Dann ist die nächste Ebene dran und der 2D-Musterteil dieser Ebene wird angezeigt und so weiter. Das Ganze passiert so schnell, dass Du nicht in der Lage bist diesen Vorgang zu sehen und der Cube scheint die ganze Zeit im kompletten Muster zu leuchten.

Nur zur Vollständigkeit: Die blauen Schalter sind von den Schwarzen verschieden. Bei genauerem Betrachten siehst Du, dass sie den kompletten Strom einer Ebene aushalten müssen. Abhängig von den Widerständen kann dieser für Hobbyelektroniker sehr hoch werden. Der Microcontroller ist auch nicht in der Lage mit diesen Strömen umzugehen. Dafür ist ein zweiter IC auf dem Board, der "ULN2003". Das ist ein einfaches Array aus Schaltern, die in der Lage sind die hohen Stöme auszuhalten. Nun sieht der Schaltplan folgendermaßen aus:

Cube-structure-09.png

Der Microcontoller und seine Peripherie

Ucper-01.png

An dem Microcontroller gibt es nicht viel mehr zu verstehen, als an dem restlichen Cube. Es gibt einige Sachen die wir dir erklären wollen:

Der Oszillator

Der Microcontroller ist ein synchones Bauteil und als solches benötigt es einen Taktgeber. Was synchron bedeutet ist zur Zeit fast irrelevant, ausßer dass dieses Wort impliziert, dass alles synchron, also zur gleichen Zeit, passiert. Das ist der Grund, weshalb dieser Taktgeber benötigt wird, er gibt die Signale, wann etwas passieren soll.

Dieser Taktgeberjob wird für den Microcontroller von einem Kristall übernommen. Um zu sehen wie ein solcher Kristall funktioniert, schau dir [1] an. Der Microcontroller versetzt ein Bauteil in Schwingung, wie eine Stimmgabel, um ihm eine bestimmte Frequenz zu geben. (Dahinter steckt noch einiges mehr, aber lasst es uns dabei belassen.) Es ist vielleicht interessant zu wissen, dass die Stimmgabel bei 16 MHz schwingt, das sind sechtzehnmillionen Schwingungen pro Sekunde.

Entkoppelte Kondensatoren

Auf jeder Seite des Microcontrollers kanns Du einen 100 nF Kondensator finden. Der Grund weshalb diese Kondensatoren dort sind, hat auch mit der Synchonität des Microcontrollers zu tun: Dadurch dass alles zum gleichen Zeitpunkt passiert ist die Energie die zu dieser Zeit gebraucht wird sehr hoch im Vergleich zum durchschnittlichen Energieverbrauch des Microcontrollers. Diese Energie durch das lange USB-Kabel bereitzustellen würde aus vielen Gründen nicht so gut funktionieren. (Um drei zu nennen: Widerstand, Induktion des USB-Kabels und die limitierte Geschwindigkeit des Lichtes.) Die beiden Kondensatoren sind dafür da, um dieses Problem zu lösen. Sie speichern etwas Energie, die dann direkt am Microcontroller zur Verfügung steht, sobald sie benötigt wird.

Programmierstecker und Resetwiderstand

Vielleicht sind dir die großen unbestückten 2 * 5 Pinreihen auf deinem Board aufgefallen, die einen adjazenten 10 kOhm Widerstand haben. Diese Steckerreihen können dafür benutzt werden neue Programme auf den Microcontroller zu flashen (dies kann auch per USB geschehen), oder zusätzliche Dinge an den Cube anzuschliessen, wie zum Beispiel größeren Speicher.

Der adjazente Widerstand wird "reset pullup" genannt. Im normalen Betrieb wird er Microcontroller den Resetpin auf "logisch high" halten, was der positiven Versorgungsspannung entspricht. Wenn der Resetpin auf "logisch low" gezogen wird, was einer sehr viel niedrigeren Spannung entspricht, hört der Microcontroller mit seinen Operationen auf, bis an dem Pin wieder high anliegt.

Bootloaderjumper

Ein sehr wichter Teil am Cube ist der Bootloaderjumper, der dem Microcontroller sagt ob er ein Update annehmen, oder mit der alten Software weiterlaufen soll. Dies funktioniert sehr ähnlich wie der Resetpin. Wenn der Jumper zu dem Zeitpunkt des Einschaltens mit dem Resetpin und der positiven Versorgungsspannung verbunden ist, wird das Programm ausgeführt. Wenn er mit der negativen Versorgungsspannung verbunden ist, startet der Bootloader.

Serieller Anschluss

In der Nähe des USB-Sockets befinden sich vier adjazente Pins, die keine Komponenten haben. Diese Pins gehen direkt zum Microcontroller und können für andere Dinge verwendet werden. Besonders interessant ist, dass es sehr einfach möglich ist diese Pins für eine Verbindung zum Computer via USB-UART-Kabel zu verwenden.

Transistorarray

Das Transistorarray wurde bereits erwähnt. Es enthält die blauen Schalter für die Ebenen und ist mit den Microcontrollerpins verbunden. Diese drei Pins kontrollieren welche Schalter zu einem Zeitpunkt geschlossen sind.

USB

Ucper-02.png

Der USB-Teil ist interessanter. Wir benutzen den V-USB Stack, einen sehr hübschen open source USB-Stack für Hobbyprojekte. Die USB-Hardwareimplementation ist nicht viel mehr als ein Hack. Mit unseren LED-Cubes haben wir hier immernoch ein Problem: Um die internen Schalter des Microcontrollers zu verwenden, müssen wir mit 5 V arbeiten. Die USB-Datenleitung tolleriert jedoch nicht viel mehr als 3.3 V. Das ist der Grund für die beiden Dioden direkt hinter dem USB-Anschluss: Sie limitieren die Spannung die wir vom Microcontroller bekommen auf ein akzeptables Level.

Dann sind da noch drei Widerstände: Zwei Mal 68 Ohm werden für die Strombegrenzung gebraucht und sind Abschlusswiderstände.? Was das bedeutet ist schwer zu erklären, wenn Du noch keine Elektronikgrundkenntnisse hast. Vielleicht erinnerst Du dich an ein Experiment mit Wellen aus deinem Physikunterricht: Wenn ein langes Seil auf den Boden gelegt und in Schwingung versetzt wird, werden die Wellen das Seil entlanglaufen. Wenn sie das Ende des Seils erreichen, kommen sie zurück zu dir (siehe auch [2]). Es wird das Gleiche passieren, wenn Du die Enden des Seils an einem festen Objekt befestigst, aber dieses Mal verhält es sich spiegelverkehrt (siehe [3]). Wenn Du etwas zwischen dem losen Seilende und dem festen Seilende finden kannst, wird es keine Reflexion geben. Übertragungsleitungen zeigen ein ähnliches Verhalten wie das Seil: Das 68 Ohm Widerstand verhindert Reflexionen.

Als Letztes ist da noch ein 1.5 kOhm Widerstand. Wenn ein Cube mit einem USB-Port verbunden ist, wird eine der Datenleitungen automatisch das Potential der Versorgungsspannung annehmen. Das passiert, um dem USB-Host zu signalisieren, das ein USB-Gerät an dem Port angeschlossen ist. Sobald der Host und das angeschlossene Gerät den normalen Oerationsmodus annehmen, hat dieser Widerstand nahezu keine Bedeutung mehr.