Hallo,
ich möchte die Kommunikation auf einem 2-Draht-Bus mit 2 Teilnehmern
"abhören" und dabei die Datenrichtung erkennen um herauszufinden welcher
Teilnehmer gerade die Leitungen wie beeinflusst.
Kennt jemand eine (einfache) Schaltung, die ich an die zwei Leitungen
anklemme und an der ich dann einen Logik Analysator anschliessen kann?
Im Anhang ein Bild eines Frames auf diesem Bus.
Erstmal vielen Dank für die Antworten!
> Den Logik-Analysator kannst du auch so anschliessen.
Habe ich schon gemacht - siehe Bild.
> Die Richtung kann man nur feststellen, wenn man den Bus auftrennt, und> eine Schaltung dazwischen baut, die den Bus nicht weiter beeinflusst...
Die Leitungen lassen sich ohne Probleme auftrennen. Hast du (oder jemand
anders) zufällig einen Vorschlag für die entsprechende Schaltung?
tja, das wird nicht ganz einfach.
Erstmal ist das nix symmetrisches, sondern eine ziemlich einfache
serielle synchrone Übertragung, a la SPI.
Dann bleibt erstmal die Frage: können beide Seiten überhaupt den Takt
erzeugen? Üblicherweise kommt der nur von einem (dem master), kann aber
theoretisch von beiden kommen.
Kommt der Takt nur von einer Seite, wirds einfacher.
Ich mach das immer so:
1) Leitung auftrennen
2) Widerstand z.B. 10-100 Ohm einfügen
3) links und rechts vom Widerstand Oszi anschliessen
(oder oben und unten, je nachdem wie die Leitung verläuft ;-)
4) An den Spannungen an den beiden Widerstandsanschlüssen
kannst du sehen, wer "aktiv" am Bus herumzerrt und wer nur hört.
Mit einem Komparator und einem RS-FF könnte man sich eine Art
"Richtungsanzeiger" basteln.
EDIT: Schon wieder "nur" Zweiter :-(
Ich habe jetzt mal anhängende Schaltung aufgebaut und meinen Logic
Analyzer an die Ausgänge des LM139 (LM339) angeschlossen, aber leider
komme ich auf keinen grünen Zweig. Wenn ich die Spannung am Poti so
eingestellt habe, dass Daten "durchkommen", dann sehe ich die Daten
immer an beiden Ausgängen...
Ich habe auch schon 2 Dioden in Reihe antiparallel geschaltet aber auch
das hat leider nichts gebracht...
Ist an meiner Schaltung denn etwas Grundlegendes verkehrt?
@ crazy horse
Ich bin nicht sicher, aber ich denke schon, dass beide Seiten den Takt
erzeugen können.
Hmm - ich verstehe nicht ganz wie mir das helfen soll - bei "meinem" Bus
handelt es sich nicht um I²C soweit ich das sagen kann. Ich kenne mich
aber mit I²C auch nicht aus...
Ich habe mir da selber ein Ei gelegt: beim LM339 muss die
Versorgungsspannung etwa 2V größer sein als die Spannungen, die
verglichen werden sollen. Und ich wollte mit 5V Versorgungsspannung
5V-Signale vergleichen...
Ich habe jetzt die Versorgungsspannung auf 12V erhöht und schon sieht es
wesentlich besser aus.
> Versorgungsspannung etwa 2V größer sein als die Spannungen,> die verglichen werden sollen.
Ja, da isser wieder, der Common Mode Voltage Range ;-)
Ein beliebter Fehler, auch bei alten Hasen.
EDIT:
Du kannst statt der Dioden auch Widerstände (oder wenigstens
Shottky-Dioden BAT48&Co) verwenden, dann ist der Spannungsabfall nicht
so groß.
> Ja, da isser wieder, der Common Mode Voltage Range ;-)> Ein beliebter Fehler, auch bei alten Hasen.
Exakt der war es ;) Ich würde mich zwar nicht als alten Hasen
bezeichnen, aber wissen hätte ich das müssen... Wer lesen kann (und es
auch tut) ist halt klar im Vorteil...
> EDIT:> Du kannst statt der Dioden auch Widerstände (oder wenigstens> Shottky-Dioden BAT48&Co) verwenden, dann ist der Spannungsabfall nicht> so groß.
Ich weiß. Das war in diesem Fall aber unnötig - im Gegenteil: ich hatte
sogar noch je 2 Dioden in Reihe (also 4 pro Datenleitung)...
ein Serienwiderstand (symetrisches Netwerk mit ~) sollte geringfüge
Spannungsdifferenzen erzeugen.
ein Komperator an beiden Seiten ist dann in der Lage zu erkennen auf
welcher Seite eine Leitung down gezogen wird(I²C), oder eine spannung
generiert wird(RS422 CAN)
somit ließe sich der Aktive (Sendende) Teilnehmer erkennen lassen.
Die abgebildete Schaltung war vor über 15 Jahren einmal sehr nützlich,
das mir damals noch vollkommen unbekannten Format des Datentransfers
zwischen einem Kartenleser und einer Smartcard (VC ;-)) zu analysieren.
Im Ruhezustand befindet sich der 1-Draht-Bus zwischen Karte und Leser
auf High, der jeweilige Sender zieht die Leitung den Daten entsprechend
auf Low. Bei niedrigen Datenraten um 9600 Baud genügten recht kleine
Ströme und dementsprechend große Widerstandswerte, so daß die
Kommunikation zwischen Karte und Leser nicht gestört wurde. Die
Potentialverschiebungen an der jeweiligen Empfängerseite (Low aufgrund
der Basis-Emitter-Strecke um ca. 0,6 V angehoben - High reduziert durch
den Strom in den Pull-Down-Widerständen) erwies sich ebenfalls als
unproblematisch. Die Werte der Widerstände kommen aus dem Gedächtnis,
die Größenordnung müsste aber stimmen. Ob ich die beiden
Pull-Up-Widerstände, R3 und R4 überhaupt gebraucht habe, kann ich nicht
mehr genau sagen, evt. reichten auch die Pull-Ups in Karte und Leser,
bzw. deren Quell-Ströme.
Die Funktionsweise ist schnell beschrieben: Je nach Datenrichtung liegt
am Collector des einen oder anderen Transistors bei einem active-Low-Bit
von Karte bzw. Leser ein positives Signal an. Das NOR-Gate kombiniert
die Signale für beide Richtungen, und liefert wieder ein
active-Low-Signal. Das sind die Daten (für beide Richtungen).
Das Flip/Flop detektiert und hält die Datenrichtung, bis eine
Übertragung in der jeweils anderen Richtung erfolgt. Verzögert man die
Daten noch, (bspw. durch zwei freie HC02-Gatter) sind die Signale
zeitlich "sauber", d.h. bereits zu Beginn des ersten Datenbits ist das
Richtungssignal gültig. (Das Übertragungsende in einer Richtung war
damals unkritisch, das gab es ohnhin eine deutliche Pause.)
Für einen 2-Draht-Bus benötigt man die Schaltung natürlich in doppelter
Ausführung...
MfG
Hmm, bei rund 5 KHz mag das ja funktionieren. Aber - mit den üblichen
Streukapazitäten und so geringen Strömen bzw. hohen Wiederstandswerten -
auch noch mit den 100 oder gar 400 KHz des I²C-Bus?