Forum: Mikrocontroller und Digitale Elektronik 2 USART-Geräte an einem Port (Multiplexen)


von Tom (Gast)


Lesenswert?

Hi

Ich möchte an meinem MSP430 eine RS-232- und eine Infrarot-Schnittstlle
über denselben USART-Port verwenden. Sowas hat bestimmt auch schon
jemand gemacht. Leider werde ich nicht fündig. Kann mir jemand einen
Hinweis geben, wie ich Informationen zu dem Thema finden könnte? Mir
fallen keine besseren Suchbegriffe als 'UART' und 'muliplexen' ein.
Auf einen Software-USART möchte ich lieber verzichten, da dieser nur
Pins belegt, CPU-Ressourcen frisst und die Geräte doch nicht
gleichzeitig benutzt werden.

Bin für jeden Hinweis dankbar.

Gruss

Tom

von Michael Wilhelm (Gast)


Lesenswert?

Über Logikbausteine kann man ja durchaus die RxD und TxD-leitungen
splitten und verschiedenen Treibern zuführen. Aber du solltest dir ein
zeitfenster einbauen. Jeder Teil (RS232 und IRDA) bekommt jede ms ein
Zeitfenster in dem die Kommunikation stattfindet.

So könnte man die Synchronisation machen.

MW

von Rahul (Gast)


Lesenswert?

Du willst die Geräte also nicht quasi-gleichzeitig betreiben?!
Dann solltest du dir mal die CMOS-Bausteine 4051, 4052 und 4053
angucken.
Das sind Multiplexer unterschiedlicher Anzahl an Ein- und Ausgängen.

von Rufus T. Firefly (Gast)


Lesenswert?

Analogmultiplexer sind hierfür gar nicht erforderlich, da genügt ein
normaler Digitalmultiplexer wie beispielsweise der '257*, der vier
zwei-zu-eins Multiplexer in einem Gehäuse enthält.

*) http://focus.ti.com/lit/ds/symlink/sn74ls257b.pdf

von Rahul (Gast)


Lesenswert?

die kann man aber auch dafür benutzen...

von Tom (Gast)


Lesenswert?

Cool, genau sowas habe ich gesucht. Ich dachte nicht, dass es so einfach
ist.

Wenn ich die Schnittstellen nun doch quasi-gleichzeitig betreiben will
und beiden ein fixes Zeitfenster zuordne, dann gehen aber die
ankommenden Daten verlohren, wenn mein uC gerade an der anderen
Schnittstelle lauscht. Oder muss ich die Umschalt-Frequenz einfach
höher schalten als die Übertragungsfrequenz, damit die Übertragung
zuverlässig funktioniert?

 1s / (2 x 9600 bit/s) = 50us

Ein Timer invertiert den Selektier-Ausgang alle 50us und die
Empfangs-Routine verteilt die Daten je nach Zustand des
Selektier-Ausgangs auf zwei Ring-Buffer.

Ist das so richtig?

Vielen Dank!

Tom

von Rufus T. Firefly (Gast)


Lesenswert?

.

   "Wenn ich die Schnittstellen nun doch quasi-gleichzeitig
   betreiben will und beiden ein fixes Zeitfenster zuordne,
   dann gehen aber die ankommenden Daten verlohren,
   wenn mein uC gerade an der anderen Schnittstelle lauscht."

Ja, so ist es. Mit Erhöhen der Umschaltgeschwindigkeit garantierst Du
sogar, daß die ankommenden Daten beider Schnittstellen verloren gehen -
das geht so nicht. Nicht mit einer Hardware-UART.

Allenfalls eine Modifikation einer Software-UART, ähnlich der von Dir
beschriebenen Aufteilung könnte funktionieren, nur muss die
Umschaltfrequenz erheblich höher sein. Eine UART tastet den
Empfangsdateneingang üblicherweise mit der sechszehnfachen Baudrate ab;
Du müsstest also mit der 32fachen Baudrate umschalten ...
Beim Senden müsstest Du das Ausgangssignal auf zwei Latches legen,
zwischen denen Du hin- und herschaltest; hier würde theoretisch eine
langsamere Umschaltzeit genügen.

Ob das allerdings sinnvoll ist, wage ich zu bezweifeln.

von Rahul (Gast)


Lesenswert?

Wäre es nicht sinnvoller, den Empfangsteil einer UART per Softwar
nachzubilden, und nur das Sendesignal umzuschalten?
Ob ich nun einen Multiplexer an beiden Pins "quäle", oder den Aufwand
betreibe, 10-11 Bits mit zwei Interrupt-Routinen und einem Timer zu
empfangen, kommt für mich aufs gleiche hinaus, wenn die zweite Variante
nicht sogar einfacher ist.

von Tom (Gast)


Lesenswert?

Hm, an die Hardwarelogik beim Empfang hab' ich nicht gedacht. Ist ja
eigentlich logisch, dass man die mit meiner Idee aus dem Tritt bringt.
Ich werde wohl nur die nicht-gleichzeitige Variante ausprobieren oder
halt einen RS232-IRDA-Adapter basteln, den ich bei Bedarf als 'Kabel'
verwenden kann. Danke für eure Hilfe!

Peace

Tom

von sonocke (Gast)


Lesenswert?

Leider wurde die Frage noch nicht ganz beantwortet...

Anforderung an den
Rx-Pin: 2:1-Multiplexer
Tx-Pin: dominant, wenn Kanal deaktiviert

Die 'Endstufe' des Tx-Multiplexers ist als ein Oder-Gatter (+).
Tx1 = Tx + Disable1
Tx2 = Tx + Disable2

So allgemein ließe sich auch noch ein Broadcast realisieren (wenn wie in 
meinem Fall mehrere ADC per isolierter UART angesteuert werden). Viele 
Isolationsbausteine verfügen zudem über einen Enable-Pin, der sich 
alternativ nutzen und mit dem sich nebenbei noch Strom sparen lässt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

sonocke schrieb:
> Leider wurde die Frage noch nicht ganz beantwortet...

Nach nur dreizehn Jahren?

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.