Arduino am VGA-Monitor – Ergänzung

Viele Arduino-Projekte nutzen zur Anzeige von Informationen OLED- oder LC-Displays und manchmal sogar nur ein paar LEDs. Das Mikrocontrollerboard ist aber zu weit Höherem berufen und zaubert mühelos farbige Grafiken auf jeden VGA-Monitor.

vorlesen Druckansicht
Lesezeit: 4 Min.
Mehr Infos

In Make 1/18 erschien ab Seite 54 eine gekürzte Fassung des Artikels "Arduino am VGA-Monitor" aus dem Arduino-Sonderheft. Leider ließ die offensichtlich ein paar Fragen offen, die wir im Folgenden zu beantworten versuchen.


Frage: Im Artikel heißt es, dass die Spannung auf 0,7V limitiert werden muss. Dazu wurde einfach ein 470-Ohm-Widerstand vorgeschaltet. Heißt das, man geht von einem Strom von 10mA aus? Und wie wird denn nun ein analoges Signal aus den digitalen / PWM Ausgängen des Arduinos gemacht?

Antwort:VGA ist ein analoges Verfahren und wandelt verschiedene Spannungspegel in Farbwerte um. Die Farbe eines jeden Pixels wird aus den Farben Rot, Grün und Blau gemischt. Jeder der drei Farbanteile wird durch einen Spannungspegel von 0 bis 0,7 V repräsentiert. Dabei steht 0 V für komplett dunkel und 0,7 V steht für maximale Helligkeit. Stehen also alle drei Anteile bei 0 V, so bleibt das Pixel schwarz. Stehen alle bei 0,7 V, dann entsteht ein weißes Pixel und so weiter.

Damit ergibt sich für den Arduino bereits ein kleines Problem, denn wie soll er denn eine Spannung von 0,7 V erzeugen? Er hat zwar analoge Ausgänge, aber die sind nicht wirklich analog, sondern simulieren verschiedene Spannungen nur per Pulsweitenmodulation (PWM). Das reicht zum Dimmen von LEDs und zur Steuerung von Motoren, aber für ein stabiles VGA-Signal ist das Verfahren ungeeignet.

Deshalb verwendet die VGA-Schaltung einen Spannungsteiler, um die 0,7 V zu erzeugen. Ein Spannungsteiler wandelt eine Eingangsspannung mithilfe zweier Widerstände in eine andere, kleinere Ausgangsspannung. Allerdings sind die Pins D6 und D7 jeweils nur mit einem 470-Ohm-Widerstand verbunden. Wo kommt also der zweite Widerstand her?

Den liefert das VGA-Kabel, denn hier gibt es an den Farbanschlüssen immer einen 75-Ohm-Widerstand. Die Formel zur Spannungsteilung lautet:

Ausgangsspannung = Eingangsspannung • R2 / (R1 + R2)

In diesem Fall ergibt sich für die Ausgangsspannung der Wert:

5 • 75 / (470 + 75) ~ 0,688 V

Das liegt nah genug an 0,7 V und somit erfüllt der 470-Ohm-Widerstand voll und ganz seinen Zweck.

Mit den Widerständen können die Pins D6 und D7 jetzt entweder 0 V oder 0,7 V senden. Damit können sie den Farbanteil von Rot beziehungsweise Grün jeweils auf komplett dunkel oder absolut hell setzen. Daraus folgt, dass diese Schaltung nur Pixel in den Farben Schwarz (D6 = LOW, D7 = LOW), Rot (D6 = HIGH, D7 = LOW), Grün (D6 = LOW, D7 = HIGH) und Gelb (D6 = HIGH, D7 = HIGH) erzeugen kann. Gelb ergibt sich als Mischfarbe aus Rot und Grün.

Frage: Der Monitor erhält in der gezeigten Verdrahtung nur Signale für Rot und Grün. Was ist mit dem Anschluss für Blau?

Antwort: Tatsächlich mischt der Arduino in der beschriebenen Anwendung die Farben nur aus zwei Grundfarben und arbeitet deshalb nur mit einer Palette von vier Farben. Die gezeigte Schaltung erzeugt schwarz, rot, grün und gelb. Verwendet man statt des Grün-Pins 2 den Blau-Pin 3 besteht die Palette aus schwarz, rot, blau und violett. Dass nicht drei Farben genutzt werden, liegt schlicht am Speicher.

Es spricht nichts dagegen, die Pins D6 und D7 in beliebiger Weise mit den Rot-, Grün-, und Blau-Anschlüssen zu verbinden. Dabei dürfen D6 und D7 auch gleichzeitig am selben Farbanschluss hängen. Auf diese Weise lassen sich unterschiedliche Farbpaletten erzeugen, die jeweils aus vier Farben bestehen. Eine dieser Farben ist immer schwarz, denn der Fall, dass D6 und D7 auf 0 V liegen, tritt in jeder Konstellation auf. (pek)