Raspberry Pi Oszilloskop in der Praxis
In diesem Tutorial zeige ich euch wie ihr mit dem Oszilloskop Bausatz und der GPIO Schnittstelle vom Raspberry Pi arbeitet. Dank dem Oszilloskop können wir nun die Signale die wir mit einem Python Skript an die GPIO Pins senden visualisieren. Das hilft uns enorm zu debuggen. Anhand der Anzeige lässt sich recht einfach feststellen ob das erwartete Ergebnis gesendet wird.
Raspberry Pi Oszilloskop in der Praxis
Für meinen Test habe ich mir ein recht einfaches Python Skript gebastelt. Python ist meine persönliche Nummer eins wenn es darum geht am Raspberry Pi die GPIO Schnittstelle anzusteuern, jedoch kein muss. Man kann auch alternative Programmiersprachen wie zum Beispiel C++ verwenden.
Mein Testskript verwendet zwei GPIO Pins und schickt dort unterschiedliche Signale. Ein Signal besteht aus einem periodischen ein- und ausschalten des GPIO Pins. Wir arbeiten demnach digital und setzen zwei mögliche Zustände:
- Signal an: 3 V Spannung
- Signal aus: 0 V Spannung
Das Skript sieht in voller Länge wie folgt aus:
import RPi.GPIO as GPIO import time PIN_A = 7 PIN_B = 8 GPIO.setmode(GPIO.BOARD) pin_a_on = 0 pin_b_on = 0 counter = 0 while True: if counter == 5: if pin_a_on == 0: GPIO.setup(PIN_A, GPIO.OUT) GPIO.output(PIN_A, True) pin_a_on = 1 else: GPIO.setup(PIN_A, GPIO.OUT) GPIO.output(PIN_A, False) pin_a_on = 0 counter = 0 if counter == 2 or counter == 4: if pin_b_on == 0: GPIO.setup(PIN_B, GPIO.OUT) GPIO.output(PIN_B, True) pin_b_on = 1 else: GPIO.setup(PIN_B, GPIO.OUT) GPIO.output(PIN_B, False) pin_b_on = 0 counter = counter + 1 time.sleep(0.5) GPIO.cleanup()
Das Skript ist recht einfach und enthält keine Kommentare, deshalb erkläre ich es nun kurz. Wir binden die beiden externen Bibliotheken GPIO und time ein. GPIO um mit der GPIO Schnittstelle zu arbeiten, time damit wir in der Hauptschleife das Skript kurz schlafen legen.
Für die Ausgabe des Signals verwende ich die beiden Pins 7 und 8 (siehe GPIO Pinout). In der Hauptschleife (Endlosschleife) wird mit einer Zählvariable counter jeder Schleifendurchgang mitgezählt. Nach jedem Durchlauf warten wir kurz eine halbe Sekunde.
Je nachdem wie der Stand der Zählvariable ist setzen wir den Zustand der Pins. Pin 7 und Pin 8 zeigen dabei unterschiedliche Signale:
- Pin 7 (PIN_A)
wird jeden 5. Schleifendurchlauf ein- beziehungsweise ausgeschalten. Wir setzen dazu mit GPIO.output den Pin entweder auf True (3 V Spannung) oder False (0 V Spannung) - Pin 8 (PIN_B)
wird im 2 und 4 Schleifendurchlauf ein- beziehungsweise ausgeschalten.
Das Skript habe ich unter oszilloskop_test.py gespeichert. Ausführen kann man es auf der Kommandozeile mit folgendem Befehl:
python oszilloskop_test.py
Oszilloskop
Wir haben nun ein lauffähiges Skript, welches die Spannung an den Pins der GPIO Schnittstelle am Raspberry Pi periodisch verändert. Wir müssen das nur noch sichtbar machen. Dazu verwenden wir das im letzten Artikel vorgestellte Raspberry Pi Oszilloskop. Der Versuchsaufbau ist am Titelbild recht gut ersichtlich. Ich habe die Pins mit Breadboard Kabel verlängert, damit ich mit den Krokodilklemmen vom Oszilloskop diese besser abgreifen kann. Zusätzlich zu den beiden beschriebenen Pins 7 (weiß) und 8 (grau) habe ich auch Pin 6 (blau) verlängert. Das ist ein GND Pins und wird benötigt, damit das Signal komplett durch das Oszilloskop läuft.
Man schließt demnach die rote Klemme am Signal Pin an und die schwarze Klemme gegen GND.
Signalmessung
Nun können wir uns den Einstellungen am Oszilloskop widmen. Mit den drei Schiebereglern und den Buttons stellen wir sowohl Messgenauigkeit, Wertebereich und Aktualisierungsgeschwindigkeit ein. Für die erste Messung muss man erst etwas mit dem Gerät vertraut werden, nicht immer führt die erste Korrektur zur gewünschten Änderung. Mit etwas Feintuning können wir aber ein sehr schönes Signal sichtbar machen.
Mein Oszilloskop zeigt folgende Kurve für Pin 7 (der mit der Änderung jeden 5. Schleifendurchlauf)
Für Pin 8 sieht die Kurve erwartungsgemäß anders aus
Falls ihr auch bereits ein Oszilloskop zuhause habt könnt ihr nun bei gleicher Einstellung das Python Skript abändern. Beispielsweise kann man die Sleep Time in der Schleife kürzer oder länger machen. Auch könnt ihr eine ganz andere Logik aufbauen oder beispielsweise auf Tastendruck den Zustand am Pin ändern. Am interessantesten ist es aber, wenn ihr direkt einen Sensor anschließt und die Daten die gesendet werden visualisiert.
Fazit
Das Arbeiten mit der GPIO Schnittstelle macht dank dem Raspberry Pi Oszilloskop noch mehr Spaß. Man kann nun endlich die gesendeten Signale sichtbar machen, was beim Debuggen des Python Skripts Gold wert ist. Spannend wirds, wenn man nicht nur den Ausgang sichtbar macht sondern auch den Eingang. Beispielsweise von diversen Sensoren lassen sich so die Daten besser verstehen und gegebenenfalls die verwendeten Protokolle kontrollieren. Ich hoffe meine kleine Einführung war für den einen oder anderen hilfreich.