• TPL_BEEZ2_SKIP_TO_CONTENT
  • TPL_BEEZ2_JUMP_TO_NAV

TPL_BEEZ2_NAV_VIEW_SEARCH

TPL_BEEZ2_NAVIGATION

  • Martin's Bastelstube
  • Neuigkeiten
  • aktuelle Projekte
  • kommende Projekte
  • Roboter
  • Extras

TPL_BEEZ2_SEARCH

  • RaspberryPi_02
  • RasPi_GPIO_04
  • RasPi_GPIO_34
  • RasPi_GPIO_v4a_03
  • RasPi_GPIO_11
  • RasPi_GPIO_LED-Cube
  • RasPi_I2C-GPIO_v5ac_10
  • RasPi_GPIO_v1c_Platine
  • RasPi_GPIO_v4b_12
Aktuelle Seite: Bastelstube Projekte GPIO-Experimentierboard für Raspberry Pi

RoCCI

  • RoCCI Home
  • Robocup Vöhringen

Direkt zum Projekt

  • Übersicht
  • Einführung
  • Teil I : LEGO-Stecker
  • Teil II : Sensor-Multiplexer
  • Teil III : Joystick-Eingang
  • Teil IV : Selbstbau-Motor
  • Teil V : Servomotor
  • Teil VI : Ballsensor-Tester
  • Teil VII : Strom schalten
  • Teil VIII : Musik-Sensor
  • Teil IX : Nachbrenner
  •     –> Aufbau
  •     –> Bremse
  • Teil X : I2C-Experim.-Board
  •     –> I/O-Expander
  •     –> Rundblick
  •     –> I2C-Displays
  • Teil XI : Radnabe
  • Teil XII : LCD Direkt
  • Teil XIII : PWM-Eingang
  • Teil XIV : I2C-Slave mit ATMega8
  • Teil XV : Power-Slave
  • Teil XVI : Power-Board
  • Teil XVII : Dance-Clock
  • Teil XVIII : Kühlkörper für RasPi
  • Teil XIX : GPIO-Board für RasPi
  • Teil XX : Power-Board für RasPi
  • Teil XXI : Spannungsverdoppler
  • Teil XXII : Seriell mit RasPi
  • Teil XXIII : Aktiv-Sensor für RCX
  • Teil XXIV : Lichter im Partykeller
  • Teil XXV : BristleBot
  • Teil XXVI : Arduino I2C-Adapter
  • Teil XXVII : Arduino PowerBoard
  • Teil XXVIII : VGA am RasPi
  • Teil XXIX : XYZ-Steuerung
  •     –> Controller
  •     –> Displays
  •     –> Motoren
  •     –> Software
  • Teil XXX : RasPi-Halterung
  • Teil XXXI : Zahnriemenscheibe
  • Teil XXXII : Stiftplotter
  • Teil XXXIII : SteckSchalter
  • Teil XXXIV : Omni-Rad

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?

  • Schaltung
  • Leiterplatten-Layout
  • Übersicht der GPIO-Pins
  • Erster Prototyp: Bestückungsseite
  • Erster Prototyp: Lötseite
  • Erster Prototyp: Huckepack auf dem Raspberry Pi

 

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:

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp: Bestückungsseite
  • Erster Prototyp: Huckepack auf dem Raspberry Pi
Beispielanwendung: GPIO-Board Version 3a mit LED-Würfel 3x3x3

  • Schaltung
  • Leiterplatten-Layout
  • GPIO-Board Version 3a mit LED-Cube 3x3x3 — Testaufbau auf Lochrasterplatine

 

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.

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp

 

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.

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp

 

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.

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp
  • Erster Prototyp mit aufgestecktem Display 10x2

 

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.

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp

 

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.

  • Schaltung
  • Leiterplatten-Layout

 

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!

  • Schaltung
  • Leiterplatten-Layout
  • Erster Prototyp

 

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.

  • Schaltung
  • Leiterplatten-Layout

 

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.

 

  • Schaltung Version 6a
  • Leiterplatten-Layout Version 6a
  • Schaltung Version 6b
  • Leiterplatten-Layout Version 6b
  • Erster Prototyp Version 6b

 

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.

 

Sprache Lauflicht über GPIO Lauflicht über I2C
Programm Link Programm Link
C
 gpio-led-lauflicht.c
BCM2835
 i2c-led-lauflicht.c
BCM2835
 gpio-led-lauflicht.mak  i2c-led-lauflicht.mak
Perl
 gpio-led-lauflicht.pl
HiPi::GPIO
 i2c-led-lauflicht.pl
HiPi::Device::I2C
Python
 gpio-led-lauflicht.py
 gpio-led-cube_3x3x3.py
Sourceforge
 i2c-led-lauflicht.py
RasPi Projects
Scratch 2
 gpio-led-lauflicht.sb2
RasPi GPIO
in Scratch 2
Kommando-
zeile (Shell)
 gpio-led-lauflicht.sh
RasPi-AA

Luketopia
 i2c-led-lauflicht.sh
Linux I2C Tools
 gpio-licht-aus.sh  i2c-licht-aus.sh

 

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.

  • Raspberry Pi Bauteilbibliothek Version 1.3

 

... 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!

Letzte Änderung: 11. November 2020                                                                                                                         Impressum