Frage zu UART mehrere Teilnehmer

Gast #4490749
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.
#4490758
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.
Gast #4490781
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.
Gast #4490828
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.
Gast #4490842
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
Gast #4490851
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.
Persönliche Seite #4490856
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...
Gast #4490899
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?
#4491180
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
Gast #4491675
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.