mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART RS232 Multiplexen


Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forengemeinde,

ich hätte da mal eine frage. Ich möchte mit einem Controller welcher 
eine UART besitzt, zwischen mehreren seriellen Geräten Multiplexen. Also 
um genau zu sein die Rx/Tx-Leitung vom Controller, über ein Switch 
"intelligent" mit 2-3 verschiedenen Endgeräten verbinden. Mit 
"intelligent" meine ich eine Möglichkeit, dass mein Controller bzw mein 
Switch erkennt, welches Endgerät gerade Daten senden möchte. Gibt es so 
eine Möglichkeit sowas zu erkennen. Es werden nie Daten zusammen 
gesendet und es soll auch jeweils nur ein Endgerät mit dem Controller 
verbunden werden. Die Möglichkeit, manuell die UART zu multiplexen kenne 
ich bereits, z.B ein zweifacher 1:3 Multiplexer FST3253 oder die 
MAX399/PS399... Ich suche einfach nach einer Möglichkeit, wie ich 
erkennen kann, welches meiner Endgeräte gerade senden tut. Wie könnte 
ich sowas erfassen? Ist es möglich jeweils die Tx-Leitungen meiner 
Endgeräte zusätzlich an Controllerpins zu führen und so beispielsweise 
auf Pegelwechsel zu triggern? Brauche ich für so eine Funktionalität 
InterruptPins oder geht sowas auch an einem normalen GPIO-Pin auf 
Pegelwechsel zu triggern und ein "event" auszulösen? Ich habe 
beispielsweise, schon einmal gesehen, dass an ein µC-System die RS232 
Leitung eines PCs verbunden wird und die Erkennung läuft automatisch und 
die Baudrate stellt sich automatisch im Terminal ein. Wie funktioniert 
sowas?
Vielleicht hat sowas schon einmal gemacht und kann mir Quellen oder 
Dokus nennen.
Danke für Eure Mühe
MFG Spice

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a) Du kannst den zu senden Daten immer einen Block Dummys voraussenden, 
so dass keine Daten verloren gehen, bis die Umschalt-Mimik gemerkt hat, 
was los ist.

b) Du könntest auch die Initiative vom Empfänger ausgehen lassen. Der 
sendet reihum quasi die Frage "hast'was zu melden?" und die Sender 
Senden nur, wenn sie gefragt werden.

Frank

Autor: silo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Idee, aber ich habs vergessen zu erwähnen, ich habe 
erstmal einen einfluss auf die daten, die gesendet werden (bei den 
Endgeräten) Mein controller ist sozusagen mein master und die clients 
senden willkürlich und ich werte die daten aus, dabei habe ich die 
Kontrolle über die Zeitspanne in der die Daten gesendet werden (von den 
Endgeräten). Also sollte mir nix an daten verloren gehen.
Gruß Spice

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mein controller ist sozusagen mein master und die clients
>senden willkürlich und ich werte die daten aus,

Das ist ein Widerspruch in sich. Ein Master fordert
Daten an. Clients haben solange ruhig zu bleiben.

>dabei habe ich die
>Kontrolle über die Zeitspanne in der die Daten gesendet werden

Schon besser. Aber warum schaltet der Master den Multiplexer
dann nicht selber um wenn er weiss wann welcher Client sendet?

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die Daten der Slaves sich nicht zeitlich überlappen, so wie im 
ersten posting geschrieben, so faß doch alle TX-Leitungen der Slaves 
über ein ODER- oder ein UND-Gatter zusammen, je nach dem wie Deine Pegel 
sind (natürlich nicht auf der RS232-Seite sondern auf der VCC-Seite des 
Controllers). So kriegst Du alle gesendeten Bytes mit, ohne Umschaltung 
machen zu müssen und ohne Verlust.
Bei den TX-Leitungen des Masters setzt Du einen Multiplexer dran, oder 
gehst über verschiedene Controller-Pins mit Software-UARTs raus.

Fertig ist die Laube.

Deine Angaben wiedersprechen sich leider in den postings etwas.

Also Aufgabenstellung und Timing klar definieren. Danach ist die Lösung 
meist einfach. Aber Aufgabenstellungen mit diffusen Zielen erzeugen auch 
diffuse Ergebnisse.

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für den Beitrag,
ich glaub jetzt geht alles durcheinander.
Master habe ich wohl im falschen zusammenhang benutzt, sorry. Also 
nochmal, es werden keine daten angefordert, die Endgeräte (ich nenne sie 
mal Teilnehmer) senden willkürlich zu beliebigen zeiten ein paar 
strings. Nie senden Teilnehmer zum gleichen Zeitpunkt und mein µC weiss 
nicht, wann welcher Teilnehmer sendet. Ich kann halt nur von extern die 
zeitspanne der gesendeten strings und die anzahl der wiederholungen 
beeinflussen. Ist es nicht möglich auf ein Pegelwechsel an Tx der 
Teilnehmer zu reagieren? Eventuell mit externer beschaltung? Monoflop 
etc? wenn ich die Rx/Tx-Leitungen der Teilnehmer einmal auf den 
Multiplexer und einmal auf ein Portpin führe, sollte es doch eine 
Softwaretechnische Möglichkeit geben, auf die Bits, die gesendet werden 
zu reagieren und den Multiplexer auf den richtigen kanal umzuschalten 
und dann erst anfangen zu Uart auszulesen?
Danke und Gruß
Spice

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum willst Du erst mit dem Senden eines Datenbits von Deinen 
Teilnehmern einen Multiplexer schalten. Fass doch alle TX-Leitungen der 
Teilnehmer mit einem gatter zusammen auf den RX-Pin Deines Controllers, 
so hast Du immer gleich des gesendete Byte im UART ohne zu multiplexen. 
Dann führe noch alle TX-Pins der Teilnehmer an je ein Port des 
Controllers und Du kannst erkennen, welcher gerade sendet.

Eleganter wäre es, wenn Du aus dem Inhalt der gesendeten Message 
erkennen köntest, welcher Controller sie gesendet hat.

Ein Multiplexen der Teilnehmer-TX halte ich so oder so für überflüssigen 
Ballast.

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@was-willst-du:
Hatte dein posting vorhin nicht gelesen, dir auch besten dank. Deine 
Lösung klingt erstmal sehr trivial und schön, genau darüber habe ich 
auch nachgedacht, aber mir fehlte irgendwo die erkenntnis, dass ich Tx 
leitungen mit gleichem Pegel verbinden darf. Was passiert denn, wenn ein 
Teilnehmer sendet und die anderen Teilnehmer bekommen an ihren Pins 
Pegelwechsel mit bzw werden von extern beeinflusst. Wie verhält sich 
denn die Tx leitung normalerweise zb eines MAX232 auf TTL-Seite, wenn 
gerade nix gesendet wird. Ists hochohmig oder auf High/Low und kann ich 
das einfach so ohne weiteres verbinden? Oder entkoppel ich da quasi 
durch ein logicgatter die einzelnen TeilnehmerTxPins?
Danke für die Hilfe
Spice

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsch verstanden.

Nix TX-zusammenschalten !!!!  Achtung LESEN !!! Über ein Gatter auf eine 
Leitung zusammenfassen.

MAX XXX geben einen festen Pegel ab, wenn der Eingang einen definierten 
Pegel hat, sind ja bloß Pegelwandler.


Aber was schreib ich, wenns nicht gelesen wird ?

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wired OR mit Dioden.

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder so

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank nochmal...
@was-willst-du: nicht so grimmig, bin noch ziemlich feucht hinter den 
ohren was diese Thematik betrifft.
Zu wired or, finde ich leider nicht wirklich was im netz oder hier, aber 
die sache mit dem gatter hört sich schon sehr interessant an. Da die 
Tx-Leitungen der Teilnehmer ja high ist, wenn nix gesendet wird und erst 
beim senden gegen GND pulsieren, denke ich dass ein XNOR-Gatter 
angebracht wäre bei 2 Teilnehmern? oder sehe ich da wieder was falsch?

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry sehe gerade dass ein AND-gatter auch ausreicht, hatte es gerade 
wieder "verplant" :-)

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TX Leitungen über Dioden an RX Leitung mit Pullup.

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also Tx der Teilnehmner über Dioden an den Rx des Controllers? und an 
der Rx hängt ein Pullup?

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jau, nennt sich auch wired-or, in dem falle: pull-up-widerstand und 
dioden mit der anode an rx des controllers und die kathoden an die 
jeweiligen tx-leitung des teilnehmer, ist somit eher ein and-gatter für 
deine anwendung.

grimmig: naja, ein paar grundlagen in schaltungstechnik wären doch ganz 
hilfreich. in jedem zweiten oder dritten thread schreiben die leute: ich 
hab von nix ne ahnung, möchte aber riesige dinge machen, zB. 24 kw 
schalten, sicherheitsregeln und kenntnisse über netzspannung sind wohl 
unwichtig.

in deinem falle wäre doch zuerst mal eine genaue definition der 
aufgabenstellung für dich selbst angebracht. dann hier im forum eine 
klare sprache, um die aufgabenstellung zu erklären. etwas phantasie 
(google ist keine phantasie) und ein paar grundlagen in 
digitaler/analoger schaltungstechnik.

nix für ungut, wir alle haben mal angefangen. bin in zukunft nicht mehr 
so brummig. versprochen.

Autor: Spice (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke nochmal...Grundlagen sind bald da ;-)
Und was könnte ich mit der Tx-Leitung des µC machen? darf man den auf 2 
Teilnehmer ohne weiteres verzweigen? Oder kommt da auch ein Gatter rein?

Autor: Skua C:\> (skua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
2(10) Empfänger sind absolut kein Problem.

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du denn eine Aufgabenstellung ? Du stellst hier Fragen,  bei denen 
sich mir der Eindruck aufdrängt, Du hast keinen Peil, was Du eigentlich 
machen willst. Überleg doch mal logisch:

- Dürfen alle Deine Teilnehmer alle Messages empfangen ?
- Darf nur je eine Teilnehmer eine bestimmte Message empfangen ?
- Sind denn bei allen Teilnehmern die Übertragungsdaten (Baud-Rate, 
Parity usw. gleich) ?

Wenn Du Dir mal diese grundsätzlichen Fragen beantwortest, hast Du doch 
schon die Lösung.

Wieviel Eingänge ein TX-Ausgang speisen kann, steht im Datenblatt der 
jeweiligen Bausteine.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.