Martin's Bastelstube: GPIO-Experimentierboard für Raspberry Pi
Der Raspberry Pi ist ein leistungsfähiger Linux-Computer, etwa so groß wie eine Kreditkarte.
Ich kann an dieser Stelle nicht ausführlich erklären, was alles mit diesem Rechner möglich ist
– das sprengt den Rahmen dieser Bastelstube. Wer Genaueres wissen möchte, soll sich mal auf der
Homepage des Projekts umschauen.
Der Raspberry Pi hat einen Pfostenstecker (alt: 26-polig, neu: 40-polig) mit vielen frei verfügbaren
Ein-/Ausgabe-Leitungen (GPIO = General-Purpose Input/Output).
Das schreit geradezu danach, irgendwelche Hardware-Basteleien damit zu steuern.
Im Detail sind es ein paar frei programmierbare GPIO-Leitungen (alt: 8, neu: 17), eine SPI-Schnittstelle
mit 2 Chip Selects, eine I2C-Schnittstelle und eine asynchrone serielle Schnittstelle.
Dummerweise arbeiten alle Schnittstellen mit 3.3 Volt, so dass man sie erst einmal mit Pegelwandlern auf
5 Volt anheben muss, bevor man handelsübliche Logik ansteuern kann.
GPIO-Board Version 1:
Als Pegelwandler für die GPIOs benutze ich zwei TXB0108. Diese Bausteine erkennen bei jedem einzelnen Signal von selbst,
in welcher Richtung der Datenfluss anliegt, und stellen sich entsprechend um. Leider können sie keine
großen Ströme an den Ausgangspins liefern – wer LEDs ansteuern will, muss einen Transistor bzw. Treiber
nachschalten oder das Signal direkt an den GPIO-Pins des Raspberry Pi abgreifen.
Die Signalpegel der I2C-Leitungen werden mit einem Pegelwandler PCA9517 auf 5 Volt umgesetzt.
Dieser Baustein ist speziell für den I2C-Bus entworfen und hält automatisch die richtigen Parameter
für die I2C-Kommunikation ein.
Das GPIO-Board hat seine eigene Stromversorgung. Am Batterie-Eingang kann man eine beliebige Gleichspannungsquelle
zwischen 7.2 und 15 Volt anschließen. Sie sollte mindestens 1 Ampère Strom liefern können.
Der Raspberry Pi wird auf diese Art gleich mit versorgt.
So kann man sich leicht ein mobiles System bauen, das von einem Akku gespeist wird.
Bitte stattet den Spannungsregler mit einem ausreichend großen Kühlkörper aus, damit er die
entstehende Verlustleistung auch an die Umgebungsluft abgeben kann!
Als "Spielwiese" habe ich ein großes Lochrasterfeld vorgesehen. Lasst euch von den Möglichkeiten
inspirieren und baut, was euch einfällt!
Wenn man für den GPIO-Stecker eine Kontaktleiste aus dem PC104-Standard nimmt, kann man mehrere GPIO-Boards
übereinander stapeln. Dann muss man allerdings aufpassen, dass es keine Konflikte auf gemeinsam genutzten
GPIO-Leitungen gibt. Zum Glück verzeihen die Pegelwandler-Bausteine hier die meisten Verdrahtungsfehler.
Wie sieht denn das GPIO-Board für den Raspberry Pi überhaupt aus?
Stark vereinfachtes GPIO-Board:
In den meisten Fällen will man "nur mal eben" eine kleine Schaltung zusammenlöten,
dazu ist das große GPIO-Board zu aufwändig im Nachbau und zu kostbar.
Deshalb habe ich ein stark vereinfachtes GPIO-Board entworfen, das mit einem 74HCT-Baustein die
Pegelwandlung zu TTL macht und auf einer einseitigen Platine leicht aufgebaut werden kann.
Die Lötaugen der Steckerleiste sind asymmetrisch angelegt, damit man die Pins leichter
unter dem Stecker anlöten kann.
Zunächst werden alle GPIO-Leitungen als Ausgänge behandelt. Wenn man einen Eingang braucht,
muss man die betreffende GPIO-Leitung mit einem Open-Collector-Ausgang gegen Masse ziehen. Dazu braucht
man noch nicht mal den Eingang des Pegelwandlers von dieser Leitung zu trennen.
Bitte beachten: Dieses Board wird vom Raspberry Pi aus versorgt!
Wenn also eine besonders stromhungrige Schaltung darauf aufgebaut werden soll, ist es besser, wenn
man sich "von außerhalb" eine separate Versorgung heranzieht.
Vereinfachtes GPIO-Board für Raspberry Pi, Version 3a mit 8 GPIOs:
Beispielanwendung: GPIO-Board Version 3a mit LED-Würfel 3x3x3
Vereinfachtes GPIO-Board für Raspberry Pi, Version 3b mit 4 GPIOs und SPI:
Hier habe ich 4 der TTL-Treiber mit den SPI-Signalen belegt. Der Eingang MISO macht die Pegelwandlung
von 5V nach 3.3V über einen einfachen Widerstands-Spannungsteiler.
Falls ihr weitere Eingänge an den GPIO-Leitungen braucht, könnt ihr auf der
Lochrasterfläche im gleichen Stil weitere Spannungsteiler aufbauen.
Für hohe Datenraten müssen ggf. die Widerstandswerte auf 180 und 330 Ohm verkleinert werden.
Vereinfachtes GPIO-Board für Raspberry Pi, Version 4a mit 8 GPIOs und SPI:
Dieses Board hat die fast quadratische Form der
HATs
für die neuen Raspberry Pi Modelle A+ und B+.
Die TTL-Treiber sind mit 8 GPIO-Leitungen und der SPI-Schnittstelle belegt.
Hier war noch genug Platinenfläche frei, um einen zweiten Widerstands-Spannungsteiler
für eure eigenen Eingangssignale unterzubringen.
Vereinfachtes GPIO-Board für Raspberry Pi, Version 4b für kleine alphanumerische Displays:
Dieses Board ist eine Abwandlung der Version 4a – hier werden 8 GPIO-Leitungen
auf 5V-Pegel angehoben und zur Ansteuerung eines kleinen alphanumerischen Displays
im 4-Bit-Modus genutzt.
Der Anschluss LCD2 ist für LCD-Displays von Pollin
C0802-04
vorgesehen.
GPIO-Boards für Raspberry Pi, Version 5 mit 16 GPIOs über I2C:
Diese Boards haben ebenfalls die Form der
HATs
für die neuen Raspberry Pi Modelle A+ und B+.
Auf den Boards der Versionen 5 habe ich einen I2C-IO-Expander
MCP23017
untergebracht, der 16 weitere Ein-/Ausgabe-Leitungen zur Verfügung stellt. Mit einem
DIP-Schalter lassen sich 8 verschiedene Adressen einstellen. Wenn man die Boards stapelt,
bekommt man bis zu 128 zusätzliche GPIO-Leitungen am Raspberry Pi!
Die DIP-Schalter kann man auch in einer aufrecht abgewinkelten Bauform bestücken.
Dann kann man sie auch noch gut erreichen, wenn mehrere GPIO-Boards übereinander
gestapelt sind.
Vom GPIO-Stecker des Raspberry Pi werden nur 7 Pins benötigt – Spannungsversorgung,
I2C und GPIO04. Die GPIO-Leitung wird auf dem Raspberry Pi als Eingang konfiguriert, auf diesem
Pin melden die GPIO-Boards eine Unterbrechungsanforderung (Interrupt) an den Rechner.
Die meisten Boards können auf einer einseitigen Platine mit wenigen Drahtbrücken
aufgebaut werden.
I2C GPIO-Board für Raspberry Pi, Version 5a:
Das ist die einfachste Variante – der I2C-Chip MCP23017 läuft mit 3.3V.
Deshalb ist keine Pegelumsetzung von 5V auf 3.3V notwendig.
Allerdings sind die I/O-Pins des MCP23017 auch nicht tolerant gegenüber Eingangsspannungen
von 5V! Dieses Board ist also nur sinnvoll, wenn Eure Schaltung auch nur mit 3.3V läuft.
Der Interrupt-Ausgang des MCP23017 muss aktiv LOW als Open-Drain-Ausgang konfiguriert werden.
I2C GPIO-Board für Raspberry Pi, Version 5b:
Hier läuft der I2C-Chip MCP23017 mit 5V. Die Pegelumsetzung von 5V auf 3.3V findet
auf dem I2C-Bus mit einem PCA9517 statt.
Der Interrupt-Ausgang des MCP23017 muss aktiv HIGH als Push-Pull-Ausgang konfiguriert werden.
Ein nachgeschalteter NPN-Transistor mit offenem Kollektor übernimmt die Pegelwandlung zum Raspberry Pi.
I2C GPIO-Board für Raspberry Pi, Version 5c:
Weitgehend dasselbe wie Version 5b – zusätzlich gibt es aber noch einen I2C-Stecker
nach dem QFIX-Standard. Die Spannungsversorgung auf dem I2C-Stecker ist ebenfalls nur 5V!
I2C GPIO-Board für Raspberry Pi, Version 5d:
Hier habe ich auf Basis der Version 5b die Platine schon mal für einen festen Verwendungszweck
vorverdrahtet – es ist ein vollständiger paralleler Druckerport nach dem
Centronics-Standard,
so wie er auf der Rückseite vernünftig ausgestatteter PCs zu finden ist.
Zum Schutz des MCP23017 bei Fehlverbindungen sind alle I/O-Leitungen mit Serienwiderständen von 100 Ohm ausgestattet.
GPIO-Board Version 6 über SPI:
Man kann auch Peripheriebausteine über die SPI-Schnittstelle ansteuern. Diese Methode wird auf den GPIO-Boards Version 6 verwendet.
Zum Beispiel für die Erfassung analoger Messwerte gibt es ungeheuer viele Bausteine, die über SPI angesprochen werden.
GPIO-Board Version 6a + 6b mit A/D-Wandler MCP3204
Microchip hat mit der Bausteinfamilie MCP32xx verschiedene A/D-Wandler im Programm. Der MCP3204 kann vier analoge Kanäle messen.
Jeder Kanal ist auf einen 3-poligen Klinkenstecker 3.5 mm geführt, zusammen mit der Betriebsspannung für den analogen Sensor
oder für ein Potentiometer. In der Leitung für die Betriebsspannung und in der analogen Messleitung sind jeweils
Serienwiderstände eingefügt, damit beim Einsetzen der Klinkenstecker kein Kurzschluss den Raspberry Pi in einen Reset zwingt.
Die Bauteile sind so angeordnet, dass man an Stelle von 8 Einzelwiderständen einen achtfach-Parallelwiderstand im DIL16-Gehäuse einsetzen kann.
Für diese Schaltung reicht eine einseitige Platine aus, sogar ganz ohne Lötbrücken.
Version 6a und 6b unterscheiden sich nur in der Bauform der 3.5 mm Klinkenbuchsen. Schaut also genau hin,
welche Buchsen ihr bei eurem Händler bekommt.
Wenn ihr farbig codierte Klinkenstecker und -Buchsen nehmt wie auf dem Beispielfoto rechts,
dann lassen sich Fehler beim Einstecken der Messkabel vermeiden. Die farbigen Buchsen kann man zum Beispiel
aus alten PC-Soundkarten auslöten, wenn der Elektronik-Händler keine im Angebot hat.
Programmierung:
In meinen Beispielen wird eine einfache Aufgabe gelöst:
Auf acht LEDs soll ein Lauflicht hin und her wandern.
Die LEDs sind entweder angeschlossen an den GPIO-Pins des Raspberry Pi, wie auf dem
GPIO-Board für Raspberry Pi, Version 1 (siehe oben),
oder sie sind angeschlossen über den I2C-Bus, wie auf dem
I2C-Expander Digital mit PCF8574.
Es gibt verschiedene Programmiersprachen, mit denen man diese Aufgabe lösen kann.
Sucht euch aus, was am besten zu eurer Problemstellung passt.
Unter "Link" stehen Verweise ins Internet,
wo man weitere Informationen zu dieser Programmiermethode findet
oder die Programmbibliothek, die in meinem Beispielprogramm verwendet wurde.
Wenn euch meine Beispiele aus der Tabelle nicht ausreichen: Sucht gerne weiter
– die Informationsquellen im Internet sind unerschöpflich.
Hier könnt ihr mit der Suche anfangen:
-
Sehr ausführliche Anleitungen und Hilfestellung für vierschiedene Programmiersprachen findet man
im Magazin The MagPi,
das man im Netz als PDF-Datei oder als gedruckte Ausgabe bekommen kann.
Es gibt sogar einige Ausgaben ins Deutsche übersetzt.
-
Bei Adafruit gibt es umfangreiches
Zubehör für den Raspberry Pi und auch eine große
Reihe von Video-Anleitungen, wie man ihn benutzt.
-
Wer seinen Pi über das Netzwerk fernsteuern möchte, findet bei
WebIOPi
eine fertige Plattform, die mit wenigen Handgriffen auf eigene Bedürfnisse
zugeschnitten werden kann.
EAGLE-Bibliothek:
Wenn keiner meiner oben aufgeführten Entwürfe das Richtige für Eure Bedürfnisse ist,
könnt ihr auch gerne selbst eine eigene Platine entwerfen.
Ich habe eine Bauteilebibliothek für
EAGLE
aufgebaut, die dürft ihr gerne verwenden ...
darin findet Ihr verschiedene Formate für Erweiterungsboards auf dem Raspberry Pi.
... und dann ?
Wie sollte es anders sein – in meiner Bastelstube muss jeder Rechner über kurz oder lang einen
Roboter steuern. Dafür habe ich schon ein spezielles Power-Board und Slave-Board entworfen.
Bitte weiterblättern zu
Martin's Bastelstube, Teil XX ...
Tschüß, euer Martin S.
|
E-mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!
|