Die internen PullUp Widerstände am Raspberry Pi nutzen

Die Taster in unserem letzten Projekt Senso haben wir mit Pullup- und Querwiderständen realisiert. Das waren insgesamt 8 Widerstände. Die wollen wir jetzt einsparen.

Der Raspberry Pi hat netterweise schon PullUp-Widerstände (50 -65 kΩ) eingebaut, die man per Software zuschalten kann. Das funktioniert für fast jeden Port, außer für die Pins Nr. 3 und 5 (BCM 2 und 3, SDA und SCL I2C)), weil dort der I2C-Bus betrieben wird und der benötigt dort Pullup-Widerstände mit festen Werten von 1.8 kΩ, die dort immer eingeschaltet sind. Der Arduino verfügt übrigens auch über eingebaute PullUp-Widerstände, ihr könnt Eure externen PullUp-Widerstände also eigentlich schon aufs Altenteil schicken - aber natürlich können wir die auch für etwas anderes gebrauchen.

Um die internen PullUps zu aktivieren, müssen wir nur das GPIO-Setup für die Tasten einen Deut anders definieren. Also passen wir den Code an und schreiben: for taste in tasten: # Tasten sind Input, PullUp-Widerstände ein GPIO.setup(taste, GPIO.IN, pull_up_down = GPIO.PUD_UP) pull_up_down = GPIO.PUD_UP im 2. Parameter steht für "schalte den PullUp-Widerstand an diesem Pin ein". Das ist auch schon alles. Wir sollten allerdings auch nicht vergessen, die externen PullUps abzubauen, denn zwei parallel geschaltete Widerstände ergeben zusammengenommen einen geringen Ohm-Wert als die niedrigste verbaute, Der Gesamtwidertand zweier paralleler 10 kOhm-Widerstände ist z. B. nur noch die Hälfte: 5 kOhm. Wer weiß, ob das dann noch reicht, um den Zustand eindeutig zu halten?

Es gibt auch noch die Option GPIO.PUD_DOWN für die Nutzung des PullDown-Widerstands, aber dann wäre der Anschluss des Tasters ein wenig anders: der müsste dann an +3.3V statt an Masse angeschlossen sein, damit er beim Schließen auf High geht. Vom PullDown-Widerstand wird der Pin ja "down", also auf 0 Volt gehalten. Das Pullup-Prinzip ist aber störungssicherer.

Die Querwiderstände sind ja nur für ein bisschen Stromersparnis zuständig und das auch nur während ein Taster gedrückt ist. Da unser Raspi nicht auf Batterie läuft, sondern am Netzteil hängt, wo es nicht so darauf ankommt, sparen wir uns die ebenfalls ein. Die Leitungen von den GPIO-Ports schließen wir dann direkt an den 2. Pol der jeweiligen Taster an

Damit sieht unser Board doch wesentlich übersichtlicher aus (siehe rechts). Und man kann endlich die Taster gescheit drücken, ohne mit dem Finger an einem Widerstand hängenzubleiben.






Was übrigens passiert, wenn man die externen PullUps vom Breadboard entfernt, aber vergisst, die internen im Raspi einzuschalten zeigt nachfolgendes Video: