← Kapitel 1: Programmieroberfläche | ↑ Übersicht | Kapitel 3: Blinklicht →

Kapitel 2: Ausgänge

Folgende Frage taucht sehr häufig auf: Kann man jeden einzelnen Pin als Ein- oder Ausgang definieren, genau so, wie man gerade möchte?

Und die Antwort ist sehr einfach: Ja, man kann. Naja, zumindest, so lange der Pin ein I/O-Pin ist. Man kann natürlich nicht zB den Versorgungsspannungspin als Eingang verwenden…

Betrachten wir dazu das Datenblatt des Atmega328P, in dem folgendes steht:

23 Programmable I/O Lines

Das bedeutet, dass wir bis zu 23 Pins zur Verfügung haben, die wir nach Belieben als Ein- oder Ausgänge definieren können. Bauteil- und routingbedingt stehen uns auf dem Gscheiduino allerdings nur 20 zur Verfügung (zwei Pins gehen etwa verloren, da dort ein Quarz angeschlossen ist).

Die Bezeichnung dieser Pins steht auf der Platine des Gscheiduino bzw kann hier nachgelesen werden.

Der Grundzustand jedes I/O-Pins beim Einschalten lautet „Eingang“, dies dient zur Sicherheit von eventuell angeschlossener Hardware, die durch einen aktiven Ausgang beschädigt werden könnte.

Damit wir einen Pin also als Ausgang verwenden können, müssen wir dem Controller mitteilen, dass wir das gerne tun würden. Dies geschieht sehr einfach durch folgenden Befehl:

pinMode(PIN, OUTPUT);

Was wir da jetzt wo hinschreiben müssen, lernen wir mit diesem konkreten Beispiel:

LED

Wir stecken einen 120-R-Widerstand in die Kontakte D3 und G3. Eine rote LED stecken wir wie folgt auf das Breadboard: Plus auf I3, Minus auf I4.

Die Polarität der LED kann man hier nachlesen

Danach verbinden wir A3 mit Pin13 des Gscheiduino und F4 mit GND.

Dadurch erhalten wir folgenden Schaltplan:

Schaltung LED

Wenn Pin13 also Spannung liefert, leuchtet die LED, wenn Pin13 keine Spannung liefert, ist die LED aus.

Wir müssen also wie oben beschrieben, Pin13 als Ausgang definieren:

pinMode(13, OUTPUT);

Nun passiert erst einmal gar nichts. Standardmäßig hat nämlich jeder Pin ab Definition den Pegel 0.

Ob das Beinchen jetzt Spannung liefert oder nicht geschieht wie folgt:

digitalWrite(PIN, STATUS);

STATUS kann die Werte HIGH (Der Pin liefert Spannung) oder LOW (Der Pin liegt auf GND) annehmen.

Falls wir also die LED einschalten möchten, lautet das konkret für unseren Fall:

pinMode(13, OUTPUT);
digitalWrite(13, HIGH);

Sobald wir Pin13 als Ausgang definiert haben, merkt er sich das und bleibt so lange ein Ausgang, bis wir daran etwas ändern. Es ist also vollkommen ausreichend, wenn wir ganz am Anfang definieren, ob ein Pin Ein- oder Ausgang ist. Geschickterweise geschieht dies in der setup()-Routine des Programms.

Das gesamte Programm für unser LED-Beispiel sieht dann also so aus:

kapitel02_led-an.ino
void setup()
{
  pinMode(13, OUTPUT);  // Pin13 als Ausgang definieren
}
 
void loop() 
{
  digitalWrite(13, HIGH); // Pin13 "einschalten"
}

Soll die LED nicht leuchten, sieht das Programm so aus:

kapitel02_led-aus.ino
void setup()
{
  pinMode(13, OUTPUT);  // Pin13 als Ausgang definieren
}
 
void loop() 
{
  digitalWrite(13, LOW); // Pin13 "einschalten"
}

Wir wählen nun „Gscheiduino M328P“ als Board in der Arduino-Oberfläche aus:

Auswahl der Hardware

Sollte diese Auswahl nicht zur Verfügung stehen, wird hier beschrieben, wie man sie erhält.

Wir kopieren jetzt den Code, der die LED einschaltet komplett in die Oberfläche:

Code einfügen

Nun stecken wir den Gscheiduino mit einem USB-AB-Kabel an den PC und wählen den richtigen COM-Port aus:

COM-Port auswählen

Die Nummer des Ports kann natürlich vom Beispiel abweichen, in der Regel wird aber nur das richtige Board angezeigt.

Wie hier beschrieben, kann der Code nun durch einen Klick auf den Pfeil übersetzt und auf den Controller gespielt werden.

Nachdem dieser Schritt abgeschlossen ist, beginnt die LED zu leuchten.

Ja, zugegebenermaßen leuchtet die LED. Das war's dann auch schon. Das einzige Spannende an der Geschichte ist die Spannung, die an der LED anliegt, ansonsten passiert ja noch nicht sonderlich viel hier…

Das werden wir jetzt ändern, wir lernen nämlich im nächsten Kapitel, wie wir die LED blinken lassen.