Hi zusammen,
ich habe in den letzten Wochen ein paar kleine Programme für den
Logikanalyzer Logicport LA1034 und die Software GTKwave [3], welche zum
betrachten von Wellenformen gedacht ist, geschrieben. Da ich denke, dass
diese Programme auch anderen hilfreich sein können, will ich diese hier
mal posten.
Der Hintergrund dazu war, dass ich mehrere Mitschnitte des LA
zusammenfügen und anzeigen wollte. Dabei ist mir aufgefallen, dass die
original Software des LA nur Daten im nativen Binärformat speichern und
laden kann. Als Alternative kann man die Daten noch im CSV Format
exportieren, aber nicht mehr laden. Also brauchte ich eine andere
Software um die Mitschnitte anzuzeigen. Nach etwas Recherche bin ich auf
GTKwave gestoßen, welches genau dafür geeignet und dazu noch opensource
ist.
Nun habe ich erst mal ein kleines Tool geschrieben, mit welchem ich zwei
exportierte CSV Dateien zusammenfügen kann. Dabei wird das Ende der
ersten und der Anfang der zweiten CSV Datei miteinander verglichen und
nach Überschneidungen gesucht. Anschließend wählt man die passende
Überschneidung aus und verbindet beide Dateien entsprechend zu einer
neuen CSV Datei. Es gibt dabei die Option, das Glitches mit einer
angegebenen Dauer beim Laden entfernt werden sollen. Man kann die zweite
Datei erst zum Triggerzeitpunkt laden und beim Mergen einen maximal
erlaubten Zeitunterschied zwischen den Samplelängen angeben.
Das zweite Tool konvertiert das CSV Format in das VCD Format, welches
von GTKwave gelesen werden kann. Dabei kann man ebenfalls Glitches beim
Laden der CSV Datei entfernen lassen. Bei Signalen die mehr als 1Bit
breit sind (z.B. dekodierte Signale) kann man wählen, ob diese im Hex-
oder Binärformat gespeichert werden sollen.
GTKwave hat keine eingebauten Decoder für irgend welche Busse/Protokolle
(SPI, RS232, etc), kann aber durch eigene Programme dahingehend
erweitert werden. Deshalb habe ich angefangen selber ein paar Decoder zu
schreiben.
Der erste Decoder ist für den SPI Bus und hat folgende default
Parameter:
1
// ChipSelect low-aktiv oder high-aktiv
2
cs_low_active=1;
3
// MSB als erstes Bit oder LSB
4
msb_first=1;
5
// CPOL
6
cpol=0;
7
// CPHA
8
cpha=0;
9
// Busbreite in Bits
10
bus_width=8;
11
// Zu entfernende Impulsdauer (z.B. 0.03s 0.0004 30ms 0.5us)
12
impulse_time=0;
Er sucht nach Signalnamen mit "ss" oder "cs" für Chip Select, nach
"miso" und "mosi" für die beiden Datenleitungen und nach "sck" oder
"clk" für die Clock Leitung. Es muss mindestens die Chip Select, eine
Datenleitung und Clock vorhanden sein. Wenn miso und mosi vorhanden sind
werden beide dekodiert.
Der zweite Decoder ist für das RS232 Protokoll und hat folgende default
Parameter:
1
// Bitrate
2
bitrate=9600;
3
// Anzahl Startbits
4
start_bits=1;
5
// Anzahl Bits pro Datenpaket
6
data_bits=8;
7
// Anzahl Stopbits
8
stop_bits=2;
9
// Paritaet (N,E,O)
10
parity=N";
11
// MSB als erstes Bit im Stream
12
msb_first=0;
13
// Pegel entspricht TTL oder RS232 Level
14
ttl_level=1;
15
// Exemplarisch bei dem ersten Datenpaket die Sampletime per Marker mit anzeigen
16
show_sampletime=0;
17
// Zu entfernende Impulsdauer (z.B. 0.03s 0.0004 30ms 0.5us)
18
impulse_time=0;
Er sucht nach Signalnamen welche "tx" oder "rx" enthalten. Sollen TX und
RX dekodiert werden, dann muss der Decoder auf beide Leitungen einzeln
angewendet werden.
Der dritte Decoder ist für das 2x24Bit Protokoll digitaler Schieblehren.
Dieser Decoder zeigt nicht nur die zwei 24Bit Werte, sondern auch den
umgerechneten Abstand der Schieblehre an. Die default Parameter sind:
1
// Metrische [mm] oder imperiale [in] Maßeinheit anzeigen
2
metric=1;
3
// Zu entfernende Impulsdauer (z.B. 0.03s 0.0004 30ms 0.5us)
4
impulse_time=0;
Er sucht nach Signalnamen welche "dat" und "clk" oder "sck" enthalten.
Die Tools und Decoder sind alle in meinem SVN Repository verfügbar per
HTTP unter [1] oder mit SVN unter [2]. Die Programme sind in Java
geschrieben und das Repository kann direkt mit Eclipse ausgecheckt und
compiliert werden. Um die Decoder mit GTKwave nutzen zu können muss der
jeweilige Decoder als JAR exportiert und eine Startdatei dafür erstellt
werden. Unter Linux könnte eine solche Startdatei z.B. wie folgt
aussehen:
Die beiden übergebenen Parameter sind optional und würden die internen
default Werte übersteuern. Diese Datei muss ausführbar sein, damit sie
von GTKwave gestartet werden kann.
In GTKwave selektiert man nun alle nötigen Signale für den Decoder und
drückt F4, wodurch eine Art kombiniertes Signal erstellt wird. Auf
diesem neuen Signal kommt man per rechter Maustaste auf dem
Signalnamen"->Data Format->Transaction Filter Process->Enable and
select" in das Menü für die Decoder. Dort kann man in dem "args" Feld
ebenfalls die internen default Parameter des Decoders vor dem Laden
übersteuern. Nun klickt man auf "add trans filter to list", wählt NACH
dem Laden der Startdatei den Decoder in der Liste aus und klickt auf ok.
In GTKwave wird nun anstatt des Signals der dekodierte Wert dargestellt.
Alle Tools/Decoder sind unter [1] per HTTP oder unter [2] per SVN im
Verzeichnis "logicanalyzer" verfügbar. Da der Server ein selbst
signiertes Zertifikat benutzt bekommt ihr vermutlich eine Warnmeldung,
wenn ihr darauf zugreifen wollt. Diese kann aber getrost ignoriert
werden. :)
Zum Testen der Tools und Decoder könnt ihr in der Logicport Software das
Beispielprojekt "7. I2C, SPI, RS232 Interpreters.lpf" laden. Um den
Schieblehren Dekoder zu testen habe ich eine Datei angehängt, welche ich
damals aufgenommen hatte.
Ich hoffe, meine mittlerweile ziemliche lange Beschreibung war
ausführlich genug. Falls nicht helfe ich natürlich gerne weiter. :)
Ciao,
Rainer
[1] https://quakeman.homelinux.net/viewvc/public/trunk/
[2] https://quakeman.homelinux.net/svn/public/trunk/
[3] http://gtkwave.sourceforge.net/
Ich habe mir vor ein paar Tage ein Rigol DS1052E gekauft (und gehackt).
Deshalb habe ich mein CSV2VCD Konverter Tool mal erweitert, so dass es
jetzt auch CSV Dateien vom Rigol DS1052E lesen kann (noch im beta
Stadium). Somit können jetzt auch die Aufzeichnungen vom Oszi in GTKwave
dargestellt werden. Da GTKwave leider nur positive Zeiten darstellt,
musste ich die Daten vorerst alle zeitlich nach rechts verschieben. Aber
ich werde mit dem GTKwave Author mal diesbezüglich sprechen, ob man das
nicht ändern kann.
Ich habe noch vor ein weiteres kleines Tool zu schreiben, welches einen
Mitschnitt analoger Daten in einer VCD Datei anhand eines
benutzerdefinierten Schwellwertes in digitale Daten umwandelt. Damit
könnte man dann z.B. einen Bus im Oszi mitschneiden (SPI, RS232, etc)
und anschließend die analoge Aufnahme digitalisieren. Dann in GTKwave
mit Hilfe meiner Bus-Analyzer diese Aufnahme dekodieren.
Klingt nach Spaß, oder? :)
Die restlichen Tools habe ich teilweise auch erweitert/verändert. Steht
alles in den SVN Logs.
Ciao,
Rainer
Ich habe mit dem GTKwave Author gesprochen und er hat das Problem
behoben. Nach einer kleinen Anpassung an mein Programm werden nun auch
negative Zeiten in GTKwave korrekt angezeigt.
Ciao,
Rainer
PS: Wenn ein Moderator diesen Thread liest, dann kann er ihn doch bitte
in den Bereich Codesammlung verschieben. :)
Unter Linux ist das Compilieren deutlich einfacher habe ich das Gefühl.
:)
Aber nach längerem herumexperimentieren habe ich es mittlerweile endlich
geschafft GTKwave unter Windows zu compilieren. Falls Jemand Interesse
an der Windows Version hat, dann einfach kurz bescheid geben.
Die online verfügbare Windows Version auf der Homepage ist nämlich
leider extrem veraltet und hat viele neue Features nicht drin.
Ciao,
Rainer
Leider gibt es keine aktuelle Windows Version von GTKwave. Deshalb habe
ich mal auf meinem Webserver ein Verzeichnis eingerichtet, in welchem
ich meine selber compilierten Versionen aus dem aktuellen
Entwicklerzweig reinlege. Der Dateiname lautet immer gtkwave-xxx.7z,
wobei xxx für die Revision im GTKwave SVN Repository steht.
Denn in der alten win32 Version, welche auf der Homepage verlinkt ist,
fehlen fundamentale Funktionen um die Interpreter zu nutzen.
Die aktuelle Version findet ihr unter [1].
Ciao,
Rainer
[1] http://quakeman.homelinux.net/gtkwave/
Ich habe ja noch ein Fluke Scopemeter 123, welches mit der Software
FlukeView unter Windows ausgelesen werden kann. Und diese Software kann
ebenfalls in ein eigenes CSV Format speichern.
Deshalb habe ich dieses CSV Format meinen Tools nun auch noch
beigebracht. :)
Ciao,
Rainer
Ich habe mal in dem Verzeichnis auf meinem Webserver (siehe 2 Posts
weiter oben) alle Tools compiliert als lauffähige JAR Dateien abgelegt.
Für Windows sind auch exemplarisch Batchdateien zum aufrufen der
Interpreter aus GTKwave heraus vorhanden. Für Linux muss nur die Syntax
etwas angepasst und in ein Shellskript kopiert werden. :)
Ciao,
Rainer
Ein weiteres Tool ist hinzugekommen. Mit diesem kann man beliebig viele
einzelne CSV oder VCD Dateien zu einer einzigen zusammenfügen.
Somit können nun mehrere aufgenomene Signale in einem Fenster mit
GTKwave angeschaut werden. Das ist hilfreich, wenn man z.B. mehrere
Mitschnitte des gleichen Signals mit unterschiedlichen Signalverläufen
darstellen und vergleichen will. Voraussetzung ist, dass alle Signale
mit der gleichen Zeitbasis aufgenommen wurden.
Das neue Tool heisst LogicPort_File_Add und liegt auch vorcompiliert auf
meinem Webserver.
Ciao,
Rainer
Ich habe die Tools File_Add, CSV2VCD und Analog2Digital um das native
Rigol WFM Binärformat erweitert. Erste Tests verliefen ganz gut, aber
ich habe noch keine intensiven Tests gemacht. Die Tools auf meiner
Homepage sind schon aktualisiert.
Das Rigol CSV Format habe ich wieder rausgeschmissen, denn die
angegebenen Zeiten in der Datei haben teilweise zu wenige
Nachkommastellen. Dadurch sind etliche doppelte Zeiten enthalten, was
das Format unbrauchbar macht. Das WFM Format dagegen ist ein
Binärformat, welches nicht diese Probleme hat. Es dauert beim Speichern
im Oszi auch nur wenige Sekunden gegen ~10 Minuten für das CSV Format
bei voller Speichertiefe. ;)
Wenn Dateien mit vielen Samples (z.B. WFM mit 1 MSamples) verarbeitet
werden sollen, dann beim Starten der Tools bitte mehr Speicher zuordnen.
Andernfalls kann es sehr lange dauern, bis die Dateien verarbeitet
werden.
Mehr Speicher zuordnen mit folgenden Parametern beim Starten:
-Xms64M -Xmx1280M
Dadurch werden initial 64MB reserviert und maximal 1280MB erlaubt.
Beim Laden einer 1MB großen WFM Datei hat Java hier schon ~800MB Ram
verbraucht. Soviel zur effektiven Speichernutzung. ;)
Ciao,
Rainer
Hi,
unter dem Link weiter oben habe ich vorcompilierte Jar Dateien liegen.
Hier noch mal der Link unter [1]. Habe schon länger keine Änderungen
mehr dran vorgenommen, aber es sollte soweit alles laufen. :)
Ciao,
Rainer
[1] http://quakeman.homelinux.net/gtkwave/
Hi,
um ehrlich zu sein habe ich mir den Aufbau des LPF Formats nicht genau
angeschaut gehabt. Ich benutze das exportierte CSV Format von LogicPort.
Dieses war einfacher einzulesen und beinhaltet auch nur die gewählten
Spalten und nicht immer alles. :)
Eventuell werde ich mal schauen ob ich das LPF Format ebenfalls gut
parsen kann. Dann könnte ich auch direkt solche Dateien einlesen und
auch wieder schreiben. Aber momentan habe ich dafür leider keine Zeit,
da ich mit meiner Bachelorarbeit anfangen muss.
Ciao,
Rainer
@ Fox Mulder
Hallo Rainer,
entschuldige wenn ich etwas OT werde. Du erwähnst mehrfach Linux als
Umgebung für deine Tools. Hast du es vielleicht auch geschafft die
Logicport Software selbst unter Linux (mit Wine, nicht VMWare) zum
laufen zu bringen? Der Demomode läuft bei mir mit Wine problemlos, aber
die USB Kommunikation klappt nicht, der Logicport wird nicht erkannt.
lsusb sieht ihn, es scheint ein Wine Treiber- oder Zugriffsproblem zu
sein. Mit USB Treibern habe ich leider weder unter Linux noch Windows
Erfahrung und Intronix ist, höflich formuliert, nicht hilfreich. Hast du
eine Lösung oder lässt du die Software unter Windows laufen?
ZF schrieb:> entschuldige wenn ich etwas OT werde. Du erwähnst mehrfach Linux als> Umgebung für deine Tools. Hast du es vielleicht auch geschafft die> Logicport Software selbst unter Linux (mit Wine, nicht VMWare) zum> laufen zu bringen? Der Demomode läuft bei mir mit Wine problemlos, aber> die USB Kommunikation klappt nicht, der Logicport wird nicht erkannt.> lsusb sieht ihn, es scheint ein Wine Treiber- oder Zugriffsproblem zu> sein. Mit USB Treibern habe ich leider weder unter Linux noch Windows> Erfahrung und Intronix ist, höflich formuliert, nicht hilfreich. Hast du> eine Lösung oder lässt du die Software unter Windows laufen?
Ich betreibe den Logicport nur unter Windows. Unter Linux mit einem
Windows in einer VMware sollte es auch gehen. Aber mit Wine kann ich dir
auch nicht helfen.
Grundsätzlich ist der USB Anschluss im Logicport mittels einem einfachen
FTDI FT245BL USB zu RS232 Wandler aufgebaut. Also um diesen per Wine zum
laufen zu bekommen soltest du mal speziell nach der Unterstützung für
diese FTDI USB Chips in Wine Google befragen. Eventuell hat da schon mal
Jemand einen Weg gefunden.
Ich habe in den einzelnen Tools ein weiteres Ausgabeformat hinzugefügt.
Dabei handelt es sich um das PWL Format, welches automatisch gewählt
wird, wenn die Dateiendung .pwl lautet.
Dieses Format wird von LTspice IV verwendet um z.B. für Spannungsquellen
einen vordefinierten Verlauf zu erzeugen. Da LTspice leider immer die
Kurve zwischen den Punkten aproximiert ist dieses Format nur für analoge
Signale wirklich brauchbar. Ein digitales Signal sieht in LTspice nicht
mehr so aus wie es ursprünglich ausgesehen hatte.
Man kann jetzt also ein aufgenommenes analoges Signal vom Oszi im WFM
Format in eine Signalfolge für LTspice umwandeln. Damit kann man ein
reales Signal für die Schaltungssimulation verwenden, was mir persönlich
einiges wietergeholfen hat. :)
Ciao,
Rainer
Ich habe ein Problem mit der Ausgabe des VCD Formats festgestellt.
Anscheinend werden keine Fließkommazahlen für die Zeitbasis unterstützt,
was natürlich etwas problematisch ist. Das ist mir aber erst
aufgefallen, als ich neulich eine WFM Datei mit sehr ungerader Zeitbasis
ins VCD Format konvertiert hatte. GTKwave hat das Signal zwar
dargestellt, aber die Skalierung der X Achse war nicht korrekt.
Als Workaround skaliere ich nun die Zeitbasis mit dem Faktor 1000 und
verwende dann die nächst kleinere Zeiteinheit. Anschließend wird die
Zahl auf die nächste passende Ganzzahl gerundet. Das sieht dann ungefähr
so aus:
1,2345678ms -> 1235µs
Weil dadurch nur die ersten 3 Nachkommastellen berücksichtigt werden ist
die Skalierung leider nicht 100% korrekt. Aber momentan habe ich noch
keine bessere Idee dafür.
Die Tools auf meiner Homepage habe ich dahingehend schon aktualisiert.
Ciao,
Rainer
Die Adresse meines Servers hat sich von quakeman.homelinux.net auf
quakeman.mooo.com geändert. Der blöde Zwang sich alle 30 Tage auf der
dyndns Webseite anzumelden, damit der Account nicht verfällt, hat mich
endgültig genervt.
Ciao,
Rainer
Ich habe das Wave Audio Dateiformat zum Lesen integriert. Es werden aber
nur ganz spezielle Wave Dateien unterstützt mit 1 oder 2 Kanälen
unkomprimiert (PCM) und 16Bit/Sample Auflösung.
Ich erstelle solche Wave Dateien mittels diverser SDR Software wie z.B.
SDRsharp oder GQRX. Alternativ geht auch rtl_sdr, nachdem das
Ausgabeformat mit sox in eine Wave Datei umgewandelt wurde. Somit kann
man sich das aufgezeichnete Signal nun auch in GTKWave anschauen. :)
Ciao,
Rainer
Hi,
das Tool habe ich in Java selber geschrieben. Eine fertig compilierte
Version findest du unter [1]. Den Quellcode kannst du aus dem SVN von
mir unter [2] ziehen.
Der Server verwendet https mit einem selber erstelltem Zertifikat.
Deshalb wird der Browser vor diesem Zertifikat warnen. Die Warnung
einfach weg klicken um auf die Webseite drauf zu kommen. Ich hatte
meinen unverschlüsselten Port vor kurzem mal abgeschaltet und ein
offizielles SSL Zertifikat ist mir zu teuer. ;)
Ciao,
Rainer
[1] https://quakeman.mooo.com/gtkwave/
[2] https://quakeman.mooo.com/viewvc/public/trunk/
miki schrieb:> kann dein tool auch analog signale (floats) konvertieren?
Das kommt auf das Eingangsformat an.
Ich habe das Tool damals nur dafür geschrieben, um teilweise sehr
spezielle Formate (LogicPort CSV, Rigol WFM, Wave Audio, Audacity TXT)
in das allgemeine VCD Format zu konvertieren. Es kann z.B. keine
allgemeinen CSV Dateien einlesen, sondern nur die von der LogicPort
Software exportierten CSV Dateien der digitalen Signale.
Das Tool um neue Formate zu erweitern sollte aber nicht so schwer sein,
wenn man Java programmieren kann.
> kann GTKwave analog signale (floats) darstellen?
Ja kann es, dafür muss man nur die Darstellung des Signals auf "analog
step" oder "analog interpolated" stellen. Die Bedienung von GTKWave ist
etwas gewöhnungsbedürftig, aber wenn man sich damit etwas beschäftigt
hat biete es doch ziemlich viele Features. Und die Tatsache, dass es
open source ist kommt mir sehr entgegen. :)
Ciao,
Rainer