Digitale Signale mit PulseView und einem Logic-Analyzer untersuchen

https://bildung.social/@oerinformatik/113472056585298649

https://oer-informatik.de/logicanalyzer

tl/dr; (ca. 7 min Lesezeit): Um zu prüfen, ob ein Problem auf Hardware- oder auf Softwareseite besteht, ist es manchmal nötig, die Signale direkt zu messen. Logic-Analyzer bieten die Möglichkeit, viele digitale Signale parallel zu messen und unmittelbar auszuwerten. Mit dem OpenSource-Programm PulseView kann dies sehr komfortabel durchgeführt werden. (Zuletzt geändert am 12.11.2024)

Was ist ein Logic-Analyzer

Bei Logik-Analysatoren (logic analyzer) handelt es sich um Messgeräte, die an ihren Eingängen diskrete Logikpegel (HIGH / LOW) messen und visualisieren können. Die meisten Geräte dieser Art bieten mindestens acht Eingänge, können also einen Bus mit einer Datenbreite vom einem Byte parallel messen und interpretieren. In folgendem Plot kann man gut erkennen, dass der Logic-Analyzer an vier Eingängen die Zustände HIGH und LOW unterscheidet - und über einen Protokoll-Dekoder unmittelbar übersetzt (in diesem Beispiel in eine hexadezimale SPI-Nachricht).

SPI-Nachricht an den vier Leitungen CLK, MOSI, MISO und CS
SPI-Nachricht an den vier Leitungen CLK, MOSI, MISO und CS

Logic-Analyzer unterscheiden sich damit in Signalart und Anzahl der Eingänge von einfachen Oszilloskopen, die häufig nur zwei oder vier Werte messen können, auf diesen jedoch nicht nur diskrete Logikpegel (HIGH / LOW), sondern analoge Signale.

Einige Oszilloskope kombinieren diese beiden Optionen und bieten zwei oder vier analoge Signale und mindestens vier digitale Signale inklusive zugehörige Dekoder an. Diese Mischung aus Logic-Analyzer und Oszilloskop wird häufig unter der Bezeichnung mixed signal oszilloscope (MSO) vertrieben.

Konkretes Beispiel: PulseView ein günstiger 8-Kanal Logic-Analyzer

Wir verwenden einen Low-Cost-Logic-Analyzer, wie er von vielen Elektronikhändlern vertrieben wird.1 Dieser stellt acht digitale Eingänge zur Verfügung und wird per USB am Computer angeschlossen. Die günstigsten Varianten kosten knapp über 10€ und sind somit auch für den Hobbygebrauch gut finanzierbar. Sie verfügen aber über keinerlei Schutzschaltungen (Augen auf beim Anschluss, der USB-Port des PC ist direkt betroffen…) und sind häufig sehr günstig produziert (v.a. das Gehäuse und der USB-Port brechen leicht).

Als Software nutzen wir das Open-Source-Programm PulseView des Sigrok-Projekts zur Darstellung und Interpretation der Signale. Die Software gibt es für alle Desktop-Betriebssysteme und liefert eigentlich alles mit, was wir zum Hardware-Debuggen benötigen.

PulseView
Download: PulseView findet sich auf der Sigrok-Seite: https://sigrok.org/wiki/Downloads
Manual: https://www.sigrok.org/doc/pulseview/0.4.1/manual.html
Hardware: Derzeit werden 258 Geräte vom Sigrok-Projekt unterstützt, ein Blick in die Liste kompatibler Geräte lohnt sich immer vor dem Hardware-Kauf.

Die acht Messkanäle sind in PulseView und im Kanalaufdruck unterschiedlich benannt, es lohnt sich, die Leitungen in den zugehörigen Farben anzuschließen. Das Zuordnen der Signale ist dann ein Vielfaches einfacher!

Pinbelegung im Programm Pulseview
Pinbelegung im Programm Pulseview

Vorgehen für eine erste Messung

  1. PulsView starten

  2. “Mit Gerät verbinden”.

Der Button zur Verbindung mit einem Gerät bietet manchmal eine Drop-Down-Liste an
Der Button zur Verbindung mit einem Gerät bietet manchmal eine Drop-Down-Liste an
  1. Den korrekten Treiber, Anschluss und das richtige Gerät wählen:
Auswahl des zugehörigen Treibers, des USB-Ports und des Geräts
Auswahl des zugehörigen Treibers, des USB-Ports und des Geräts
  1. Den Treiber “fx2lafw (generic…)” aus dem Dropdown-Menü wählen

  2. “USB”-Anschluss wählen

  3. „Nach Geräten suchen“ klicken

  4. Hier sollte jetzt etwas erscheinen wie „Salae Logic with 8 channels“ => das auswählen

  5. „OK“ klicken

  1. Starten der Messung
Oberhalb des Menüs kann die Messung gestartet und später wieder gestoppt werden
Oberhalb des Menüs kann die Messung gestartet und später wieder gestoppt werden
  1. Stoppen der Messung (falls diese nicht automatisch stoppt)

Einstellungen für eine erste auswertbare Messung

Häufig sind die ersten Ergebnisse zum einen schwer zu finden, da Skalierung und Zeitachse noch nicht passen. Zum anderen haben wir uns noch gar nicht damit beschäftigt, welches Signal wir messen und wie wir das Tool für das jeweilige Eingangssignal anpassen müssen.

Zoomen und Bewegen in einer Messung

Um auf der zeitlichen Achse oder zwischen den Eingängen hin und her zu scrollen, können die Balken am Rand verwendet werden. Gezoomt werten kann mit dem “+” und “-”-Symbol in der Symbolleiste (s.o.) oder über die Pfeil-Tasten (bzw. über das Trackpad / Mausrad).

Die Zoomfunktion in der Menüleiste
Die Zoomfunktion in der Menüleiste

Die Logikpegel des Analyzers

Bislang haben wir uns um das Eingangssignal keine Gedanken gemacht. Für einen Logic-Analyzer ist natürlich zum einen wichtig, dass das Signal innerhalb der jeweiligen Logikpegel liegt. Für das mir vorliegende Gerät wird schlicht angegeben, dass es mit Logikstandards von 5V, 3,3V, 2,6V und 1,8V umgehen kann. Hier sollte es also nicht zu Problemen kommen.

Die Datenrate und das Nyquist-Shannon-Theorem

Neben der Pegelhöhe ist darüber hinaus wichtig, mit welcher Frequenz die auszuwertenden Signale eintreffen. Wir zoomen mal in die Beispielaufzeichnung einer SPI-Nachricht zwischen einem Sensor (BMP280) und einem Arduino - und zwar so weit hineinzoomen, dass wir die einzelnen Datenpunkte sehen.

Es sind klar einige Peaks und Täler erkennbar, die aus nur einem Datenpunkt bestehen - ein Alarmzeichen, dass danach schreit, die Abtastrate zu erhöhen!
Es sind klar einige Peaks und Täler erkennbar, die aus nur einem Datenpunkt bestehen - ein Alarmzeichen, dass danach schreit, die Abtastrate zu erhöhen!

Diese Messung fang mit einer Abtastrate von 20 kHz statt - das heißt, dass pro Sekunde 20.000 Messungen vorgenommen werden. Wir betrachten die ersten beiden Täler von D0 und die ersten beiden Peaks von D2: sie bestehen aus genau einem Datenpunkt - und das ist sehr kritisch. Was passiert dazwischen? Hat das gemessene Signal in Wirklichkeit eine viel größere Frequenz und wir sehen nur jeden zehnten Datenpunkt? Ohne die Frequenz des Signals zu kennen, sollten wir die Abtastrate so lange erhöhen, bis wir auf dem Takt-Kanal für jedes HIGH und jedes LOW mehrere Datenpunkte sehen. Im besten Fall messen wir einmal mit der maximalen Abtastrate des Logic-Analyzers, um die Taktfrequenz des Signals selbst auszumessen.

Bei bekannter Frequenz des abgetasteten Signals können wir aus dem Nyquist-Shannon-Abtasttherorem eine relativ einfache Faustformel ableiten: Die Abtastrate muss mehr als doppelt so hoch sein wie die Frequenz des abgetasteten Signals. Auf der oben verlinkten Wikipediaseite ist ein Beispielsignal (Sinusverlauf) an dem grafisch schnell deutlich wird, warum das so ist. (Und diese grafische Erklärung soll uns hier reichen.)

Ich möchte beispielsweise ein Signal prüfen, dass ein Arduino-Microcontroller an einen SPI-Sensor sendet. Der Arduino taktet mit maximal 16 MHz - ohne weitere Informationen wäre das unsere maximale Signalfrequenz. Aber natürlich schafft er es nicht, in jedem Prozessortakt auch ein SPI-Signal auszugeben. Praktisch erreicht die SPI-Clock am Arduino etwa 200 kHz.

Zur sicheren Abtastung des Signals müssen wir also mehr als 400 kHz als Abtastrate wählen.

Bleibt noch zu entscheiden, wie viele Datenpunkte wir speichern wollen. Das geben wir in Samples - also Messungen - an. Wenn ich ein Signal mit 500kHz abtaste (also 500.000 Samples/Sekunde ist meine Messung von 500.000 Samples nach einer Sekunde fertig.

Jetzt müssen wir nur noch sicherstellen, dass in dieser Sekunde auch etwas passiert… aber dafür gibt es ja Trigger:

Wo startet mein Signal?! Oder: Triggeralarm!

Wer fleißig sucht und zoomt, der findet irgendwo in der Messung das Nutzsignal, das ausgewertet werden soll. Im Idealfall kennt man aber bereits den Verlauf, und kann den Messbeginn entsprechend konfigurieren:

SPI-Nachricht an den vier Leitungen CLK, MOSI, MISO und CS
SPI-Nachricht an den vier Leitungen CLK, MOSI, MISO und CS

Hier abgebildet ist ein SPI-Signal. Charakteristisch für eine Nachricht, die über den SPI-Bus übertragen ist, dass sie immer mit einer fallenden Flanke auf der CS-Leitung startet. Wir müssen unsere Messung also nicht ins Leere laufen lassen - wir teilen PulseView mit, dass es die Messung erst beginnt, wenn bei CS eine fallende Flanke auftritt.

Doppelklick auf den Kanal öffnet die Kanaleigenschaften mit Name und Trigger
Doppelklick auf den Kanal öffnet die Kanaleigenschaften mit Name und Trigger

Es besteht die Möglichkeit, Flanken (steigend / fallend) oder Zustände (High, low) zu triggern. Erst, wenn auf dem betreffenden Kanal dieses Ereignis auftritt, wird die Messung begonnen.

Beispiel: PWM-Signale auswerten

PWM-Signale können manuell ausgewertet werden. Dazu bietet PulseView ein Werkzeug um Zeitspannen direkt im Tool auszuwerten. Mithilfe des Zeitspannen-Tools lässt sich der Beginn und das Ende einer Zeitspanne mit der Maus auf die gewünschte Flanke ziehen und oben ablesen:

Pinbelegung im Programm Pulseview
Pinbelegung im Programm Pulseview

Dekoder: PWM und andere Protokolle direkt wandeln lassen

PulseView kann eine ganze Reihe von Protokollen direkt interpretieren - und aus den HIGHs und LOWs besser interpretierbare Zeichenfolgen zu dekodieren. Dies kann über den Button in der Symbolleiste eingestellt werden, in dem aus der Liste der dann aufpoppenden Protokolle das gewünschte gewählt wird (z.B. PWM):

Auswahl eines Dekoders in Pulseview
Auswahl eines Dekoders in Pulseview

Per Rechtsklick auf das Label des neu erscheinenden Signals können dem Protokoll dann Eingangs-Kanäle zugeordnet werden:

Konfigurieren des PWM-Dekoders
Konfigurieren des PWM-Dekoders

Damit werden PWM-Signale unmittelbar interpretiert:

PulsView stellt den Duty Cicly von PWM-Signalen direkt als Zahl dar
PulsView stellt den Duty Cicly von PWM-Signalen direkt als Zahl dar

Fazit

Bereits mit günstigen Logic-Analyzern lassen sich einfache Microcontroller-Busprotokolle relativ gut debuggen, an 24MHz Abtastrate kommen die günstigen Geräte allerdings an ihre Grenzen. In einem nächsten Blogpost wird es darum gehen, wie mithilfe des Logic-Analyzers I2C, SPI und UART-Signale überprüft werden können.


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: Digitale Signale mit PulseView und einem Logic-Analyzer untersuchen” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/logicanalyzer veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/digitaltechnik. Stand: 12.11.2024.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]


  1. Diese basieren i.d.R. auf einem Chip wie dem Cypress CY7C68013A-56, der kompatibel mit PulseView ist. Eine Liste kompatibler Logic-Analyzer findet sich auf der Sigrok-Seite

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: