Moin, ich hab mir am Wochenende einen kleinen Logicanalyser auf Basis eines Xplain-Boards gefrimmelt. Dazu hab ich ne rudimentäre Software für den PC geschrieben. Erste Tests haben mich echt überrascht, das ganze scheint soweit zu funktionieren, für 26h Dauerprogrammieren mal ganz respektabel ;). Aber warum das Ganze? Tja ich wollt halt ein unbekanntes Signal analysieren, und mein Uralt DDR Oszi hat mir nur geholfen die Signalpegel aufzueigen, was da übertragen wird, ja etwa die genauen Bytewerte - keine Chance oder es wird ne neue Sportart draus... Da das Signal aber im unteren Frequenzbereich lag (unter 10khz), dachte ich mir ich nutze die Gunst der Stunde und öffne mal ein kleines Projekt, ihr habt es erraten, einen Logicanalyser. So hab da zwei Fragen: Ich sample mit dem LA im Moment die Kommuikation zwischen zwei FM433 Modulen, soll heißen hab am Empfänger den Dataout Pin abgegriffen, sowie am Sendemodul den Modulationspin vor dem Sender. Und siehe da beide Signal sehen gleich aus ;), aber wie kriege ich nun raus, was da genau gesendet wird, wie bestimmt ich die Bitrate? Meine Idee dazu wäre, ich mache einen Art Sweep Mode, in dem ausgehend von der kleinsten Samperate, alle Sampleraten ausprobiert werden, bis in zwei aufeinanderfolgende Samples ein Bit erkannt wird. Das wird aber vorraussetzen, dass ich genau die Bitrate mit der Samplerate treffe...Das ist wohl nicht der richtige Ansatz... Beim Burst-Mode, werden ja nur bei Änderungen zwischen neuem und altem Sample gespeichert, was passiert aber dabei mit Pausen im Signal? Die Verschwinden dann jawohl oder? Helft mir mal auf die Sprünge. Danke! Gruß Jonas
Jonas Biensack schrieb: > was passiert aber dabei mit Pausen im Signal? Die > Verschwinden dann jawohl oder? Übliche LAs zeichnen zusätzlich zu den Signalen auch die Zeitinformation mit auf, die sog. Timeline. An dieser kann man festmachen, wann ein Ereignis aufgetreten ist.
>Übliche LAs zeichnen zusätzlich zu den Signalen auch die Zeitinformation >mit auf, die sog. Timeline. An dieser kann man festmachen, wann ein >Ereignis aufgetreten ist. Soll heißen, ich soll pro Sample (im Moment nur 8 Channels == 1 Byte) noch die aktuelle Sampleposition (3 Byte Wert) mitspeichern, das ist natürlich einmal in Verbindung mit dem Borst Mode genial hinsichtlich Auswertbarkeit, viertelt aber auch die maximale Samplerate...aber die war ja auch nicht die Anforderung ;) Dank dir :) Gruß Jonas
Jonas Biensack schrieb: > Soll heißen, ich soll pro Sample (im Moment nur 8 Channels == 1 Byte) > noch die aktuelle Sampleposition (3 Byte Wert) mitspeichern Aber nur, wenn sich am zu messenden Signal etwas ändert, musst du die Zeit speichen, da dazwischen ja nix passiert. Bei der grafischen Abbildung weißt du dann, wo diese Änderung zeitlich stattgefunden hat, sprich an welcher Stelle sie auf der Timeline abzubilden ist.
>Aber nur, wenn sich am zu messenden Signal etwas ändert, musst du die >Zeit speichen, da dazwischen ja nix passiert. Bei der grafischen >Abbildung weißt du dann, wo diese Änderung zeitlich stattgefunden hat, >sprich an welcher Stelle sie auf der Timeline abzubilden ist. Jo, stimmt. Aber die Samplingrate muss ich vorher trotzem reduzieren, da ich davon ausgehen muss da sich ja bei mehreren Samples hintereinander die Bits ändern, ich also jedes Sample + Zeitinformation speichern muss...Oder? Gruß Jonas
Nein, nicht jedes, sondern nur jede Änderung und deren aktuelle Zeit.
Ich glaub du hast mich falsch verstanden, ich meinte in einem Worst-Case Szenario in dem sich die Bits bei mehreren Samples hintereinander ändern muss ich auch für alle diese Samples die Zeit mitspeichern, somit muss ich vorher die Samplerat so verringern, dass ich garantieren kann, dass ich genug Zeit zwischen den Samples habe um die 4 Byte wegzuspeichern... Das war mein Ansatz. Gruß Jonas
Pseudo-Code:
PORTD als Input
Ramcounter, wohin wird nächstes Byte in Ram geschrieben
Timer ISR:
Lies neuen Wert von PORTD
Ist der Wert ungleich letztem Wert
-Ja: Speicher neuen Wert in Ram
Speicher RamCounter in Ram
erhöhe RamCounter um 4
Dabei fällt auf, ich muss immer ein Sample mit Zeitwert speichern, sonst
kann ich später beim auslesen nicht erkennen, was ist Zeitwert und was
ist Samplewert. So hab ich einen kontinuierlichen Offset von 4 Byte....
Ich hab auch noch ne Idee mit zwei DMA's die sich getriggert vom Timer
Interrupt um die Datenschauflung kümmern. Einer überträgt den
Ramcounter, der andere den Samplewert...
Ich geh mal proggen...und testen und... ihr wisst was ich mein...
Gruß JOnas
Hi, Jonas Biensack schrieb: >>Übliche LAs zeichnen zusätzlich zu den Signalen auch die Zeitinformation >>mit auf, die sog. Timeline. An dieser kann man festmachen, wann ein >>Ereignis aufgetreten ist. > > Soll heißen, ich soll pro Sample (im Moment nur 8 Channels == 1 Byte) > noch die aktuelle Sampleposition (3 Byte Wert) mitspeichern, das ist > natürlich einmal in Verbindung mit dem Borst Mode genial hinsichtlich > Auswertbarkeit, viertelt aber auch die maximale Samplerate...aber die > war ja auch nicht die Anforderung ;) Es gibt bei den üblichen LA, zumindest bei den besseren ZWEI VERSCHIEDENE Betriebsmodi. Einmal einen Modus wie du ihn wohl schon im Kopf hattest, also wo ab den Triggerzeitpunkt kontinuierlich pro Zeiteinheit ein Bit/Kanal aufgezeichnet wird. Dieser Betriebsmodus ist durchaus immer noch gebräuchlich, sogar meist die Standardeinstellung . Dieser ist m.w. auch der schnellste. Der NAchteil ist aber das so die Aufzeichnungsdauer immer vom maximalen Speicher auf die gleiche kurze Zeitspanne begrenzt ist. AUCH wenn sich kaum etwas getan hat. Hier müssen natürlich keinerlei Zeitinformationen aufgezeichnet werden da die Aufzeichnung ja gleichmäßig weiterläuft und der Abstand zweier Zustände im Speicher direkt proportional zum Zeitabstand ist. Dieser Modus wird "TIMING MODE" genannt. Oder man wählt den hier ins Spiel gebrachten modus -üblicherweise als "STATE MODE" Bezeichnet, dann wird immer nur bei einem Pegelwechsel eine Aufzeichnung gemacht, diesmal aber mit einer Zeitinformation. Die Vorteile jeder Variante liegen dabei auf der HAnd. Der TIMING MODE ist hervorragend geeignet wenn es innerhalb der Aufzeichnung sehr viele oder schnelle Pegelwechsel gibt. Der StateMode wenn es wenige Pegelwechsel gibt und man möglichst lange Aufzeichnen will. (Manchmal ist es auch so das der LA im Normalmodus im Timing mode läuft und der StateMode als "Kompression" bezeichnet wird) Welche Betriebsart du wählst bleibt dir selber überlassen. ICH würde es aber erst einmal im TimingMode zum Laufen bringen und dann erst über den StateMode nachdenken... ISt deutlich einfacher! Gruß Carsten
Ok. Das läuft doch schon anbei ein paar Bilder. Mein Intension einen weiteren Modus zu programmieren, entstand erst aus der Not heraus die Daten die ich aufzeichnete zu Interpretieren. Bei Interesse post ich mal den Code...Vielleicht hat ja jemand Lust auf ein kleines Gemeinschaftsprojekt? Vorraussetzung wäre nur ein Xplain Board + Pc mit Windoof. Gruss Jonas
Falls du die gespeicherten Daten deines LA in das VCD Format
konvertierst, dann kannst du diese auch auf der opensource Software
GTKwave anzeigen lassen. Für GTKwave habe ich mittlerweile drei
Interpreter für SPI, RS232 und ein digitales Schieblehren Protokoll
geschrieben. So müsstest du die GUI nicht selber noch programmieren und
hättest schon mal drei Protokoll-Interpreter zur Verfügung. :)
Infos zum VCD Format gibts unter [1] und zu GTKwave unter [2] und zu
meinen Interpretern unter [3].
Ciao,
Rainer
[1] http://www.beyondttl.com/vcd.php
[2] http://gtkwave.sourceforge.net/
[3] Beitrag "Tools für Logicport LA1034 und GTKwave"
Cool. Danke für die Links. Aber GUI-Programmieren ist für mich immer Entspannung. Aber zur Anregung schau ich mir das mal an. Gruß Jonas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.
