Mit dem Logic Analyzer am Bus lauschen
Es hat schon ein paar Wochen gedauert, doch jetzt ist er doch endlich angekommen, mein 24 MHz Logic Analyzer. Ich habe ihn für knapp 6 Euro direkt aus China oder für etwas ehr und dafür schneller für 10 Euro bei amazon aus Deutschland, aber dafür dann schon am nächsten Tag da.Doch was macht ein Logic Analyzer überhaupt? Kurzum: er misst an seinen Eingangskanäle fortlaufend die Spannung, entscheidet je nach Schwellenwert, ob ein High oder ein Low anliegt und protokolliert die High / Low -Werte. Mit der nötigen Software kann man sich dann die Bit-Verläufe und das Timing anschauen. Aber die Software kann noch mehr. Doch dazu später mehr.
Was ein Logic Analyzer - zumindest unser Billig Analyer - nicht tut, ist analoge Signale messen. Er misst nur digitale und dass auch nur in gewissen Grenzen (bis 5.25 Volt). Aber da der Raspberry Pi von Haus eh nur mit Digitalen Signalen arbeitet, ist das ja wie maßgeschneidert für ihn.
Die technischen Daten dieser Version, also einem kleinen schwarzen Kästchen mit 8 Kanälen und 24 MHz, weißem Aufkleber, einer roten Power-LED oben und einer grünen LED unten, sind:
- Sampling rate up to: 24 MHz , can be 24MHz. 16MHz, 12MHz, 8MHz, 4MHz, 2MHz, 1MHz, 500KHz, 250KHz, 200KHz, 100KHz, 50KHz, 25KHz
- 8-channel
- Input voltage range: -0.5V to 5.25V
- Input Low Voltage: -0.5V to 0.8V
- Input High Voltage: 2.0V to 5.25V
- Works with 5V, 3.3V, 2.5V, 2.0V systems. May work with 1.8V but not recommended
- Input Impedance: 1Mohm || 10pF (typical, approximate)
- The logic for each channel sampling rate of 24M/s. General applications around 10M, enough to cope with a variety of occasions
- Crystal: +/-20ppm, 24MHz
- Error/Accuracy: pulse-width measurement: +/- 42ns (at 24MHz)
Dabei wird alles von -0.5V bis 0.8V als Low gewertet und alles von 2.0V bis 5.25V als High. Bei 5.25 Volt ist auch die absolute Obergrenze, die man dem Gerät zumuten sollte. Man sollte hier keine Spannungen von 12V oder so anlegen, dann kann man sicher sein, dass das Gerät kaputt geht. Für ein altes RS232-Protokoll mit 12V zu analysieren muss man ein Modul, einen RS232 Serial Port to TTL Digital Converter, zwischenschalten, dass die Spannungen absenkt.
Der Logic Analyer wird an einen USB-Port am PC angeschlossen, der zur Protokollierung genutzt wird. Je nach Aufzeichnungslänge und Samplingrate können nämlich mehrere Gigabytes zusammenkommen. Ein geräteinterner Speicher würde das Gerät extrem verteuern. Da mag es wohl auch Geräte geben, die das haben, oder bei denen man die Schwellenwerte für High und Low einstellen kann und die über analoge Eingänge verfügen, aber sicher nicht in dieser Preisklasse.
Am PC wird das Gerät zunächst nicht erkannt. Dazu muss man zuerst einen Treiber installieren. Ein passender Treiber wird gleich mit installiert, wenn man sich die Demo-Software für die Geräte von Saleae unter https://www.saleae.com/downloads/ herunterlädt und ausführt. Der Logic Analyzer wird dann erkannt und man mit ihm darauf zugreifen. So ganz im Sinne des Erfinders (sprich Saleae) dürfte das allerdings nicht sein, dass man ihre Software mit einem Clone verwendet. Ich habe auch noch nicht herausgefunden, wo die Einschränkung der Demo-Software ist, aber evtl. sollte man in Betracht ziehen für den professionellen Einsatz ein Originalgerät von Saleae zu kaufen, wenn man die Software längerfristig benutzen will. Es gibt aber auch eine Open Source Alternative von Sigrok namens PulseView, die man unter https://sigrok.org/wiki/Downloads downloaden kann. Damit muss man dann kein schlechtes Gewissen mehr haben, da es sich um freie Software handelt.
Als erstes Beispiel soll uns den schon einmal mit dem Oszilloskop untersuchter Musik-Lautsprecher dienen. Wir erinnern uns: Aus den ursprünglich falschen 392 Hz für die Note A haben wir die korrekten 440 Hz gemacht. Es bleibt aber immer noch das Problem, dass es kratzt, wenn wir im Hintergrund eine Datei über Samba speichern. Das hätte ich gerne mittels des Logic Analyzers visualisiert.
Die Kurve auf dem Oszilloskop zeigt eine Rechteck-Kurve mit Puls-längen von 2.270 ms, also 440.414 Schwingungen pro Sekunde, die man klar in den Schwellenwerten des Logic Analyzers liegen und von diesem interpretiert werden dürften.
Wir klemmen also das GND-Kabel des Logic Analyzers (bei dessen Pins ganz unten rechts, siehe Etikett) an die Masse der Senso-Platine und das Kabel von Kanal 0 (schwarz) an den Lautsprecher.
Dann lesen wir das Signal ein, indem wir ein langes A spielen:
sound (440,10)
und dann in Logic, der Software von Saleae, auf Start klicken.Klicken wir auf die kleinen Pfeile rechts, dann können wir Dauer und Samplingrate einstellen. Eine Samplingrate von 2 kS/s, also 2000 Abtastungen pro Sekunde würde ausreichen für unser 440 Hz-Signal. 25 kS/s markieren aber den untersten Wert, also nehmen wir den. Man kann aber auch gerne noch höher gehen, wenn der Speicher im PC nicht knapp ist.
Nachdem ich ein wenig hinein gezoomt habe, lassen sich die High/Lows gut erkennen. Fährt man mit der Maus über das Signal, dann werden auch gleich die Signallängen und die Frequenz angezeigt. 439.3 Hz kommen hin, aber warum ist das High nur so kurz und das Low so lang? Haben wir hier einen Fehler im Code und das sleep() vergessen, nachdem wir den Pin auf High gesetzt haben? Schauen wir einmal nach:
def sound(freq, t): # Diese Funktion erzeugt eine bestimmte Zeit t lang
pulseLen = 1.0/freq/2.0 # die Frequenz freq
pulseLen *= .877 # Ausgleich, um auf richtige Frequenz zu kommen, gemessen mit dem Oszilloskop
anz=int(t/pulseLen/2)
for i in range (0,anz):
GPIO.output(buzzer, GPIO.HIGH)
time.sleep (pulseLen)
GPIO.output(buzzer, GPIO.LOW)
time.sleep (pulseLen)
Nein, das sieht gut aus. Das Oszilloskop-Signal war ja auch okay. Vielleicht hat es etwas mit dem Lautsprecher zu tun, der die Flanke sofort wieder nach unten unter die High-Schwelle des Logic Analyzers zieht, wenn er beginnt, den Ton auszugeben? Messen wir doch einfach direkt am Pin am Raspberry Pi. Also dort an GND und Pin BCM 5. Jetzt hören wir zwar nichts mehr, aber wir haben ein wesentlich besseres Signal in Logic:Die Highs und Low sind jetzt gleich lang und wechseln sich schön regelmäßig ab. Es lag also am Lautsprecher und nicht der Software.
Zoomt man heraus, dann sieht man ein schön regelmäßiges Signal ohne Störungen.
Wollen wir doch jetzt einmal eine Störung verursachen, indem wir beim Ton abspielen eine Datei speichern und uns anschauen, wie dass dann aussieht.
Aha! Da gibt es Aussetzer und ein paar High-Low-Wechsel sind einfach nicht vorhanden. Wahrscheinlich sagt sich das Raspbian, das Speichern auf SD-Karte systemkritisch ist und der Rest der Prozesse mal kurz innehalten müssen. Dem könnte man evtl. begegnen, indem man das Python-Script mit noch höherer Priorität laufen ließe. Evtl. wäre dann ein Kratzen weg. Normalerweise sollte das der Befehl
sudo nice -19 python musik.py
bewerkstelligen, doch der bleibt leider wirkungslos.Mit dem Oszilloskop hätte wir zwar den Verlauf nicht so schän einsehen können, aber der große Vorteil eines Logic Analyzers ist auch, dass man mehrere Kanäle zeitlich parallel beobachten kann. Das ist sehr hilfreich bei der Beobachtung und Fehlersuche bei Protokollen.
Nehmen wir z. B. das Protokoll, dass ich zum Ansteuern meiner LC-Displays benutze. Dort spreche ich ja die De-facto-Industriestandard-Steuereinheit für LCDs, Hitachi HD44780 mit ihrem Protokoll an und benutze dafür die Pins E (Enable-Leitung), RS (Kommando/Zeichen-Umschaltung) und 4 Datenleitungen für den 4-bit-Mode.
Dazu gibt es natürlich auch ein Datenblatt, wie das Protkoll zu benutzen ist, also welche Signale wann, in welcher Länge und wofür zu benutzen sind:
Damit kann ich dann meine Signale in der Logic Analyzer vergleichen und schauen, wo es nicht passt und so herausfinden, warum das LCD nicht das macht, was ich vorgesehen habe.
Besonders wenn der Code komplexer ist, hilft eine Anzeige von dem "was wirklich herauskommt" sehr, wenn man im Code einfach keinen Fehler finden will.
Aber es geht auch wesentlich einfacher. Man kann in Logic nämlich einfach eine Protokoll-Analyse-Ebene hinzufügen. Dazu klickt man rechts auf das + im Kasten Analysers, dann auf Show more analyzers und dann auf HD44780.
Im folgenden Dialog stellt man dann ein, welche Leitung welches Signal hat.
Die Leitungen sollte man vorher im Hauptdialog sprechend benannt haben. Das kann man ganz einfach, indem man auf deren Namen klickt.
Dann fällt die Zuordnung wesentlich leichter. Ansonsten ist der Dialog selbsterklärend.
Dann müssen nur noch die entsprechenden Kabel auf das Breadboard parallel zu den Signalleitungen zum LCD eingesteckt werden. Dabei helfen die Farben der Kabel, die man möglichst vorher so in den Logic Analyzer eingesteckt hat, dass sie mit den Kanalfarben in der Software übereinstimmen.
Dann müssen nur noch ein paar Sekunden gesamplet werden.
Da ich nicht unter Speicherknappheit leide, habe ich 10 Sekunden und 1 MS/s gewählt.
Also: Kurz vor dem Start des Monitor-Programms, das das LCD befüllt, den Start-Button klicken und aufzeichnen lassen.
Das Ergebnis sieht dann in etwa so aus:
Ich bin gleich einmal an eine interessante Stelle gescrollt. Unten rechts unter Decoded Protocols hat man übrigens eine Liste der Ereignis, dessen Listenpunkte man anklicken und so direkt zum Signal des Ereignisses srpingen kann.
Im Sichtfeld nun die Übertragung von Temperatur, Datum und Uhrzeit an das LCD. Weiß auf blau hat die Software nun die Dekodierung des Signals angezeigt, die sie automatisch vorgenommen hat. Sehr praktisch. Nunja, solange man nicht einen großen Fehler in das Protokoll programmiert hat, dann kann die Logic-Software das fehlerhafte Protokoll natürlich auch nicht mehr dekodieren.
Außerdem ist dies eine sehr schöen zeitliche Dokumentation dessen, was bei der Übertragung auf den Leitungen passiert:
- RS: bei Low befindet sich man im Kommandomodus. Hier wird die Speicheradresse übergeben, an die folgend Zeichen (High) geschrieben werden.
- E: nach jedem Kommando oder Zeichen wird einmal die Enable-Leitung auf High gesetzt, um anzuzeigen, dass die 4 Bits bzw. Datenleitungen mit High (1) und Low (0) konfiguriert sind
- Data 1-4: im 4-Bit Mode braucht jedes Byte zwei Zyklen. Die Punkte stehen für ein Bit. Ist dort High, ist es eine binäre 1, Low steht für eine binäre 0.
Ich möchte aber noch kurz die Open Source Software PulseView von Sigrok vorstellen. Statt mit dunklem kommt diese mit hellem Design. Vom Prinzip funktioniert sie ganz ähnlich. Es kann allerdings immer nur eine Logic Analyzer Software gleichzeitig laufen, denn Logic als auch PulseView wollen den Treiber exklusiv nutzen.
Bei PulseView muss man ein bisschen umdenken. Hier gibt man die Anzahl der Messungen und die Messfrequenz an. Wieviele Sekunden das ausmacht, muss man sich selbst ausrechnen. Ich persönlich finde hier Logic bequemer und praxisnäher. Wählen wir also 1 MHz und für 10 Sekunden dann 10 MegaSamples.
Die Kanäle sind hier auch mit D0 bis D7 benannt und mit den gleichen Farben versehen. Das Benennen der Kanäle ist hier genauso leicht durch Klick auf den Namen zu bewerkstelligen. Statt Start klickt man in PulseView auf Run. Soweit alles identisch.
Die Darstellung der Signal-Kurven ist ebenfalls gleich, nur wird bei PulseView leider nicht automatisch die Signallänge / Frequenz beim drüberfahren mit der Maus angezeigt. Hier muss man die Marker mit einem Tool selbst setzen. Vorteil auf der anderen Seite ist dann natürlich, dass man selbst bestimmt, welche Abschnitte man messen will.
Der große Vorteil von PulseView versteckt sich hinter dem grünen Icon ganz rechts. Hier hat man eine große Auswahl an Dekodern, die die von Logic bei Weitem übertrifft. Dummerweise fehlt hier ausgerechnet der HD44780-Dekoder. Er ist wohl für die Entwicklung vorgeschlagen, aber noch wurde nicht mit ihr begonnen.
Beide Programme haben also ihre Daseinsberechtigung. Wenn das benötigte Protokoll in einem nicht vorhanden ist, so vielleicht im anderen.
Ein Logic Analyzer eignet sich auch dafür, an fremden Bussen zu lauschen. So kann man ggf. ein Protokoll identifizieren oder analysieren und verstehen, wie es aufgebaut ist und funktioniert. Als dann kann man die Übertragungen abhören und dekodieren und waiß, was über eine Leitung fließt. Eventuell findet man auch heraus, dass eine der Datenleitungen nicht mehr sendet, obwohl sie sollte. Ein Logic Analyzer hilft also auch bei der Fehlersuche in fremden, digitalen Schaltungen. Sein Geld ist er auf jeden Fall wert.