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