Datenpin als Eingang

Belastbarkeit von Ein- & Ausgängen

Ein- und Ausgänge elektronischer Bauteile sind gegenüber Belastung mit zu hohen Spannungen ebenso empfindlich wie gegenüber zu hohen Belastungen durch Ströme. Digitale wie analoge Pins sollten niemals mit mehr als 5 V oder mit weniger als 0 V Spannung in Verbindung gebracht werden. Bei Boards, die nicht mit 5 V sondern mit 3 V Spannung betrieben werden liegen diese Grenzen bei 3 respektive 9 V. Die Betriebsspannung gibt also stets die maximale Spannung vor. Gegenüber Strömen sind Mikrocontrollerboards sehr unterschiedlich tolerant. Während ein einzelner Pin mit 20 mA belastet werden darf gibt es eine summarische Belastung aller Pins, die eine vom jeweiligen Hersteller abhängige Belastung nicht überschreiten darf. Herstellerspezifisch ist auch die für die Spannungsversorgung geltende Grenze von Spannung und Strom. Die Spannung sollte über 7 V und unter 14 V bei Arduino-Originalen unter 20 V liegen. Die Strombelastbarkeit des Arduino-UNO-Bords beträgt etwa 500 mA. Damit ist die Gesamtbelastbarkeit und nicht die Belastbarkeit der aigitalen Ausgangspins gemeint, denn das Board-Design stellt ebenfalls einen 5 V-Pin zur Versorgung von Bausteinen mit Spannung / Strom zur Verfügung. Andere Boards sind durch unterschiedliche Grenzen der Belastbarkeit charakterisiert.

Eingangssignale an unbeschalteten Eingängen

Jeder (als Eingang genutzte Pin) besitzt ein Potenzial – immer! Dies gilt für beschaltete, also mit anderen Bauteilen verbundene Eingänge, wie für unbeschaltete, offene Eingänge. Demzufolge misst ein Programm stets „irgendeine“ Spannung (ein Potenzial), wenn es als Eingang geschaltete Pins abfragt. Durch Verbindung des als Eingang geschalteten Pins mit der Bezugsmasse (GND) erhält dieser das Potenzial der Bezugsmasse und damit eine Wert, der einer logischen „0“ (Null) entspricht. Eine Verbindung des Pins mit der maximal zulässigen Spannung – im Fall des Arduino UNO sind das 5 V – führt bei Abfrage des Eingangswertes des Pins zu einer logischen „1“ (Eins).

Übergangswiderstände und Leitungswiderstände führen zu Spannungsabfall am jeweiligen Widerstand. In der Folge liegt am Eingang des abgefragten Pins ein geringerer Betrag an als die ursprüngliche Eingansspannung von 5 V. Da die zur Erkennung und Änderung des Potenzials benötigten Ströme sehr gerung sind/sein können, kann die An- oder Abwesenheit einer geringen Anzahl von Ladungen schon zu entscheidenden Veränderungen des Potenzials beitragen. Im Sinne eindeutig zu erfassender, im Sinne der Datenübertragung somit wirksamer Potenzial kommen für den jeweiligen Prozessor nur Potenziale innerhalb enger Grenzen in Frage. Diese Potenzialgrenzen werden durch gültige „Logikpegel“ beschrieben.

Logikpegel – im Sinne der Datenverarbeitung wirksame logische Potenziale

Mit dem Wissen um mögliche Übertragungsverluste sind für Datenausgänge und Dateneingänge etwas unterschiedliche Logikpegel definiert [1].

DigSig2.png
Von Grabert, CC BY-SA 3.0, Link

Zur Erfassung eindeutiger Übergangszeiten von Pegeln beim Wechsel von einem Zustand in den anderen, bedarf es zudem einer Mindestgeschwindigkeit, damit Pegelzeiten in der undefinierten Zone auf eine Zeitspanne reduziert bleiben, die der jeweiligen Definition in beispielsweise der Kommunikation entsprechen. Kapazitive und induktive Elemente führen zu einer Verzerrung der Pegelform und sind darum zu minimieren.

Bei langsamen Vorgängen wie der Abfrage eines Logikpegels in Folge der Betätigung eines Sensors / Tasters spielen Übergangszeiten ebenfalls eine Rolle. In jedem Fall muss ein Pegel in einem festen Zustand für eine mindeste Zeit verharren, wenn er diesen Zustand charakterisieren soll. Zudem sollte das Verhalten von vorgeblich gleichartigen Eingangspins einander entsprechen und reproduzierbar sein.

Signale an digitalen und analogen Eingangspins

Kommunikation zwischen

  • Controller und Sensoren,
  • Bauteilen,
  • Controller und Peripherie wie Drucker und Speichermedien

basiert auf festgelegten und unterscheidbaren Signalpegeln. „Fest“ kann eine sehr relative Angelegenheit sein, wie ein einfaches Beispiel zeigt.

Benötigt wird ein Mikrocontrollersystem zum Beispiel Arduino UNO. Es verfügt über eine Anzahl digitaler Kontakte, die sowohl als Eingang wie auch als Ausgang initialisieert werden können sowie analogen Eingängen. Zusätzlich benötigen wir für dieses Experiment ein Steckbrett und 3 Steckbrücken.

Das Beispiel-Programm basiert auf modifizierten Versionen der Beispiel-Sketche DigitalReadSerial.ino und AnalogReadSerial.ino.

/*
 * DigitalInput - Testprogramm
 * Diese Programm zeigt das Eergebnis eines
 * frei laufenden digitalen bzw. analogen Eingangs
 * und bestimmt den elektromagnetischen Hintergrund
 * Es kombiniert die in der Arduino-IDE enthaltenen
 * Beispiel-Programme DigitalInputPullup und 
 * AnalogInOutSerial
 * Die Ergebnisse zeigt der SerialMonitor
 * Digitalpin 2 bzw. andere nach Wahl
 * AnalogEingang 0
 * Version 0.89 11.05.2020 S. Schlote
 */

int i_digiPin = 5;
int i_ana_Pin = 0;

void setup() {
  Serial.begin(9600);
  pinMode(i_digiPin, INPUT);
//  pinMode(i_digiPin, INPUT_PULLUP);  
}

void loop() {
  int i_digi_sensVal = digitalRead(i_digiPin);
  Serial.print("DigiPin ");
  Serial.print(i_digiPin);
  Serial.print(": ");
  Serial.print(i_digi_sensVal);
  int i_ana_sensVal = analogRead(i_ana_Pin);
  Serial.print(" AnaPin ");
  Serial.print(i_ana_Pin);
  Serial.print(": ");
  Serial.println(i_ana_sensVal);
  delay(2);
}

Die folgende Abbildung zeigt einen Arduino UNO, dessen 5 V-Pin mit der rot markierten Spur von Kontakten und dessen Masse-Pin (GND) mit der blauen Spur von Kontakten verbunden ist. Im Eingang des Datenpins 5 steckt eine Steckbrücke mit freiem Ende. Auch der Analog-Pin 0 kann mit einer derartigen Steckbrücke versehen werden.

 

Die Verbindungen zum Steckbrett sind für den ersten Ansatz nicht unbedingt erforderlich, aber erleichtern den zweiten Schritt. Die Ergebnisse der Potenzialbestimmungen zeigt der serielle Monitor an, dessen Daten sich für eine spätere Auswertung in eine Tabelle kopieren lassen. Die Verwendung anderer Daten-Pins als die Nr. 5 bringen zum Teil gleiche und auch sehr unterschiedliche Ergebnisse (siehe Verifikation).

Ganz im Unterschied zu dem vorangegangenen Aufbau verhält sich der im seriellen Monitor angezeigte Signalpegeln, wenn die Drahtbrücke des als Signaleingang verwendeten Pins mit der Masseleitung (GND)

 

 

bzw. 5 V-Leitung des Steckbretts (oder des Arduino) verbunden wird.

 

Für weitere Ausbauten kann es nützlich sein, festzustellen, welche Kontakte auf dem derartig angeschlossenen Steckbrett welches Potenzial besitzen. Die Kenntnis der zuvor gewonnenen Ergebnisse hilft Fehlinterpretationen zu vermeiden.

Verwendung von internen und externen Pullup- oder Pulldown-Widerständen (inklusive Erklärung als Spannungsteiler)

Verifikation:

Was zeigen die im seriellen Monitor angezeigten Pegel für den gewählten und auf Eingang geschalteten, digitalen Pin an, wenn Pin 2; Pin 5 bzw. Pin 13 ausgewählt wird? Gibt es einen auf den ersten Blick erkennbaren Zusammenhang (Plausibilität) für das unterschiedlicher Verhalten?

Welchen Einfluss haben die Art (UNO, NANO, MEGA) und Board-Hersteller auf das zuvor ermittelte Ergebnis?

Welche Variationen Ergebnisse zeigen sich, wenn die Steckbrücke eines Eingangspins mit 5 V bzw. GND verbunden wird? Wie verändert sich dieses Verhalten, wenn wischen die Steckbrücke und die Bezugspotenziale ein 10k Widerstand geschaltet wird? Bei der Auswahl eines geeigneten Widerstands hilft der Widerstandskakulator.

Welche charakteristischen Merkmale zeigt eine größere Anzahl (50 bis 100) von Messwerten eines analogen Eingangs, wenn diese grafisch dargestellt werden? Was ändert sich, wenn keine Steckbrücke verwendet wird gegenüber der mit einer langen Steckbrücke durchgeführten Untersuchung?

Schlussfolgerung:

Freie, nicht festgelegte Eingangspins neigen zum Schwingen und zur Anzeige unplausibler Werte. Die Art der Werte und deren Variabilität variiert zum Teil mit der Bauform des Boards, dem verwendeten Eingangspin …. und der Umgebung.

  • Nicht festgelegte Potenziale entstehen durch:
  • Leitungsbruch,
  • nicht angeschlossene Geräte / Baugruppen,
  • fehlende Abschlusswiderstände
  • ….

(Gegen-)Maßnahmen

Verwendung einer leitenden Verbindung über einen hochohmigen Widerstand, die für ein definiertes, festes Bezugspotenzial der Drahtbrücke / des unverbundenen Anschlusses sorgt.

Wird ein Eingangspin über einen Widerstand von 10kΩ mit der Masse (GND) verbunden, fließt für den Fall, dass sich ein elektrisches Potenzial auf diesen Pin „verirren“ sollte, dieses sogleich über den Widerstand zur Masse hin ab. Der Eingang bleibt bei 0 V. Wird der Eingang mit einem Leiter verbunden, der eine Spannung von um 5 V besitzt (siehe Logikpegel) und vermag dieses so angeschlossene Potenzial einige mA Strom zu liefern, so dominiert dieser Einfluss, denn über den Widerstand fließt hierbei ein Strom von nur 500µA ab (Spannungsteiler).

Ein sehr gutes Beispiel für diesen Anwendungsfall gibt das „Button“-Tutorial zum gleichnamigen Beispielprogramm der Arduino-IDE. Da das Potenzial des Eingangs hier auf 0 V (GND) also nach „unten“ gezogen wird, spricht man von einem Pulldown. Der Widerstand, der dies leistet wird als Pulldown-Widerstand bezeichnet. Zieht der Widerstand das Potenzial auf den logischen „High“-Pegel, nennt man ihn Pullup-Widerstand [2].

In den ATmega328, das Herz des Arduino UNOR3 sind softwareprogrammierbare Pullup-Widerstände integriert. Hier genügt der Aufruf der Funktion „pinMode(PinNr, INPUT_PULLUP)“ an Stelle von „pinMode(PinNr, INPUT)“ und ein Blick auf Digital Pins. Über eine softwareprogrammierte Pulldown-Option verfügen die Arduino-Boards im Gegensatz zu den ESP32 leider nicht.

Quellen:

[1] Logikpegel in der Wikipedia

[2] Pullup- und Pulldown-Widerstände

Weiterführender Stoff:

Mechanische Schalter und Taster zeigen ein oft unerwartetes Verhalten, „Prellen“ genannt (Bouncing), was über den Umgang mit den möglicherweise freien Enden und darauf einwirkenden Potenzialen hinaus, einer Behandlung bedarf.

Ist eine unverzügliche Reaktion erforderlich, so müssen Routinen gefunden werden, die eine Unterbrechung des aktuellen Handlungsstrangs und dessen Fortsetzung zu einem späteren Zeitpunkt ermöglichen (Interrupt).

Das Thema „Signaleingänge“ ist demnach weiter zu vertiefen. Hierzu einige Verweise zur Einstimmung.

Was macht der Vollwasserschutz der Waschmaschine

Funduino Nr. 25 Der Interrupt-Befehl

Arduino-Referenz attachInterupt

Nick Gammon über Interrupts

Arduino Interrupts Tutorial

Using Interrupts