Forum: Mikrocontroller und Digitale Elektronik Frage zu UART mehrere Teilnehmer


von BUS (Gast)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Direkt geht es nicht.

von Jürgen D. (poster)


Lesenswert?

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.

von BUS (Gast)


Lesenswert?

wie würde das mit OC-Treibern aussehen?

von H.Joachim S. (crazyhorse)


Lesenswert?

-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.

von Pandur S. (jetztnicht)


Lesenswert?

> wie würde das mit OC-Treibern aussehen?

Naja, alle Tx Treiber OC zusammenhaengen und einen Pullup verwenden.

von BUS (Gast)


Lesenswert?

sendet TX auf 0, oder auf 1?

von Torben Kuhn (Gast)


Lesenswert?

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.

von BUS (Gast)


Lesenswert?

Moment, ich möchte nicht RX mit TX verbinden, sondern mehrere TX 
Leitungen zusammenführen.

Und ebenso für mehrere RX-Leitungen.

von Torben Kuhn (Gast)


Lesenswert?

Alle TX über Diode zusammen, alle RX direkt zusammen. Wo ist das 
Problem? Sie können dann halt nicht miteinander kommunizieren.

von wendelsberg (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von BUS (Gast)


Angehängte Dateien:

Lesenswert?

Würde es also so wie im Anhang gezeigt funktionieren?

von Stefan F. (Gast)


Lesenswert?

> 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

von wendelsberg (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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.

von Max B. (maxmb) Benutzerseite


Lesenswert?

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
von BUS (Gast)


Lesenswert?

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?

von Torben K. (tokuhila)


Lesenswert?

Es kommt immer darauf an, was Du vorhast. Diodenlösung reicht 
normalerweise.

von Max B. (maxmb) Benutzerseite


Lesenswert?

Wie groß ist eigentlich die Distanz, die mit dem Bus überwunden werden 
soll?

von BUS (Gast)


Lesenswert?

Gesamt weniger als 2m

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

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.

von Georg G. (df2au)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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