Zum Hauptinhalt springen

Logikanalysator: Kingst LA5016

·2677 Wörter·13 min
Logikanalysator Messtechnik Elektrotechnik Debugging Arduino PlatformIO
Inhaltsverzeichnis
Logic Analyzer: LA5016

Einleitung
#

Ein Logikanalysator ist ein elektronisches Messgerät, das digitale Signale aufzeichnet, darstellt und auch die Fähigkeit hat bestimmte Protokolle zu dekodieren. Dabei kann es wie Ein Oszilloskop auf bestimmte Logik triggern, die Signale lesbar darstellen und auch verschiedenste Zeitmessungen tätigen. Ein Logikanalysator ist ein sehr hilfreiches Messgerät bei der Entwicklung von digitalen elektronischen Schaltungen. Er hat dem Oszilloskop gegenüber dem Vorteil, dass er meist viel mehr Messkanäle hat, ist auch logisch, denn vor allem Kommunikationsprotokolle bzw. Bussysteme haben oftmals eine Vielzahl an Signalen. Anders als bei Oszilloskopen, werden bei einem Logikanalysator Signale digitalisiert und nur mehr als 1/0 bzw. high/low dargestellt.

In diesem Artikel geht es um einen kostengünstigen Logikanalysator (LA5016) von der Firma Kingst. Dieses Messgerät verfügt über kein Display, es wird lediglich über USB an den PC angeschlossen und über die mitgelieferte Software angesteuert. Wir werden uns nicht nur Kenngrößen und technische Details angucken, sondern auch ein selbst entwickeltes Mikrocontroller Programm analysieren und debuggen.

Kingst LA5016
#

Wie schon in der Einleitung beschrieben ist der LA5016 ein kostengünstiger (~300€) Logikanalysator, der über USB gesteuert und betrieben wird. Die Firma Kingst bietet zusätzlich noch andere Produkte an: LA1010, LA2016, LA5016, LA5032. All diese Geräte sind sehr ähnlich, sie unterscheiden lediglich in der Anzahl der Kanäle, Abtastrate und der Speichertiefe. Wer die Geräte vergleichen will kann das auf der Kingst Produktseite tun.

Kingst LA5016

Zurück zum LA5016 und dessen Kenngrößen:

  • Eingangskanäle: 16
  • Abtastrate: 500MHz
  • Bandbreite: 80M
  • Speichertiefe: 2 GBit (+Stream Mode, mit reduzierter Abtastrate)
  • Eingangsspannung: +/- 50V
  • Einstellbare Trigger Spannung -4/+4V in 10mV Schritten.
  • PWM Ausgangskanäle: 2
  • Unterstützte Decodierung folgender Protokolle: UART/RS-232/485, I2C, SPI, CAN, DMX512, HDMI CEC, I2S/PCM, JTAG, LIN, Manchester, Modbus, 1-Wire, UNI/O, SDIO, SMBus, USB1.1, PS/2, NEC InfraRed, Parallel, etc…

Mit 16 Messkanälen bietet dieser Logikanalysator eine solide Basis für die Arbeit mit elektronischen Schaltungen. Diese 16 Signale können mit einer zeitlichen Auflösung von 500MHz abgetastet werden. Der Hersteller gibt eine Bandbreite von 80MHz an, das heißt, dass man keine Signale höher 80MHz anlegen sollte. Oft neigt man dazu zu denken, dass die Abtastrate eigentlich für viel höhere Signale ausreichen sollte, dennoch darf man nie vergessen das man ein gewisses Oversampling benötigt. Ein weiterer Grund für die Bandbeitenlimitierung könnte die Beschaltung der Kanäle sein, deren Eingangskapazität und die damit verbundene Last, die nicht schnellere Signale zulässt. Oftmals ist die in den Geräten verbaute Logik nicht schneller, es wird mit 500MHz abgetastet, aber es können nur 100 Millionen Werte pro Sekunde gespeichert werden, denn auch dies benötigt Zeit. Bandbreite ist ein sehr interessantes Thema, wichtig für den Nutzer: Überschreite nicht die Bandbreite, denn es kann zu fehlerhaften Messergebnissen führen!

Ein weiterer wichtiger und meist teurer Parameter ist die Speichertiefe. Sie definiert wie viele Messpunkte aufgezeichnet werden können. Je nach Kombination von Anzahl Kanäle und Abtastrate ergibt sich dadurch eine gewisse Zeit, die man ein Signal aufzeichnen kann. Ein Beispiel: Verwendet man eine Speichertiefe von 1MSa (1 Million Samples) bei einer Abtastrate von 1MHz kann man 1 Sekunde lang samplen. Erhöht man die Abtastrate auf 50MHz kann man nur mehr 20ms Aufzeichnen. Die gute Nachricht, darüber braucht man sich bei der Verwendung wenig Gedanken machen, denn die Software zeigt an wie lange mit den ausgewählten Parametern gemessen bzw. aufgezeichnet werden kann.

Eine weitere sehr interessante Kenngröße des LA5016 ist, dass er einen Stream Mode besitzt. Das heißt, dass die Speichertiefe des Gerätes komplett ignoriert werden kann, denn die Messpunkte werden direkt, also “live” an den PC übertragen. Die limitierende Speichertiefe ist dann somit der RAM des PCs, und dieser bietet bei modernen Systemen meist mehr als ausreichend Speicher. Achtung: abhängig von der ausgewählten Kanalanzahl ist die Abtastrate limitiert.

Stream Mode

Lieferumfang
#

Der LA5016 wird mit einem USB-A/B Kabel, farbcodiertem Kabel, simplen Tastköpfen, einer minimalen Anleitung und einer CD geliefert. Eine weitere Stromversorgung ist nicht nötig, denn das Gerät wird direkt über den USB-Bus versorgt. Es ist in der Verpackung alles enthalten, um direkt mit den Messungen beginnen zu können.

Software
#

Da es sich um ein USB Gerät ohne jegliche Anzeigeelemente handelt (außer einer Status LED), kann man dieses Gerät nur in Verbindung eines PCs verwenden. Software gibt es hierbei direkt vom Hersteller. Falls jemand lieber open-source Software verwenden will ist dies mit PulseView (Sigrok) möglich. Ich habe mir beide Optionen angeguckt und ein wenig zusammengefasst.

Kingst VIS (Hersteller)
#

Verwendete Version: Kingst VIS Version 3.6.4

Kingst VIS ist die vom Hersteller eigene Software, sie läuft unter Windows/Linux und Mac.

Kingst VIS Overview

Die Software sieht modern und sehr angenehm aus. Die Bedienung ist einfach und man findet sich schnell zurecht. Einstellung von Abtastrate und Speichertiefe, kombinieren von unterschiedlichen Triggern, automatische Messungen, Verwendung von Markern und Zeitmessungen, Protokollanalyse, … all diese Features sind integriert und einfach zu finden und verwenden.

PulseView (Sigrok)
#

Verwendete Version: Sigrok PulseView 0.5.0-git-32ca796

PulseView Overview

PulseView ist eine open source Software, die nicht nur Geräte von Kingst unterstützt, sondern viele andere Geräte und DIY Logikanalysatoren. Für Fortgeschrittenere Benutzer gibt es sogar sigrok-cli, eine command-line mit der man verschiedene Geräte ansteuern kann. Somit ist es möglich in einem Terminal zu Messen, oder eben dieses Terminal als Basis für eigene Softwareimplementierungen zu nutzen.

Vergleich der Software
#

Kingst VIS
#

  • +einfache Bedienung
  • +Farben der Kanäle passen zu den Kabelfarben
  • +Suchen in dem Decoder
  • +schnelleres und präziseres Arbeiten mit Markern
  • +mehrere Markerpaare verfügbar

PulseView
#

  • -umständlicher Bedienung
  • -PWM Kanäle können inkludiert werden, ich habe aber nicht gefunden wie man sie verwenden kann
  • -Snappen der Marker nicht so “geschmeidig”
  • -Nur 1 Markerpaar verfügbar
  • -Parallel-Decoder nur in Hedxadezimal
  • -Oftmals Probleme zum LA5016 Verbindung aufzubauen
  • -Gespeicherte Session stellt das Projekt nicht zu 100% wieder her
  • -Dark Theme sehr unleserlich
  • -Zeigt nicht Länge der Aufzeichnung an bei Auswahl der Abtastrate und Speichertiefe
  • +Decoder als eigene Datenspur und detaillierte Ansicht
  • +Farben der Kanäle frei konfigurierbar
  • +Genaueres platzieren der Marker da man die Sample Zeitpunkte sieht
  • +mehr Protokolle
  • +Sehr offen und frei konfigurierbar

Grundsätzlich kann man sagen, dass sich beide Applikationen hervorragend zum Messen, Debuggen und Arbeiten eigenen. Mir persönlich gefällt Kingst VIS eine Spur besser, da es sich in der Bedienung und Nutzung angenehmer anfühlt. Gespeicherte Sessions können perfekt wieder hergestellt werden, man kann im Decoder nach Werten suchen und die zwei PWM-Kanäle des LA5016 sind auch verwendbar. Die weiteren Anwendungsbeispiele werden daher nur mehr mithilfe von Kingst VIS vorgeführt.

Verwendung des LA5016 Arduino Uno Testprogramm
#

Ala Basis (zum Debuggen und “Spielen”) soll ein Mikrocontroller Programm verwendet werden, dazu wurde ein Arduino Uno verwendet und mit folgenden Features ausgestattet:

  • main loop die ca. alle 500us ausführt (500us wait)
  • 8 Bit Zähler der kontinuierlich hoch zählt
  • der 8 Bit Zähler wird auf PORTD des Arduino Uno ausgegeben
  • Über eine Serielle Schnittstelle (Pin 8/9 bzw. PB0/1) wird “Counter:X” ausgegeben, X steht dabei für den Wert des Zählers
  • Über SPI wird der Zählerwert ausgegeben

Der Sourcecode ist hier verfügbar. Es ist mit VS Code und dem PlatformIO Addon implementiert. Hilfe und Anleitung gibt es hier.

Bevor gemessen werden kann, muss der LA5016 an den Arduino Uno angeschlossen werden. Dabei ist es völlig egal wie, denn in der Software können die Decoder, und somit auch die Zuordnung, komplett frei eingestellt werden. Um die folgenden Bilder zu verstehen ist es von Vorteil zu wissen welcher Kanal zu welchem Pin verbunden ist.

Arduino LA5016 Funktion
Pin0-Pin7 CH0-CH7 Zähler Ausgang auf PORTD
Pin8 CH8 UART - RX
Pin9 CH9 UART - TX
Pin10 CH10 SPI - SCS
Pin11 CH11 SPI - MOSI
Pin12 CH12 SPI - MISO
Pin13 CH13 SPI - SCLK
Tipp: Um die Signale des Arduino Uno mit den Tastköpfen einfacher abgreifen zu können braucht es lediglich Stiftleisten die man in die Buchsenleisten den Mikrocontrollerboards steckt.

Kingst LA5016 - Arduino Uno

Abtastrate und Speichertiefe
#

Wie zuvor beschrieben ergibt sich aus der Abtastrate (grün - Sample Rate) und der Speichertiefe (rot - Sample Depth) die Dauer der Messung (gelb). Kingst VIS rechnet dabei direkt nach der Auswahl die Dauer der Aufzeichnung aus, das ist durchaus hilfreich, denn man weiß schon bevor man eine Messung startet, wie lange ein Signal aufgezeichnet werden kann.

Kingst VIS - Abtastrate und Speichertiefe 1

In dem Beispiel sieht man, dass man mit 10MHz und 5 Millionen Speicherpunkten 500ms aufzeichnen kann. Ändert man die Speichertiefe auf 50 Millionen Samples können 5 Sekunden Daten aufgezeichnet werden (Bei gleichbleibender Abtastrate).

Kingst VIS - Abtastrate und Speichertiefe 2

Erhöht man nun die Abtastrate auf das maximum von 500MHz sinkt die Aufzeichnungsdauer wiederum auf 100ms.

Kingst VIS - Abtastrate und Speichertiefe 3

Tipp: Ich persönlich definiere zuerst immer die Abtastrate, denn sie muss an das Eingangssignal angepasst werden (um ein vielfaches höher als das Eingangssignal). Danach stelle ich die Speichertiefe auf einen Wert, der mit ein genügend großes Zeitfenster abtastet. Wählt man es zu lange muss man eine Unmenge an Daten durchwühlen, wählt man sie zu kurz, sieht man nicht wonach man sucht.

Trigger
#

Trigger sind Ereignisse die eine Aufzeichnung Starten. In dem Falle des LA5016 und Kingst VIS gibt es folgende Trigger: rising edge, high, falling edge und low. Man kann diese Trigger auf einen spezifischen Kanal legen, oder diese Events über mehrere Kanäle kombinieren.

Will man zum Beispiel ein SPI-Kommando analysieren bietet sich an auf den Chip Select Kanal, mit einem falling edge Event zu triggern (Annahme CS active low). Der Logikanalysator ist dabei scharf gestellt und beginnt mit seiner Aufzeichnung, wenn das Event (fallende Flanke auf CS) eintritt.

Am Beispiel unseres Arduino Uno Test Programms sieht das wie folgt aus:

Kingst VIS - Trigger falling edge

CH10 ist dabei der Chip Select Kanal, auf ihm wird der Trigger falling edge konfiguriert. Danach sieht man, dass diese Flanke genau am zeitlichen Nullpunkt liegt. In der pinken Markierung sieht man die Channel Einstellungen (Zahnrad) und die zuvor erwähnten unterschiedlichen Triggerarten: rising edge, high, falling edge und low (links nach rechts).

Will man nun triggern, wenn die SPI Ausgabe startet und der Zähler bei 0 ist kann man folgendes machen: Channel 10 (Chip Select) Trigger auf falling edge und Channel0-7 (Zähler) alle auf low setzen. Da PORTD den Zählerwert repräsentiert und binär 0 = 0b00000000 entspricht dies genau den Wert bei 0.

Kingst VIS - Trigger falling edge + Zähler=0

Mit solchen Trigger Kombinationen kann man gezielt auf die Events gucken, an denen man wirklich interessiert ist. Oftmals ist es auch interessant, was kurz vor dem Trigger geschieht, auch dies kann man einstellen. Dazu muss man in den Geräteeinstellungen (Device Options) die Trigger Position verändern. Stellt man die Trigger Position zum Beispiel auf 50% wird 50% der Speichertiefe vor dem Trigger befüllt und 50% nach dem Trigger.

Kingst VIS - Trigger Position Einstellung

Das heißt, dass der zeitliche Nullpunkt nun in der Mitte des Signals liegt und man um den Nullpunkt/Triggerpunkt gleich viel Signal sieht.

Kingst VIS - Trigger Position 50%

Aufgabe: Messen der Zähler-Frequenz
#

Wir wissen, dass die main loop 500us wartet, danach Zähler hoch zählt und ihn an PORTD ausgibt. Danach werden UART und SPI gesendet, danach wiederholt sich diese Prozedur. Aufgabe ist es nun, diese Zeit auszumessen, dabei gibt es mehrere Möglichkeiten: Mouse over oder mithilfe von Markern.

Der Anfang ist immer gleich: Abtastrate, Speichertiefe setzen. Trigger definieren und Messung starten. Ein passender Trigger hierfür ist entweder eine steigende oder fallende Flanke auf Channel 0. Channel 0 repräsentiert das LSB (least significant bit) von dem Zähler, und somit ist auch bekannt mit welcher rate dieser hoch zählt (die Zeit zwischen zwei Flanken, falling-rising oder eben rising-falling).

Mouse Over: Kingst VIS hat die Möglichkeit dass man mit der Maus auf die Position fährt die einen interessiert und es werden live (rechts unter “Measurements”) ein paar unterschiedliche Messparameter angezeigt.

Kingst VIS - Messung Mouse Over

Der rote Punkt markiert die Position des Mauszeigers. Die Messergebnisse sieht man in der blauen Markierung. Wie Breite (With) des ausgewählten Signalabschnittes beträgt 1.2ms.

Marker: Mit Marker (Timing Marker Pairs - blaue Markierung) kann man manuell Zeiten messen, auch wenn sie von einem Kanal zu einem andern sind, spätestens in diesem Fall führt kein Weg um sie herum. Um die eine manuelle Messung starten muss man lediglich Marker hinzufügen (rote Markierung (+)). Man kann sie dann aktivieren (grüne Markierung) und an den gewünschten Signalpositionen platzieren.

Kingst VIS - Messung Mouse Over

Die gemessene Zeit lässt sich neben den Marker ablesen: 1.2704ms. Darunter werden auch die absoluten Positionen der Marker angezeigt. Über das “+” können mehrere Marker hinzugefügt werden.

Tipp: Wenn es schneller gehen sollte und man sich nerviges klicken sparen will, kann man über die Tastatur (Zahlen) 1-0 Marker direkt aktivieren und platzieren. Dabei gehören Zahlenpärchen immer zusammen: 1&2, 3&4, …. 9&0.

Aufgabe: Dekodieren des Zählers und auf Wert 113 Triggern
#

Um die 8 Bit des Zählers zu dekodieren, stellt Kingst Vis einen passenden Analyzer bereit. Um ihn hinzuzufügen, muss man auf der rechten Leite auf das “+” unter Analyzers klicken, Parallel auswählen und anschließend die Kanalzuordnung vornehmen. D0 wäre Channel0, D1 Channel1 …. D7 - Channel7, somit hätten wir den gesamten PORTD(8bit) des Arduinos zugeordnet.

Kingst VIS - Parallel Decode 1

Bestätigt man das “Analyzer Parallel” Fenster, bekommt man die definierten Kanäle decodiert dargestellt. Der Wert “versteckt” sich in Channel 0. Passt die Darstellung nicht kann jederzeit das Datenformat geändert werden (Hex, Dec, … ). Dazu einfach beim Analyzer auf das Zahnrad klicken und unter “Display Format” die gewünschte Darstellung auswählen. Ich habe es direkt auf Dec gestellt - dezimal, für uns Menschen am einfachsten verständlich ;)

Kingst VIS - Parallel Decode 2

Man kann nun gut erkennen, dass beim Triggerpunkt/Nullpunkt der Zähler auf 0 steht, und mit jeder Flanke an CH0 hoch zählt.

Will man nun z.B. auf einen Zähler Wert von 113 triggern, muss man lediglich diese Zahl in das binäre Format umwandeln und diesen code als high / low Trigger eintragen. 113 wäre binär 01110001.

Achtung: Binär schreibt man das LSB (least significant bit) an rechter Stelle, wie bei Dezimalzahlen die kleinere Größenordnung steht rechts !

Aus dieser Information schließen wir, dass wir folgende Sequenz als Trigger definieren (CH0 - CH8): high, low , low , low, high, high, high , low. Wem das zu schnell ging: die Trigger Sequenz ist lediglich 01110001 (113) gespiegelt -> 10001110 und dann 1 mit high und 0 mit low ersetzt.

Kingst VIS - Parallel Decode 3

Gratulation! Nun haben wir auch erfolgreich auf einen gewissen Zählerwert getriggert. Trigger sind sehr hilfreich und deren Kombination eröffnet weiterhin eine Unzahl an Möglichkeiten.

Aufgabe: Decoder für UART und SPI
#

SPI und UART Analyzer sind gleich hinzuzufügen wie der Parallel Analyzer. Das bekannte “+” (unter Analyzers) klicken SPI auswählen, konfigurieren - OK. Dabei darauf achten, dass die Kanäle richtig zugeordnet sind, und dass CPOL=0 und CPHA=0 gesetzt ist, dann funktioniert es auch. CPOL und CPHA definieren wie die Daten in und aus dem Chip geshiftet werden. In diesem Fall: Daten werden auf der steigenden CLK-Flanke in den Chip geshiftet, und bei fallender Flanke aus dem Chip geshiftet. (CPOL=0 CPHA=0 -> SPI_MODE0)

Kingst VIS - SPI Analyzer 1

Nun werden auch MISO und MOSI-Daten decodiert und in den entsprechenden Kanälen dargestellt.

Kingst VIS - SPI Analyzer 2

Man kann nun gut erkennen, dass die SPI dekodierten Werte mit den parallel dekodierten Werten übereinstimmen (rot-rot, grün-grün) MISO zeigt keine Daten an, denn es ist kein weiterer IC an den SPI angeschlossen, die Kommunikation wird lediglich an den Logikanalysator weitergeleitet, dieser antwortet jedoch logischerweise nicht ;)

Nun gilt es noch den Kanal9 (blaues Signal) zu dekodieren. Dieses Signal ist die TX-Leitung des UART-Protokolls. Gleich wie zuvor: Analyzer hinzufügen. “UART/RS252/485” auswählen und folgender Konfiguration folgen:

Kingst VIS - UART Analyzer 1

Wichtig ist hierbei die Baudrate - die sollte immer mit der im Source Code verwendeten Geschwindigkeit zusammenpassen. Weiß man sie nicht kann man auch “Use Autobaud” verwenden.

Bei dem UART Analyzer bietet es sich an das Display Format auf ASCII zu stellen, denn es ist üblich Strings/chars über diese Schnittstelle zu schicken. Auch nun erhält man eine Interpretation der Daten direkt in dem Kanal dargestellt. Wie man sieht, stimmen die über UART übermittelten Daten auch mit denen von SPI und dem Zählerausgang an PORTD überein.

Kingst VIS - UART Analyzer 2

Zusammenfassung
#

Der LA5016 bietet eine kostengünstige und komfortable Möglichkeit seine Elektronischen Projekte perfekt zu debuggen, analysieren und Code zu optimieren. Mithilfe der mitgelieferten Software erhält man ein einfach zu bedienendes Werkzeug, mit dem man schnell und effizient Analysen der Schaltkreise durchführen kann. in diesem Beitrag wurden nur ein paar wenige Funktionen des Logikanalysators angesprochen, es gibt noch viel mehr Anwendungsfälle und Möglichkeiten dieses Gerät zu verwenden. Vielleicht darf man sich in der Zukunft auf noch weitere Beiträge, Projekte und praktische Anwendungen freuen, denn die Möglichkeiten sind nahezu endlos.

Sollte jemand den LA5016 besitzen und will sich das durchklicken sparen, gibt es die Konfigurationsdatei, die in Kingst VIS direkt geladen werden kann. Sie enthält alle Analyzer und Einstellungen, die hier verwendet wurden.

Ich wünsche viel Spaß beim Debuggen, entwickeln und optimieren!