[[uc-welt:gscheiduino:07-fussgaenger|← Kapitel 7: Fußgängerampel]] | [[uc-welt:gscheiduino:00-uebersicht|↑ Übersicht]] | [[uc-welt:gscheiduino:09-schwellwert|Kapitel 9: Schwellwertschalter →]] ====== Kapitel 8: Analoge Eingänge ====== ===== Theorie ===== 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. ===== Praxis ===== 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 {{:uc-welt:gscheiduino:gscheiduino_breadboard_kap8-adc.png?direct&300|Aufbau ADC}} Das entspricht folgender Schaltung: {{:uc-welt:gscheiduino:008-adc-poti.png?direct&150|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. ===== Abfrage der Analogwerte ===== 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 ===== IF-Operation ===== In [[uc-welt:gscheiduino:06-treppenhaus|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 [[uc-welt:gscheiduino:06-treppenhaus|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: [[uc-welt:gscheiduino:09-schwellwert|Kapitel 9: Schwellwertschalter]]