Forum: Mikrocontroller und Digitale Elektronik Open Collector Bus Schaltung


von Netik H. (netik)


Angehängte Dateien:

Lesenswert?

Hallo zusammen
Ich verstehe einfach den Sinn und die Funktionsweise einer Open 
Collector Bus Schaltung nicht. Ein Bild liegt im Anhang.

Angenommen, beide "Nodes" senden keine Daten - die Transistoren sind 
also aus - dann ist deren Widerstand ja enorm hoch und somit müsste auch 
die Spannung über den IN Pins quasi 0 sein, oder?

Wenn jetzt einer der beiden senden will - der Transistor ist geöffnet 
und leitet....dann ist die Spannungsquelle ja mit Ground verbunden und 
es läuft viel über den Sender...aber dann empfängt der Sender ja "Daten" 
und nicht der Empfänger?

von (prx) A. K. (prx)


Lesenswert?

Wenn die Transistoren offen sind definiert der Pullup-Widerstand den 
Pegel. Also gibts High-Pegel. Wenn mindesten einer geschlossen ist gibts 
Low-Pegel.

Beide Eingänge empfangen den gleichen Buszustand, sowohl beim Sender als 
auch beim Empfänger, wenn man Laufzeiten mal aussen vor lässt.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Wieviel Strom fließt, ist nicht interessant; die INs messen nur 
Spannung.

Denk dir die Transistoren als Widerstände, die zusammen mit dem Pullup 
einen Spannungsteiler bilden, und die entweder relativ klein oder 
relativ groß zum Widerstand des Pullups sind.

: Bearbeitet durch User
von Norbert M. (Gast)


Lesenswert?

Kevin Haeni schrieb:
> Angenommen, beide "Nodes" senden keine Daten - die Transistoren sind
> also aus - dann ist deren Widerstand ja enorm hoch und somit müsste auch
> die Spannung über den IN Pins quasi 0 sein, oder?

Hmm, ich weiss nicht, was Du genau mit Spannung über die IN-Pins meinst,
aber die Sache ist eigentlich recht einfach: Wenn alle Transistoren die
and dem Bus hängen sperren, dann wird die Leitung durch den Pull-Up
(in Deinem Bild R_up) hochgezogen (auf +V). Wenn jetzt einer 
durchschaltet, dann wird die Leitung auf Masse gezogen.

> Wenn jetzt einer der beiden senden will - der Transistor ist geöffnet
> und leitet....dann ist die Spannungsquelle ja mit Ground verbunden und
> es läuft viel über den Sender...

Der Pullup sollte schon angemessen sein. Wenn der Wert zu groß ist, dann 
werden die Flanken von 0->1 ziemlich unsauber. Andererseits wird man
auch aus Stromspargründen nicht an's untere Limit gehen, oder gar 
soweit, daß das dein Kollektor gar nicht mehr wegsaugen kann.

Hier gibt's ein paar interessante Bilder:
http://dsscircuits.com/articles/effects-of-varying-i2c-pull-up-resistors

> aber dann empfängt der Sender ja "Daten" und nicht der Empfänger?

Keine Sorge, der Sender hat da schon ein bisschen Logik eingebaut,
sodaßer er eben nicht sein eigenes Zeugs einliest. Ist aber meistens
im Datenblatt des zu verwendenden Chips schematisch dargestellt.

LG,
Norbert

von Netik H. (netik)


Lesenswert?

Vielen Dank für die Antworten.

Der Tipp mit dem Spannungsteiler war gut...aber sehe ich das richtig, 
dass nun der Bus so programmiert werden muss, dass ein Low Pegel bei den 
In Pins bedeutet, dass Daten empfangen werden und ein High Pegel dass 
keine Daten empfangen werden?

von karadur (Gast)


Lesenswert?

Hallo

die Daten sind eine Folge von Rechtecksignalen. z.B. 0-1-1-0

nehmen wir an die linke Seite sendet und die Zeit für ein Bit ist fix: 
Transistor ein-aus-aus-ein.

Beide Seite sehen die Signale an ihren IN.

Wer sendet hängt vom Protokoll ab. Bei Master -Slave ( z.B. I^2C 
)bestimmt der Master wann der Slave sendet.

Bei gleichberechtigten Sendern ( z.B. 10MBit Ethernet auf Koax )erkennen 
die Sender durch rücklesen am IN ober die Sendung gestört wird.

von Dietrich L. (dietrichl)


Lesenswert?

Kevin H. schrieb:
> Der Tipp mit dem Spannungsteiler war gut...aber sehe ich das richtig,
> dass nun der Bus so programmiert werden muss, dass ein Low Pegel bei den
> In Pins bedeutet, dass Daten empfangen werden und ein High Pegel dass
> keine Daten empfangen werden?

Denk noch mal darüber nach, was Du da geschrieben hast!
Wenn nur Low-Pegel empfangen werden, brauchst Du überhaupt keine Daten 
zu übertragen - denn immer "0" ist keine sinnvolle Information.

Richtig wäre die Formulierung etwas so:

Der Teilnehmer, der empfangen will, muss seinen Sender abschalten, das 
heißt den Transistor sperren (OUT = 0). Dann sieht er bei "IN" die Daten 
des anderen Teilnehmers.
Der Teilnehmer, der senden will, schaltet über "OUT" den 
Sende-Transistor ein und aus. Der andere Teilnehmer sieht bei "IN" die 
Sendedaten.

Hinweis: Zwischen "IN" und "OUT" ist eine Invertierung durch den 
Transistor. Also wenn "OUT" = High ist, ist "IN" = Low und umgekehrt.

Gruß Dietrich

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
Noch kein Account? Hier anmelden.