Forum: Mikrocontroller und Digitale Elektronik 3 Mikrocontroller, 1 UART


von Max (Gast)


Lesenswert?

Hallo!

Besteht die Möglichkeit über eine evtl. zusätzlich erforderliche externe 
Beschaltung und/oder Steuerleitungen 3 Mikrocontroller über 1 UART 
miteinander kommunizieren zu lassen?

Gruß
Max

von Εrnst B. (ernst)


Lesenswert?

Kommt darauf an...

"horchen" können alle gleichzeitig, nur wer senden darf, darauf müssen 
die drei sich einigen.

Wenn die µCs z.B. nur auf Anforderung senden, ist das kein Problem.

Alternativ:
Daisy-Chain.

von Chris R. (hownottobeseen)


Lesenswert?

Ja, wenn dir Halbduplex reicht und du bereit bist, mit allen Vor- und 
Nachteilen zu leben.
Du kannst alle RX miteinander verbinden und die TX-Leitungen per 
Vorwiderstand an den "Bus" ankoppeln. Ist dann prinzipiell wie der 
1-Wire-Bus von Maxim.

von uartlover (Gast)


Lesenswert?

Eine möglichkeit wäre auch daisychain... Das du Daten in uc 1 schickst 
und der an u2 weitersendet usw. Alle in serie..

von Falk B. (falk)


Lesenswert?

@  Max (Gast)

>Beschaltung und/oder Steuerleitungen 3 Mikrocontroller über 1 UART
>miteinander kommunizieren zu lassen?

Nennt sich Bus, gibt es in Dutzenden Varianten, z.B. RS485. Wenn 
die uCs auf einer Platine oder nah beieinander sitzen, reicht auch was 
mit CMOS-Pegel ohne Treiber.

MfG
Falk

von Max (Gast)


Lesenswert?

Falk Brunner schrieb:
> Nennt sich Bus, gibt es in Dutzenden Varianten, z.B. RS485. Wenn
> die uCs auf einer Platine oder nah beieinander sitzen, reicht auch was
> mit CMOS-Pegel ohne Treiber.

Ist mir bekannt. Aber ich will die UARTs direkt verbinden, ohne 
Umsetzung der Physik. Und Unabhängig von der Halbleitertechnik, habe ich 
CMOS wie auch TTL Kurzschlüsse, wenn ich die Datenleitung einfach 
zusammenschließe.

uartlover schrieb:
> Eine möglichkeit wäre auch daisychain... Das du Daten in uc 1 schickst
> und der an u2 weitersendet usw. Alle in serie..

Technisch leider nicht Umsetzbar und zweitens erhöht das die Latenz.

Chris R. schrieb:
> Du kannst alle RX miteinander verbinden und die TX-Leitungen per
> Vorwiderstand an den "Bus" ankoppeln.

Was für ein Wert ist da geeignet? 10k?

von Volkmar D. (volkmar)


Lesenswert?

Max schrieb:
> Chris R. schrieb:
>> Du kannst alle RX miteinander verbinden und die TX-Leitungen per
>> Vorwiderstand an den "Bus" ankoppeln.
>
> Was für ein Wert ist da geeignet? 10k?

Dann hängt der Pegel aber von der Anzahl der Teilnehmer und deren 
Ausgangspegel ab. Ich würde hier eher die Entkopplung über Dioden (mit 
einem Pulldown-Widerstand) ansetzen:
1
TX1 ---|>|--+----- TX-Out
2
            |
3
TX2 ---|>|--+
4
            |
5
TX3 ---|>|--+
6
            |
7
            -
8
           | |
9
           | |
10
            -
11
            |
12
           GND

Oder halt über handelsübliche OR-Gatter...

von Bertram (Gast)


Lesenswert?

Mir kommt da gerade eine Idee! - Besser als Widerstände und Dioden:
"Bus Buffer Gates", wie ein SN54HC125

von Falk B. (falk)


Lesenswert?

@  Max (Gast)

>Umsetzung der Physik. Und Unabhängig von der Halbleitertechnik, habe ich
>CMOS wie auch TTL Kurzschlüsse, wenn ich die Datenleitung einfach
>zusammenschließe.

Für sowas gibt es Open Drain Ausgänge ala I2C. Oder halt mit Dioden 
und Widerstand. Wobei die Schaltung vom Volkmar bei RS232 nicht 
funktioniert. Das STOP-Bit ist HIGH, muss aber rezessiv sein. Dioden 
drehen und Widerstand gegen VCC statt GND, dann passt es, logisches UND.

MfG
Falk

von Reinhard Kern (Gast)


Lesenswert?

Max schrieb:
> 3 Mikrocontroller über 1 UART
> miteinander kommunizieren zu lassen?

Definiere erstmal, was du genau willst: 3 Mikrokontroller irgenwohin 
senden lassen, oder jeweils einen an die anderen beiden? Das ist 
schliesslich ein Unterschied, auch wenn dir das offensichtlich nicht 
klar ist.

Gruss Reinhard

von (prx) A. K. (prx)


Lesenswert?

Volkmar Dierkes schrieb:

> Ich würde hier eher die Entkopplung über Dioden (mit
> einem Pulldown-Widerstand) ansetzen:

Im Prinzip richtig, aber genau andersrum. Die Dioden umdrehen und den 
Widerstand nach Vcc schalten. Denn Rx/Tx sind im Ruhezustand "high".

von (prx) A. K. (prx)


Lesenswert?

Bertram schrieb:

> Mir kommt da gerade eine Idee! - Besser als Widerstände und Dioden:
> "Bus Buffer Gates", wie ein SN54HC125

Gibt einen Kurzen und undefinierte Pegel, wenn mehrere gleichzeitig 
senden.

von Volkmar D. (volkmar)


Lesenswert?

Falk Brunner schrieb:
> Wobei die Schaltung vom Volkmar bei RS232 nicht
> funktioniert. Das STOP-Bit ist HIGH, muss aber rezessiv sein.

A. K. schrieb:
> Im Prinzip richtig, aber genau andersrum. Die Dioden umdrehen und den
> Widerstand nach Vcc schalten. Denn Rx/Tx sind im Ruhezustand "high".

Ja, Ihr habt Recht, ich hatte das Start- und Stop-Bit von den Pegeln her 
vertauscht. Danke fürs Korrigieren.

von Markus E. (opc)


Lesenswert?

Volkmar D. schrieb:
> Max schrieb:
>> Chris R. schrieb:
>>> Du kannst alle RX miteinander verbinden und die TX-Leitungen per
>>> Vorwiderstand an den "Bus" ankoppeln.
>>
>> Was für ein Wert ist da geeignet? 10k?
>
> Dann hängt der Pegel aber von der Anzahl der Teilnehmer und deren
> Ausgangspegel ab. Ich würde hier eher die Entkopplung über Dioden (mit
> einem Pulldown-Widerstand) ansetzen:
> TX1 ---|>|--+----- TX-Out
>             |
> TX2 ---|>|--+
>             |
> TX3 ---|>|--+
>             |
>             -
>            | |
>            | |
>             -
>             |
>            GND
> Oder halt über handelsübliche OR-Gatter...

Mir ist klar, dass der Beitrag alt ist. Aber könnte mir bitte jemand 
erklären welche Funktion die Dioden an der Stelle erfüllen. Finde den 
Aufbau sehr interessant, nur verstehe leider nicht warum man die Dioden 
braucht.

Vielen Dank

von Wolfgang (Gast)


Lesenswert?

Markus E. schrieb:
> Finde den Aufbau sehr interessant, nur verstehe leider nicht warum man
> die Dioden braucht.

Damit man trotz Push-Pull Ausgangsstufen eine wired-or Verknüpfung der 
Signale realisieren kann. Bei Open-Source Ausgangsstufen könnte man sich 
die sparen.

von Falk B. (falk)


Lesenswert?

Markus E. schrieb:
> Mir ist klar, dass der Beitrag alt ist. Aber könnte mir bitte jemand
> erklären welche Funktion die Dioden an der Stelle erfüllen.

Das ist ein Wired-AND, also eine UND-Veknüpfung.

Beitrag "Re: 3 Mikrocontroller, 1 UART"

Erstmal ist die Polarität der Dioden falsch. So ist es korrekt.
1
            VCC
2
             |
3
             -
4
            | |
5
            | |
6
             -
7
             |
8
 TX1 ---|<|--+----- TX-Out
9
             |
10
 TX2 ---|<|--+
11
             |
12
 TX3 ---|<|--+

Im Ruhezustand haben alle TX-Ausgänge HIGH-Pegel (Stop Bit). Fängt einer 
an zu senden, sendet er ein Start-Bit mit LOW. Das zieht über eine Diode 
den Ausgang auf LOW. Das HIGH der anderen Sender stört dabei nicht, die 
Dioden sperren (HIGH an Kathode, LOW an Anode). Wenn der Sender fertig 
ist, geht auch er wider auf HIGH. Sprich, LOW wird immer aktiv 
(dominant) über einen TX-Ausgang und eine Diode erzeugt, high passiv 
(rezessiv) über den Pull-Up Widerstand. Das ist wie ein Open Drain Bus 
bei I2C, nur hier mit normalen, Push-Pull Ausgängen und Dioden 
emuliert.

https://www.mikrocontroller.net/articles/Ausgangsstufen_Logik-ICs

von Falk B. (falk)


Lesenswert?

Wolfgang schrieb:
> Damit man trotz Push-Pull Ausgangsstufen eine wired-or Verknüpfung der

Nö, es ist Wired-AND. LOW ist dominant.

>Bei Open-Source Ausgangsstufen könnte man sich
>die sparen.

Soso, Open Source Ausgangsstufen. Ich dacht immer, die gibt es nur in 
der Software . . .

: Bearbeitet durch User
von GEKU (Gast)


Lesenswert?

Markus E. schrieb:
> Aber könnte mir bitte jemand erklären welche Funktion die Dioden an der
> Stelle erfüllen.

Die Dioden dienten zur Entkopplung der High-Pegel. Damit können die 
Ausgänge (Tx) keinen High-Pegel mehr liefern aber sehrwohl einen 
Low-Pegel. Der High-Pegel kommt jetzt nur noch vom gemeinsamen Pull-Up 
Widerstand. Der Ruhepegel bei RS232 ist High. Wenn jetzt eine 
Schnittstelle sendet und denn Bus auf Low zieht, braucht deren Ausgang 
nur den Strom für den Pull-Up Widerstand zu ziehen, die High-Pegel der 
anderen Ausgänge sind Dank Dioden entkoppelt da diese in Sperrichtung 
liegen.

von Markus E. (opc)


Lesenswert?

Herzlichen Dank @Falk für die tolle Erklärung. Hat mir sehr geholfen es 
zu verstehen.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> Nö, es ist Wired-AND. LOW ist dominant.

Bei deiner Schaltung schon.

Ich bezog mich auf diese:

Volkmar D. schrieb:
> Ich würde hier eher die Entkopplung über Dioden (mit
> einem Pulldown-Widerstand) ansetzen:

von Falk B. (falk)


Lesenswert?

Wolfgang schrieb:
> Falk B. schrieb:
>> Nö, es ist Wired-AND. LOW ist dominant.
>
> Bei deiner Schaltung schon.

> Ich bezog mich auf diese:
>
> Volkmar D. schrieb:
>> Ich würde hier eher die Entkopplung über Dioden (mit
>> einem Pulldown-Widerstand) ansetzen:

Welche beim UART nicht funktioniert.

Jaja, der oberschlaue Wolfgang mal wieder.

von Bernd K. (prof7bit)


Lesenswert?

Bring mal in Erfahrung ob Du bei allen 3 Controllern

* den UART-TX Pin als Open-Drain konfigurieren kannst
* der UART einen Single-Wire-Modus unterstützt (RX = TX).

Wenn beides der Fall ist wird die Hardware ganz simpel.

von Jim M. (turboj)


Lesenswert?

GEKU schrieb:
> Der Ruhepegel bei RS232 ist High.

Nitpick: Der Ruhepegel bei UART ist high.

Bei RS232 sind die Signale invertiert gegenüber UART, damit wäre das die 
negative Spannung...

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.