Oszilloskop-Daten auslesen

Zurück zur eigentlichen Oszilloskop-Funktion. Welche Datenpins des ADC sind mit den Pins des FPGA verbunden?

Stellenmarkt
  1. HPC Administrator (m/f/x)
    Max-Planck-Gesellschaft für empirische Ästhetik, Frankfurt am Main
  2. Information Security Manager ADC Locations (m/w / diverse)
    Continental AG, Lindau
Detailsuche

Ich habe mich mittlerweile einige Wochen mit MyHDL beschäftigt und dabei einige FPGA-Module gebaut, die über einen Wishbone-Bus miteinander kommunizieren.

Als Erstes entstand ein SPI-Slave, der die drei Leitungen für die FPGA-Konfiguration benutzt. Normalerweise benötigt eine SPI-Schnittstelle vier Leitungen. Deshalb kombinierte ich die Leitungen für Serial Data Out (SDO) und Serial Data In (SDI) in einer bidirektionalen SDIO-Leitung. Ich versuchte, den Linux-Treiber spi-gpio zu modifizieren, damit er mit dieser einzelnen Leitung funktioniert, allerdings stellte sich das als zu schwierig heraus. So bastelte ich mir einen einfachen Treiber selbst zusammen.

Dieses SPI-Slave-Modul fungiert als Master des Wishbone-Busses und kann einen angeschlossenen Wishbone-Slave steuern. Ich funktionierte meinen MyHDL-Code zum Auswerten von Pin-Flanken um, so dass er als Wishbone-Slave fungierte. Das war relativ einfach. Schwieriger war es, einen Bus-Multiplexer zu schreiben, mit dem ich mehrere Wishbones-Slaves mit einem Wishbone-Master verbinden konnte. MyHDL funktionierte nicht immer so, wie ich es erwartet hatte und hatte verschiedene Einschränkungen, deshalb brauchte ich einige Wochen, bis es funktionierte.

Golem Karrierewelt
  1. Jira für Systemadministratoren: virtueller Zwei-Tage-Workshop
    02./03.06.2022, virtuell
  2. Masterclass Data Science mit Pandas & Python: virtueller Zwei-Tage-Workshop
    29./30.09.2022, Virtuell
Weitere IT-Trainings

Nachdem ich das alles zusammenhabe, erzeuge ich einen RAM-Baustein mit zwei Verbindungen im FPGA. Eine Verbindung besteht mit einem Wishbone-Slave, so dass der RAM-Inhalt vom SoC ausgelesen werden kann. Die zweite Verbindung besteht mit dem ADC des Oszilloskops. Im Takt des ADC werden die 32 symmetrischen Signale vom ADC im RAM gespeichert, bis er voll ist. Ein weiterer Wishbone-Slave mit einem einzelnen Bit-Register dient zum Starten und Stoppen des Speichervorgangs (Capturing).

Das erste Capturing

Mit dem Kommandozeilenprogramm sox auf einem Linux-PC spiele ich eine 3-KHz-Sinuskurve ab, die ich mit einem Tastkopf an Kanal 1 des Oszilloskops auswerte.

play -n synth 0 sin 3000

Ich boote wieder das Oszilloskop mit der Owon-Firmware und warte, bis ich eine Sinuskurve auf dem Bildschirm sehe. Dann führe ich wieder ein Soft-Reset durch und lade Linux. Dabei läuft der ADC weiter, so entdeckte ich damals die Pins, mit denen der ADC mit dem FPGA verbunden ist. Ich sehe außerdem, dass der ADC mit 100 MHz getaktet wurde. Deshalb modifiziere ich den FPGA-Code zum Speichern der Daten, es wird jetzt nur noch jede hundertste Abtastung im RAM gespeichert. Meine Abtastrate beträgt also 1 Msamples pro Sekunde.

Welche Pins bekommen welches Signal?

Der ADC liefert 32 symmetrische Signale an die FPGA-Pins. Die 32 Signale sind aufgeteilt in vier Gruppen mit je acht Pins, jeder Pin entspricht einem Bit. Tastet der ADC nur einen Kanal ab, werden dafür alle vier Gruppen genutzt und miteinander verzahnt übermittelt. Werden zwei Kanäle abgetastet, werden pro Kanal je zwei Gruppen verwendet. Verzahnt bedeutet, dass jeweils mehrere, zeitlich hintereinanderliegende Messwerte gleichzeitig übermittelt werden.

Es gilt nun herauszufinden, welche FPGA-Pins zu welcher Gruppe gehören und welcher Pin innerhalb einer Gruppe welcher Bitposition entspricht.

Als Ausgangspunkt für die Analyse der Pin-Gruppen-Zugehörigkeit nutze ich die Angaben zur Anordnung der Pins, wie sie im FPGA-Datenblatt angegeben werden. Ich übertrage die Daten in eine Grafik. Es ergab sich folgendes Bild. Die Rohdaten sind hier verfügbar.

  • Legende der FPGA-Pins (Bild: Christer Weinigel)
  • Die FPGA-Pins (Bild: Christer Weinigel)
  • Pins des SoC-Bus (Bild: Christer Weinigel)
  • Pins zum RAM (Bild: Christer Weinigel)
  • Pins zum ADC (Bild: Christer Weinigel)
  • Vollständig dokumentierte Karte der Pins (Bild: Christer Weinigel)
  • Matrix-Schaltung der Bedientasten am Oszilloskop (Bild: Christer Weinigel)
  • Noch keine Sinuskurve (Bild: Christer Weinigel)
  • Mit viel Phantasie eine Sinuskurve (Bild: Christer Weinigel)
  • Eine echte Sinuskurve (Bild: Christer Weinigel)
  • Das gleiche Spiel mit zwei Kanälen (Bild: Christer Weinigel)
  • Noch etwas Chaos (Bild: Christer Weinigel)
  • Wenigstens keine Ausreißer mehr (Bild: Christer Weinigel)
  • Beide Kanäle sind klar erkennbar. (Bild: Christer Weinigel)
  • Beide Kanäle mit größer Dämpfung (Bild: Christer Weinigel)
Noch keine Sinuskurve (Bild: Christer Weinigel)

Die roten, grünen, blauen und magentafarbenen Punkte entsprechen den jeweiligen Pin-Gruppen. Das sieht nicht direkt nach einer Sinuskurve aus, aber es wäre reiner Zufall gewesen, wenn ich die korrekte Zuweisung der Pins zu den Gruppen bereits beim ersten Versuch gefunden hätte.

Allerdings ist ein Muster erkennbar: eine 3-KHz-Sinuskurve, die mit 1 Msample pro Sekunde abgetastet wird, und bei 1.000 dargestellten Stichproben sollte sich das Signal dreimal im abgebildeten Graphen wiederholen, und das tut es.

Die Daten sehen auf den ersten Blick wie reines Rauschen aus, aber an drei Stellen haben wir eine klare Linie. Es gibt einige Punkte im Rauschen, die entfernt wie eine Sinuskurve aussehen, wenn ich ein wenig die Augen zudrücke.

Positiv oder negativ?

Nach etwas Nachdenken komme ich darauf, dass beim Start von Linux einige GPIO-Pins geschaltet werden, die den Schaltbereich der Dämpfungsrelais im Analog-Frontend verändern. Deshalb erhöht sich die Amplitude der Kurve, das Signal übersteigt die Erfassungsfähigkeit des ADC und wird abgeschnitten. Dann wird mir klar, dass es für die Analyse ganz praktisch ist, dass das Signal abgeschnitten wird, da sich die zugehörigen Pins einfacher verfolgen lassen.

Jedes symmetrische Signal wird über zwei Leitungen mit entgegengesetzter Polarität übertragen. Wenn die Leiterbahnen auf der Leiterplatine geplant werden, ist es manchmal einfacher, das positive Signal vom Sender mit dem Pin desjenigen Empfängers zu verbinden, der das negative Signal erwartet, und umgedreht. Damit wird das Layout der Leiterplatine einfacher, aber dann muss das Signal beim Empfänger invertiert werden. Da das Signal abgeschnitten wird und es zwangsläufig längere Abschnitte mit Einsen in den Bitdaten geben sollte, müssen alle Nullen in diesen Abschnitten invertiert werden. Also invertieren wir die entsprechenden Bits und zeichnen die Messpunkte erneut.

  • Legende der FPGA-Pins (Bild: Christer Weinigel)
  • Die FPGA-Pins (Bild: Christer Weinigel)
  • Pins des SoC-Bus (Bild: Christer Weinigel)
  • Pins zum RAM (Bild: Christer Weinigel)
  • Pins zum ADC (Bild: Christer Weinigel)
  • Vollständig dokumentierte Karte der Pins (Bild: Christer Weinigel)
  • Matrix-Schaltung der Bedientasten am Oszilloskop (Bild: Christer Weinigel)
  • Noch keine Sinuskurve (Bild: Christer Weinigel)
  • Mit viel Phantasie eine Sinuskurve (Bild: Christer Weinigel)
  • Eine echte Sinuskurve (Bild: Christer Weinigel)
  • Das gleiche Spiel mit zwei Kanälen (Bild: Christer Weinigel)
  • Noch etwas Chaos (Bild: Christer Weinigel)
  • Wenigstens keine Ausreißer mehr (Bild: Christer Weinigel)
  • Beide Kanäle sind klar erkennbar. (Bild: Christer Weinigel)
  • Beide Kanäle mit größer Dämpfung (Bild: Christer Weinigel)
Mit viel Phantasie eine Sinuskurve (Bild: Christer Weinigel)

Jetzt sind die flachen Abschnitte komplett auf null gesetzt, die Abschnitte dazwischen erinnern deutlicher an eine Sinuskurve.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Die restlichen FPGA-PinsDie Macht der Statistik 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7.  


grslbr 26. Nov 2016

Du bist mit Abstand der coolste Typ auf dieser Erde. Wahrscheinlich wirst du eigentlich...

grslbr 26. Nov 2016

Jo, das Trollen bei Heise war schon mal lustiger. Früher konnte man da sicher sein, mit...



Aktuell auf der Startseite von Golem.de
Optibike
E-Bike mit 480 km Reichweite kostet 17.000 Euro

Das E-Bike Optibike R22 Everest setzt mit seinen zwei Akkus auf Reichweite.

Optibike: E-Bike mit 480 km Reichweite kostet 17.000 Euro
Artikel
  1. Krypto-Kriminalität: Behörden fahnden nach Onecoin-Betrügerin
    Krypto-Kriminalität
    Behörden fahnden nach Onecoin-Betrügerin

    Deutsche und internationale Behörden suchen nach den Hintermännern und -frauen von Onecoin. Der Schaden durch Betrug mit der vermeintlichen Kryptowährung geht in die Milliarden.

  2. Hassrede: Bayern will soziale Netzwerke bestrafen
    Hassrede
    Bayern will soziale Netzwerke bestrafen

    Der bayrische Justizminister fordert, bei der Verbreitung von Hassrede auch die Betreiber von sozialen Medien stärker zur Verantwortung zu ziehen.

  3. Prehistoric Planet: Danke, Apple, für so grandiose Dinosaurier!
    Prehistoric Planet
    Danke, Apple, für so grandiose Dinosaurier!

    Musik von Hans Zimmer, dazu David Attenborough als Sprecher: Apples Prehistoric Planet hat einen Kindheitstraum zum Leben erweckt.
    Ein IMHO von Marc Sauter

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • Samsung 870 QVO 1 TB 79€ • Prime Video: Filme leihen für 0,99€ • Alternate (u. a. Recaro Rae Essential 429€) • Gigabyte RTX 3080 12 GB ab 1.024€ • Mindstar (u. a. AMD Ryzen 5 5600 179€, Palit RTX 3070 GamingPro 669€) • SanDisk Ultra microSDXC 256 GB ab 14,99€ • Sackboy 19,99€ [Werbung]
    •  /