Hallo, eine kurze Frage zu einem seriellen BUS. Darf man mehrere Controller an denselben RXD bzw. TXD-Pin hängen, so dass diese alle hardwareseitig verbunden sind, oder stören die sich dann gegenseitig bzw. machen eine Kommunikation unmöglich. Es sollen alle an und auf derselben TXD Leitung senden und alle an und auf der selben RXD-Leitung empfangen.
Das macht man mit 485 Treibern. Es gibt aber auch spezielle 232 Treiber bei denen man den Sender abschalten kann. Es darf immer nur ein Sender zur Zeit aktiv sein. Ich habe auch mal eine Installation mit OC Transistoren an den Sendern gesehen. Das war dann quasi ein 1-Wire System.
-Alle Empfänger direkt an die Leitung -Tx über eine Diode an die Leitung -pullup-Widerstand So eine einfache Lösung ist natürlich nur in Grenzen nutzbar.
> wie würde das mit OC-Treibern aussehen?
Naja, alle Tx Treiber OC zusammenhaengen und einen Pullup verwenden.
TX_Idle ist normalerweise H. Man kann TX über eine Schottky (K an TX) mit RX zusammenschalten, das ganze über einen PullUp auf H legen und mehrere Teilnehmer zusammenschalten. Es braucht dann aber wie bei RS485 ein gutes Protokoll sonst gibts Bitsalat.
Moment, ich möchte nicht RX mit TX verbinden, sondern mehrere TX Leitungen zusammenführen. Und ebenso für mehrere RX-Leitungen.
Alle TX über Diode zusammen, alle RX direkt zusammen. Wo ist das Problem? Sie können dann halt nicht miteinander kommunizieren.
Torben Kuhn schrieb: > Alle TX über Diode zusammen, alle RX direkt zusammen. Wo ist das > Problem? Sie können dann halt nicht miteinander kommunizieren. was dann den Sinn des Busses doch empfindlich stoert. wendelsberg
Bei vielen Mikrocontrollern kann den Sender deaktivieren. Bei AVR Mikrocontrollern heisst das ensprechende Bit TXEN. Du kannst die TxD Ausgänge mehrerer Mikrocontroller direkt parallel schalten, sofern du sicherstellt, dass immer nur maximal einer davon seinen Ausgang aktiviert. Zusätzlich sollte ein Pull-Up Widerstand für einen definierten Pegel sorgen, wenn kein Mikrocontroller seinen TxD Ausgang aktiviert hat. Hinzu kommt: AVR Mikrocontroller gehen nicht kaputt, wenn man einen einzelnen I/O Pin kurzschließt. Sie ziehen in dieser Zeit aber ca. 40-50mA mehr Strom als normal, die Stromversorgung sollte dan also vertragen können.
> Moment, ich möchte nicht RX mit TX verbinden, sondern mehrere TX > Leitungen zusammenführen. Und ebenso für mehrere RX-Leitungen. Wie jetzt, so?:
1 | Bus RxD ---+-------+-------+---------[===]---o VCC |
2 | | | | 2x 4,7k |
3 | Bus TxD ---|--+----|--+----|--+------[===]---o VCC |
4 | | | | | | | |
5 | Rx Tx Rx Tx Rx Tx |
6 | µC 1 µC 2 µC 3 |
So geht das nicht, denn dann ist niemand da, der auf die TxD Signale hört und es ist niemand da, der auf RxD was sendet. Wenn schon, musst du alles parallel auf eine Leitung legen:
1 | Bus Bidirektional ---+--+----+--+----+--+---------[===]---o VCC |
2 | | | | | | | 4,7k |
3 | | | | | | | |
4 | Rx Tx Rx Tx Rx Tx |
5 | µC 1 µC 2 µC 3 |
Stefan U. schrieb: > So geht das nicht, denn dann ist niemand da, der auf die TxD Signale > hört und es ist niemand da, der auf RxD was sendet. Das meinte ich mit: wendelsberg schrieb: >> Problem? Sie können dann halt nicht miteinander kommunizieren. > > was dann den Sinn des Busses doch empfindlich stoert. wendelsberg
> Würde es also so wie im Anhang gezeigt funktionieren?
Nein.
Du brauchst einen Pull-Up Widerstand und die Dioden müssen anders herum
gepolt werden.
Aber wenn du die Transmitter deaktivieren kannst, sind die Dioden nicht
nötig. Das brächte "bessere" (niedrigere) Low Pegel, steilere Flanken,
niedrigere Impedanzen und damit letzendlich weniger Störanfälligkeit.
Könntest sowas machen: http://www.gfai.de/~heinz/publications/papers/2014_swart.pdf wendelsberg schrieb: > Torben Kuhn schrieb: >> Alle TX über Diode zusammen, alle RX direkt zusammen. Wo ist das >> Problem? Sie können dann halt nicht miteinander kommunizieren. > > was dann den Sinn des Busses doch empfindlich stoert. > > wendelsberg Naja. Oft gibt es ja ohnehin einen Busmaster, der der Reihe nach alle Slaves anspricht, da wäre das dann also egal. Ist halt die Frage, ob man es so will oder ob die Slaves untereinander kommunizieren können sollen. Dann muss man sich aber darum kümmern, dass Kollisionen irgendwie gehandhabt werden...
:
Bearbeitet durch User
scheint mir so, als ob eine Softwarelösung am günstigsten ist. Wichtig ist also, dass die von mir gewählten Controller einen abschaltbaren TX-Pin besitzen. Wenn ich also einen schnellen Überblick bekommen möchte, genügt es dann zu gucken, ob der TX-Pin als altenrnate Function mit einem normalen I/O-Pin belegtbar ist?
Es kommt immer darauf an, was Du vorhast. Diodenlösung reicht normalerweise.
Wie groß ist eigentlich die Distanz, die mit dem Bus überwunden werden soll?
Wiviele Teilnehmer? Soll jeder mit jedem reden können oder alle minus 1 mit einem? So interpretiere ich das jedenfalls, wenn ich mir Deine Zeichnung anschaue.
Hier ein Beispiel für 3 Teilnehmer. Die Zahlen beziehen sich auf die normale DB25 Buchse. Die Handshake Leitungen kann man weglassen. Bei mehr als 3 Teilnehmern entsprechend ergänzen. (Stammt aus dem Handbuch zu TheNet 1.19)
1 | TNC 1 |
2 | ,----, |
3 | | 1 |-------\ |
4 | | 2 |-------:-----------------------------------------*----\ |
5 | | 3 |-------:------------------------------*------\ | | |
6 | | 5 |-------:-----------*----\ | | | | |
7 | | 20 |-------:-----------:----:----*----\ | | | | |
8 | | 7 |-------:---\ | | | | | | | | |
9 | | 10 | | | | !K! !A! !A! | !A! !K! !K! |
10 | | | | | | !A! !K! !K! | !K! !A! !A! |
11 | | 23 | | | | | | | | | | | |
12 | '----' | | | | | | | | | | |
13 | | | | | | | | | | | |
14 | TNC 2 | | | | | | | | | | |
15 | ,----, | | | | | | | | | | |
16 | | 1 |-------* | | | | | | | | | |
17 | | 2 |-------:---:-------:----:----:----:---:------* | | |
18 | | 3 |-------:---:-------:----:----:----:---:--*---:---/ | |
19 | | 5 |-------:---:--*----:----:----/ | | | | | |
20 | | 20 |-------:---:--:----:----*----\ | | | | | |
21 | | 7 |-------|---* | | | | | | | | |
22 | | 10 | | | | | | | | | | | |
23 | | | | | | | | | | | | | |
24 | | 23 | | | !K! !K! !A! | !A!!A! !K! | |
25 | '----' | | !A! !A! !K! | !K!!K! !A! | |
26 | | | | | | | | | | | |
27 | TNC 3 | | | | | | | | | | |
28 | ,----, | | | | | | | | | | |
29 | | 1 |-------/ | | | | | | | | | |
30 | | 2 |-----------:--:----:---------:----:---*--+ | | |
31 | | 3 |-----------:--:----:---------:----:----------*--------/ |
32 | | 5 |-----------:--:----:---------*----/ |
33 | | 20 |-----------:--*----/ |
34 | | 7 |-----------/ |
35 | | 10 | * = Verbindung |
36 | | | : = Kreuzung |
37 | | 23 | A = Anode einer 4148 Diode |
38 | '----' K = Kathode einer 4148 Diode |
:
Bearbeitet durch User
BUS schrieb: > scheint mir so, als ob eine Softwarelösung am günstigsten ist. Software muss auf jeden Fall im Spiel sein, von alleine geht normalerweise garnix. > Wichtig ist also, dass die von mir gewählten Controller einen > abschaltbaren TX-Pin besitzen. Entweder das oder eben die Entkopplung per Dioden + PullUp. Die Software wird geringfügig einfacher bei der Entkopplung per Dioden, weil sie sich dann eben nicht um die Pinsteuerung kümmern muss. Besser ist aber natürlich, diesen Aufwand auch noch zu implementieren, wenn die Fähigkeiten des Controllers es zulassen. > Wenn ich also einen schnellen Überblick bekommen möchte, genügt es dann > zu gucken, ob der TX-Pin als altenrnate Function mit einem normalen > I/O-Pin belegtbar ist? Nein. Du brauchst ja auf jeden Fall den Empfänger der UART. Der zweite springende Punkt ist also, dass sich TX- und RX-Pins unabhängig voneinander als GPIO nutzen lassen. Das ist manchmal garnicht so einfach heraus zu bekommen, da es durchaus verschiedene Mechanismen dafür geben kann. Neben dedizierten Steuerbits wie z.B. TXEN und RXEN bei den AVR8 kann die gleiche Sache u.U. auch durch variable Pin-Mappings realisiert werden.
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.