Aus Raspberry Pi Geek 09/2023

Datenaustausch zwischen Komponenten analysieren

© dmvasilenko77 / 123RF.com

Lauschangriff

Bernhard Bablok

Mit einem Pi Pico und freier Software bauen Sie Ihren Elektronikwerkzeugkasten kostengünstig um einen Logikanalysator aus.

Jahrelang kam der Autor mit einem Lötkolben und einem einfachen digitalen Multimeter aus. Mit der Erfahrung und immer anspruchsvolleren Projekten wuchsen jedoch auch die Ansprüche an die Werkzeuge. In dieser Ausgabe geht es deshalb um einen Logikanalysator. Er belauscht die Kommunikation zwischen zwei Geräten, etwa zwischen einem Mikrocontroller und einem Sensor.

Ausgangspunkt war die Anfrage eines Users im Forum, der ein Problem mit seinem I2C-Device hatte. Während er mit dem Multimeter die korrekte Spannungsversorgung bestätigen konnte, scheiterte er an der Takt- und Datenleitung (SCL und SDA, Serial Clock und Serial Data). Beide haben Pullups und sind nur während der Kommunikation auf Masse gezogen, aber ein Multimeter ist zu träge und bekommt das nicht mit. Ein Logikanalysator ist hier das Mittel der Wahl, aber zur Not würde es auch ein Oszilloskop tun.

Im Vergleich zu einem Oszilloskop muss der Logikanalysator mehr können, denn es geht weniger darum, ob die Spannungspegel und die Flanken sauber sind. Viel mehr interessiert, ob die Bits in der richtigen Reihenfolge und mit dem richtigen Timing über die Leitungen wandern. Je nach Anzahl der unterstützten Leitungen spricht man von einem 1-, 2- oder x-Kanal-Logikanalysator.

Das Abgreifen der Signale stellt dabei keine große Herausforderung dar: Jeder gängige Mikrocontroller mit der passenden Firmware kann hier als Messsonde dienen. Entsprechend vielfältig fallen die verfügbaren Implementationen aus. Viele Projekte kümmern sich aber nicht um die Aufbereitung und Analyse der Daten. Das ist nicht weiter schlimm, denn in aller Regel unterstützen sie ein Standardformat, das Programme wie Sigrok/Pulseview dann einlesen und aufbereiten [1].

Für den Pico gibt es mehrere Alternativen. In diesem Artikel stellen wir die Software LogicAnalyzer [2] des Entwicklers Agustin Gimenez Bernad vor. Das Projekt hat eine rasante Entwicklung durchgemacht und liefert nicht nur den Teil, der die Daten physisch erfasst, sondern gegen den Trend auch die passende Auswertesoftware dazu. Ein eigenes Frontend macht dabei den Arbeitsablauf viel einfacher.

Installation

Für das Einrichten von LogicAnalyzer benötigen Sie einen Raspberry Pi Pico oder Pico W als Messsonde sowie einen PC. Welches Betriebssystem auf Letzterem läuft, spielt dabei keine Rolle, auch der RasPi wird unterstützt.

Laden Sie als Erstes die zum Pico passende Firmware und die zum Betriebssystem passenden Anwendungen LogicAnalyzer und ClCapture herunter [3]. Beim Autor waren das die Dateien Firmware-LogicAnalyzer-4.5.0.0-PICO.uf2, LogicAnalyzer-4.0.0.0-linux-x64.zip und ClCapture-4.0.0.0-linux-x64.zip. Das letzte Paket ist optional. Es enthält ein Kommandozeilenprogramm, das die Daten für die spätere Analyse mit Sigrok/Pulseview sammelt.

Die Firmware kopieren Sie auf den Pico. Das Vorgehen unterscheidet sich nicht von der Installation etwa von MicroPython oder CircuitPython. Neben der Softwareinstallation müssen Sie auch die Hardware vorbereiten. Hier tut es aber ein Jumper-Kabel von GP0 zu GP1. Interessieren Sie sich für die Hintergründe dieses Hardware-Hacks, finden Sie in der Dokumentation ausführliche Informationen. Ansonsten benötigen Sie noch ein USB-Kabel für die Kommunikation mit dem Pico. Nutzen Sie einen Pico W, dann benötigen Sie das Kabel nur für die Ersteinrichtung der WLAN-Zugangsdaten.

Die Installation der eigentlichen Analysesoftware auf dem PC/RasPi umfasst im Wesentlichen das Entpacken der ZIP-Archive und Setzen des Ausführen-Bits. Listing 1 fasst die notwendigen Befehle zusammen. Der Entwickler erzeugt die Programme als Multiplattform-Binaries auf einem Windows-System und kann das deshalb nicht vor dem Erstellen des Archivs erledigen.

Listing 1

Softwareinstallation

$ sudo unzip LogicAnalyzer-4.0.0.0-linux-x64.zip -d /usr/local/lib
$ sudo chmod +x /usr/local/lib/LogicAnalyzer/linux-x64/LogicAnalyzer
$ ln -s /usr/local/lib/LogicAnalyzer/linux-x64/LogicAnalyzer /usr/local/bin

Versuchsaufbau

Als Testobjekt dient hier ebenfalls ein Raspberry Pi Pico samt angeschlossenem Temperatursensor AHT20. Letzterer hängt im Beispiel an den I2C-Pins GP15 (SCL) und GP14 (SDA). Alle anderen I2C-Pin-Kombis wären genauso geeignet. Die Messung erfolgt über ein simples CircuitPython-Programm, das Sie in Listing 2 finden. Ein Taster an GP17 löst dabei eine Messung aus.

Listing 2

Sensor-Programm

import board
import time
import adafruit_ahtx0     # AHT20
import busio
from digitalio import DigitalInOut, Direction, Pull
PIN_SCL = board.GP15
PIN_SDA = board.GP14
PIN_BTN = board.GP17
i2c = busio.I2C(PIN_SCL,PIN_SDA)
aht20 = adafruit_ahtx0.AHTx0(i2c)
btn = DigitalInOut(PIN_BTN)
btn.direction = Direction.INPUT
btn.pull      = Pull.UP
while True:
  if btn.value == 0:
    t = aht20.temperature
    h = aht20.relative_humidity
    print(f"{t:0.1f}GradC - {h:.0f}%")
    time.sleep(1)

Wie in Abbildung 1 zu sehen, führen drei Kabel vom Testobjekt (unten im Bild) zum LogicAnalyzer-Pico (oben). Neben der gemeinsamen Masse (grau) sind das Kabel für SDA und SCL – wir messen also zwei Kanäle. Oben rechts sehen Sie einen kleinen grünen Jumper zwischen RX und TX. Er verbindet wie oben beschrieben GP0 und GP1.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben