← Kapitel 7: Fußgängerampel | ↑ Übersicht | Kapitel 9: Schwellwertschalter →

Kapitel 8: Analoge Eingänge

Wie vorher gelernt haben digitale Eingänge genau zwei Zustände: HIGH und LOW.

Ein analoger Eingang hat (abhängig vom Controller) deutlich mehr Zustände. Im Fall des Atmega328P steht uns ein 10-bit Analog-Digital-Wandler zur Verfügung. Das bedeutet, dass der Spannungspegel am Eingangspin in 210 Werte unterteilt werden kann. Kurz am Taschenrechner eingetippt sind das also 1024 Werte.

Konkret bedeutet das folgendes:

  • Wenn am Pin 5V anliegen erhalten wir einen Wert von 1023 (Der Controller fängt bei 0 an zu zählen)
  • Wenn am Pin 0V anliegen erhalten wir einen Wert von 0
  • Wenn am Pin 2,5V anliegen erhalten wir einen Wert von 511

Wie genau wir diese Spannung messen können, kann einfach berechnet werden:

$ Auflösung = \dfrac{Maximale Spannung}{Genauigkeit} = \dfrac{5V}{1024} \approx 0,005 $

Ein Wert entspricht also einer Spannung von ca. 0,005V also 5mV.

Mit folgender Formel können wir nun berechnen, welche Werte uns erwarten. Das -1 kommt daher, dass der Mikrocontroller bei 0 anfängt und der Maximalwert 1023 beträgt.

$ Analogwandlerwert = \dfrac{Angelegte Spannung}{Auflösung}-1 = \dfrac{X Volt}{0,00488V}-1 $

Liegen also zB 2V an, erhalten wir einen Wert von 408.

Genug von diesen langweiligen Berechnungen. Wir starten direkt mit einem Beispiel. Den Aufbau aus unserer Fußgängerampel lassen wir unangetastet, noch ist genug Platz auf dem Breadboard.

Wir erweitern die Schaltung wie folgt:

  • Das Poti in folgende Pins stecken: E28, D29, E30
  • Ein rotes Kabel von A28 zur linken Spannungsversorgungsschiene
  • ein blaues Kabel von A30 zur rechten Masseschiene
  • ein graues Kabel von A29 zu Gscheiduino Pin A0

Aufbau ADC

Das entspricht folgender Schaltung:

Schaltung Poti

Wenn wir das Poti auf Anschlag im Uhrzeigersinn drehen liegen am mittleren Pin 5V an, auf Anschlag gegen den Uhrzeigersinn liegen 0V an, wir können also mit dem Poti einen beliebigen Wert zwischen 0V und 5V einstellen.

Für den Anfang drehen wir das Poti auf Anschlag gegen den Uhrzeigersinn, damit 0V anliegen.

Die Abfrage des Analogwertes erfolgt über einen einfachen Befehl:

analogRead(PIN);

Der Befehl ist ähnlich wie der bereits bekannte digitalRead, nur dass diesmal statt HIGH oder LOW ein Wert zurückgegeben wird. Der Rückgabewert besitzt den Typ int (Integer).

Konkret für unser Beispiel können wir den Pin wie folgt abfragen:

analogRead(A0);

Der Wert allein bringt uns aber vorerst nichts, daher lernen wir jetzt ersteinmal die

In Kapitel 6 haben wir gelernt, was eine Schleife ist. Nun lernen wir einen weiteren sehr wichtigen Operanden, den wir sehr häufig verwenden werden: Die If-Operation.

Die klassische Abfrage „Wenn irgendetwas so ist, mache folgendes“ taucht in fast jedem komplizierteren Praxisbeispiel auf. Codetechnisch können wir diese Abfrage so realisieren:

if(BEDINGUNG)
{
  #CODE#
}

BEDINGUNG ist wieder wie bei der Schleife zu verstehen. Wenn diese Bedingung true ist, wird der Code zwischen den geschweiften Klammern ausgeführt. Ist die Bedingung false, läuft das Programm unterhalb der Klammern weiter, #CODE# wird nicht ausgeführt. Als Vergleichsoperatoren lernen wir nun drei weitere kennen:

Operator Funktion
a == b Vergleicht ob a und b gleich groß sind (kennen wir von Kapitel 6)
a != b Vergleicht ob a und b unterschiedlich sind
a > b Überprüft, ob a größer b ist
a < b Überprüft, ob a kleiner b ist

Hier ein paar Beispiele:

Bedingung Ergebnis
1 != 2 true
1 > 2 false
42 < 45 true
12 < 12 false

Wir vertiefen unser Wissen im nächsten Kapitel:

Kapitel 9: Schwellwertschalter