Hardware
  • Registrieren

Beitragsseiten

GPIO als Eingang

640px 80486dx2 largeHaben wir unseren GPIO per Software als Eingang konfiguriert, hat er die Aufgabe die Pegel high und low eindeutig zu erkennen. Nun liegen ja in so einem Schaltkreis tausende von Bauteilen äußerst dicht zusammen und da ist es nicht unwahrscheinlich, das sich diese Bauteile gegenseitig beeinflussen. Ich habe mal zur Verdeutlichung das Bild (Quelle: Wikimedia) eines geöffneten Schaltkreises eingefügt. Man sieht sehr gut, wie dicht alles zusammenliegt und wie dünn die Drähtchen zu den äußeren Anschlüssen sind. Tatsächlich wird in der Praxis bei der Abfrage häufig an un- oder nicht korrekt beschalteten GPIOs ein wechselnder und damit undefinierbarer Pegel festgestellt. Um solchen unerwünschten Effekten entgegenzuwirken, kann man den GPIOs zu definierten Pegeln verhelfen. Die Methode nennt sich "pull" was aus dem englischen übersetzt "ziehen" heißt. Ziehen wir einen Pegel auf low ist es ein "Herunterziehen", im englischen "pulldown", auf high ein "Raufziehen" im englischen "pullup". Wie das technisch umgesetzt wird, schauen wir uns nun mal an.

 

Pullup und Pulldown

gpio low Garantiert auf low bekommen wir den GPIO, wenn wir ihn direkt mit der Masse (auch GND, "-", Erde, ...) verbinden. Der GPIO hat dann bei einer Abfrage mit einer beliebigen Software dauerhaft den Pegel low. Das kann in manchen Fällen gewünscht sein, häufig soll jedoch ein wechselnder Zustand des GPIOs erfasst werden.
 gpio schalter Basteln wir mal einen Schalter zwischen GPIO und Betriebsspannung.
gpio kurzer Ihr seht schon, irgendwas ist faul. Wäre der Schalter wie hier auf dem Bild geschlossen, fabrizieren wir einen klassischen Kurzschluss. Also ganz so rabiat geht es dann wohl nicht. Was können wir tun?
 gpio pulldown Probieren wir also die sanfte Methode. Tatsächlich reicht es auch, wenn wir einen Widerstand vom GPIO gegen Masse legen, um den GPIO auf low zu ziehen. In der Praxis haben sich dort Werte um die 10 kiloOhm (10k) bewährt. Es ließe sich auch bestimmt berechnen, welcher Wert optimal wäre, aber wie schon weiter vorn bemerkt, müsste man dazu die genaue interne Schaltung kennen. Ein Blick in das Datenblatt des Schaltkreises könnte auch weiterhelfen. Dort ist auch zu finden, ob interne Widerstände vorhanden sind, die sich per Software einstellen lassen. Beim Raspberry Pi ist das z.B. möglich. Ich nutze jedoch grundsätzlich externe Widerstände, da ich so komplett unabhängig vom Gerät bleibe und auch nicht in der Software dafür sorgen muss, dass diese Widerstände geschaltet werden. In diesem Fall nutze ich einen Pulldown-Widerstand.
 gpio pulldown schalter Jetzt können wir auch beruhigt einen Schalter benutzen. Der GPIO wird, solange der Schalter offen ist, sicher auf low gezogen. Wird der Schalter geschlossen gibt es ein high am GPIO, da der Widerstand zwischen GPIO und Betriebsspannung bedeutend geringer ist (beinahe 0) als der 10k Pulldown-Widerstand gegen Masse. Also können wir damit schon mal den Eingangspegel am GPIO umschalten.
 gpio pullup Das ganze geht natürlich auch umgekehrt. Mit einem Pullup-Widerstand vom GPIO gegen die Betriebsspannung ziehen wir den Pegel sicher auf high.
 gpio pullup schalter

Nun können wir mit dem Schalter den Pegel auf low ziehen. Welche Variante man wählt, hängt immer vom konkreten Anwendungsfall ab.

Bei der Schaltung kam bei mir die Frage auf, was passiert eigentlich, wenn ich ausversehen den GPIO als Ausgang schalte und der Schalter geschlossen ist? Hat der Schaltkreis keinen internen Schutz und der Ausgang ist über die Software auf high gestellt, liegt dort ja Betriebsspannung an. Bei geschlossenem Schalter würde ich den GPIO mit der Masse kurz schließen. Es ist also zu bedenken, ob und wie der GPIO davor geschützt wird.

 gpio schutz Einfach und wirkungsvoll ist ein Widerstand zwischen Schalter, Masse und GPIO. Mit dem Widerstand, der natürlich bedeuten kleiner sein muss als der Pullup begrenzen wir den Strom auf ein für den GPIO erträgliches Maß. 1 kiloOhm (1k) haben sich in der Praxis bewährt. Bei 5V würde ein Strom von 5mA fließen, dass sollte bei den meisten Schaltkreisen keinen Schaden anrichten, reicht aber dicke aus, um den GPIO sicher auf low zu bringen.
gpio digital

Es muss nicht unbedingt ein Schalter sein, der am GPIO den Pegel vorgiebt. Eine Spannung zwischen GPIO und Masse wird natürlich auch als Pegel erkannt. Ihr erinnert Euch an die Tabelle mit den verschiedenen Pegeln weiter vorn. Also eine Spannung annähernd der Betriebsspannung wird als high erkannt, eine Spannung nahe 0V als low. Je nach Schaltkreis kann der Wechsel zwischen high und low verschieden schnell erfolgen und bis in den 20er kiloHertz-Bereich (1kHz = 1000 Wechsel in der Sekunde) reichen.

Ganz wichtig!

Die Spannung, welche zwischen GPIO und Masse angelegt wird, darf nie die maximal zulässige Spannung, die im Datenblatt für den GPIO angegeben ist überschreiten!

Es fließt dann ein zu hoher Strom! Damit wird der Schaltkreis zerstört. Kein Wunder, wenn wir uns das Bild mit den dünnen Drähtchen beim aufgeschnittenen Schaltkreis nochmal vor Augen führen.

Kommentare   

0 #6 raven 2016-07-03 19:52
Ok, wie mache ich das wenn ich drei GPIO´s mit drei Tastern schalten will ? Bei mir werden beim betätigen einer Taste alle drei GPIO´s geschaltet.
Zitieren
0 #5 Jörg Neumann 2015-10-23 16:27
zitiere Michael:
habe mir gerade eine 8-Kanal-Relaiskarte bei Pollin gekauft. (daypower) Diese verfügt über Optokoppler im jeweiligen Eingang. In der Anleitung heisst es, dass die Eingänge auf Masse gezogen werden müssen, damit die jeweiligen Relais schalten. Das sagt mir so gar nichts. Können Sie mir da weiterhelfen?


Die GPIOs müssen dazu als Ausgang konfiguriert sein. An COM (nicht an Vcc) können die 3,3V vom Raspberry Pi genommen werden. Sollte es nicht funktionieren, kann da durch die Dioden die Spannung verringert, auch 5V genommen werden. Wenn die Relais aus sein sollen, muss der GPIO auf high gesetzt werden, sobald er auf low gesetzt wird zieht das Relais an.
Für weitere Fragen würde ich bitten, ein Thread im Forum dazu zu eröffnen.
Zitieren
0 #4 Michael 2015-10-23 12:30
Hallo Herr Neumann,

habe mir gerade eine 8-Kanal-Relaisk arte bei Pollin gekauft. (daypower) Diese verfügt über Optokoppler im jeweiligen Eingang. In der Anleitung heisst es, dass die Eingänge auf Masse gezogen werden müssen, damit die jeweiligen Relais schalten. Das sagt mir so gar nichts. Können Sie mir da weiterhelfen? (Link: zum PDF: www.pollin.de/.../D810273B.PDF )
Zitieren
0 #3 H.Freitag 2015-08-22 13:16
Hallo Herr Neumann,

ich besitze noch den Vorgänger der Pi 2 und überlege mir ob ich mir die ganz neue Version zulegen soll. Nachdem ich aber, per Zufall ^^, auf Ihre Seite und vor allem dieses GPIO Tutorial, gestoßen bin werde ich mir jetzt gleiche ein PI 2 bestellen. Ich bin absoluter Laie in Sache Elektronik usw. aber ich denke mit Ihrer Seite und evtl. Sachbücher werde ich auch die Hürde meistern. Vielen Dank für Ihre Mühe und machen Sie bitte weiter so.

MfG H.Freitag
Zitieren
+3 #2 Jörg Neumann 2015-02-19 17:55
Ich habe die Bilder nicht nummeriert. Welches Bild ist genau gemeint? Einen Kurzschluss gibt es offensichtlich nur bei dem zweiten Bild im Absatz "Pullup und Pulldown" und dass ist gewollt.
Zitieren
-4 #1 User 2015-02-19 17:19
In Bild 2 wäre das ein glatter Kurzschluss!
Zitieren

Warenkorb

0 Produkte - 0,00 EUR
Zum Warenkorb

Neue Produkte

miniUSB Verbindungskabel 15cm (Artikelnummer: MINIUSB15CM)
0,65 EUR
Raspberry Pi 3 Modell B+ (Artikelnummer: RASPI3BPLUS)
36,50 EUR
Acrylgehäuse NanoPi NEO AIR (Artikelnummer: GEHNANOPINEOAIR)
5,50 EUR
3D Druck Gehäuse NanoPi NEO (Artikelnummer: GEHNANOPINEO)
4,50 EUR
NanoHat Proto (Artikelnummer: NANOHATPROTO)
7,45 EUR