PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 Master/Slave



sast
20.06.2006, 10:24
Hi,

hatte die Idee 2 oder mehr MAX3232 auf der TTL Seite parallel zusammenzuschließen, um damit eine Master/Slave Kommunikation aufzubauen. Aber aus irgendeinem Grund, geht das bei mehr als 2 MAX3232 (3xRX an einem TX bzw 3xTX an einem RX) nicht mehr.
Kann mir vielleicht jemand auf die Sprünge helfen, was da schief läuft.

Danke sast

uwegw
20.06.2006, 10:35
Der gerade nicht sendende Controller hält seine Leitung auf einem festen Pegel, sodass die Ausgangstreiber gegeneinader arbeiten, wenn der zweite auf der selben Leitung senden will.

sast
20.06.2006, 10:39
ok.
Gibts da eine Lösung, wie ich die Schaltung trotzdem parallel aufbauen kann.
Sonst müsste ich das gesamte Protokoll ändern.

ghost0
20.06.2006, 10:45
Die Zusammengeschalteten TX-Leitungen mit je einer Diode entkoppeln &
mittels Pull-Up (oder Pull Down) vorspannen.
Das 'zeitmultiplexen' & Protokoll ist Aufgabe der SW.

sast
20.06.2006, 11:06
Danke.
Was für einen Pull-Up nimmt man denn da bei 3,3V Versorgungsspannung.
Wieviel Eingänge kann ich denn an einen RX_OUT hängen, ohne auch da Probleme zu kriegen, da hängen auch noch ein paar Controller dran.

sast

ghost0
20.06.2006, 11:43
Vom Gefuehl her wuerde ich einen 500 Ohm ... 1 KOhm nehmen - sind ca. 6 ... 3 mA. Das sollten alle Ausgaenge gegen Low treiben koennen. Die
Groesse ist von den beteiligten Ein & Ausgaengen sowie von der Frequenz
abhaengig.

Heinz

sast
20.06.2006, 14:25
gut, jetzt hab ich die einzelnen TX über Dioden N4148 ausgekoppelt. Dadurch entsteht aber ein neues Problem. Der Low-Pegel liegt jetzt um die Diodenspannung über Null und das interessiert den RX vom MAX3232 nicht mehr. Gibts da auch wieder eine einfache Lösung, den Pegel weiter runter zu bekommen. Der Pull-Up ist 560Ohm.

Danke sast

ghost0
20.06.2006, 14:37
Shottky Dioden hast Du nicht bei der Hand ? Da reduziert sich
der Spannungsabfall < 0,3V (Ge-Spitzendioden gehen auch).

sast
20.06.2006, 14:54
Danke erst mal für die schnellen Antworten.

Und für die Si Dioden Variante gibts wohl keine Lösung?

Wäre mir eigentlich am Liebsten, wenn mir da jemand weiterhelfen könnte. Irgendwie muss man doch den Pegel verarbeiten können. Muss ich ja nur einmal machen, am RX zum Master.

sast

kalledom
20.06.2006, 17:46
Warum nimmst Du für die RxD-Leitungen keine 74HC... (N)AND- / (N)OR-Gatter ? 74HC... funktioniert zwischen 2,0...6,0 V.
Leider ist mir nicht bekannt, ob im 'Ruhezustand' Low- oder High-Pegel an den RxD-Ausgängen der MAX232 anliegt. Das kannst Du aber nachmessen und entsprechend (N)OR oder (N)AND einsetzen.

sast
20.06.2006, 17:54
Hatte ich auch schon überlegt, als ich mir so die Dioden nebeneinander gemalt hatte. Aber leider hab ich keinen Platz für einen weiteren IC. Maximal noch was acht-beiniges.

sast

uwegw
20.06.2006, 18:31
Was für Geräte hängen denn an den einzelnen Leitungen? Wenns Microcontroller etc. sind, könntest du ihre Sendeleitungen vorübergehend deaktivieren, wenn ein anderer gerade senden will. Ansonsten könntest du nen MAX3222 mit Shutdown-Eingang nehmen, der sich deaktivieren und hochohmig schalten lässt.

sast
20.06.2006, 22:19
Das Problem ist, dass alles schon soweit aufgebaut ist und auch schon durch einfaches Zusammenschalten funktioniert hat. Jetzt ist ein neuer MAX3232 dazugekommen und da geht es nicht mehr. Der Grund ist mir schon klar, aber ich möchte nicht alles nochmal umbauen. Die Sache mit den Dioden als Entkopplung leuchtet mir ein, bringt aber als Nebeneffekt die Spannungsanhebung um die Diodenflussspannung mit sich, so dass ich keinen ordentlichen Low-Pegel mehr habe. Die Lösung sollte also eine Pegelverschiebung sein.

Leider bin ich mit Platz nicht sonderlich gesegnet, so dass der Vorschlag von Karl-Heinz nicht geht.

Auf der anderen Seite wird es auch schwierig eine separate Zuschaltung der TX Pins zu bewerkstelligen, da die MAX3232 dezentral platziert sind. Die Slaves sind zum Teil selbstprogrammierte MCs aber auch Motormodule mit einer RS232 Schnittstelle.

Kann man da vielleicht was mit einem Transistor machen, oder mit einem OPV. Die Baudrate beträgt 9600.

sast

shaun
20.06.2006, 23:13
Nein, das Problem ist, dass RS232 ein Quasi-Standard ist, der eine Schnittstelle zwischen genau ZWEI Geräten definiert. Für Deine Anwendung kommt wohl nur ein Halbduplex-Übertragungsverfahren, wie es die RS485 nahe legt, in Frage. Solange Du an jedem Gerät eine dedizierte Sende- wie Empfangsleitung hast (RS232, RS422), wirst Du nie ohne abenteuerliche Tricksereien eine bidirektionale Kommunikation in jedem Kanal zustande bringen. Andere Systeme, die klar definierte Sende- und Empfangskanäle haben, sind zB Ethernet über Twisted-Pair Leitung (xBase-T), nur braucht man da bei mehr als zwei Teilnehmern einen Hub, der die gesendeten Daten den Empfängern zukommen lässt.

sast
20.06.2006, 23:36
Also eine Kommunikation mit einem PC als Master und mehreren MC-Slaves auf der anderen Seite des MAX3232 hab ich bereits funktionstüchtig in Betrieb.
Was jetzt neu ist, ist dass ich mehrere Pegelwandlungen brauche, um die Motoren in die Kommunikation einzubeziehen. Man könnte sich anstelle der Motoren auch PCs vorstellen.
Die Kommunikation ist so aufgebaut, dass immer nur der Slave reden kann der auch vom Master gefragt wurde. So dass Kollisionen ausgeschlossen sind. Es werden nie mehrere Slaves mit einmal angesprochen.

Ziel ist es nun, in die Slavekette auch einige MAX3232 einzubauen und somit die Motoren einzubinden.

sast

PICture
21.06.2006, 07:37
Hallo sast!

Es müsste mit einem Transistor als Emitterfolger gehen. Es wird aber wieder der high Pegel um ca. 0.7 V niedriger. Es ist aber vielleicht zulässig. Der Rd (pull down) muss auf dem Eigang low Pegel garantieren, wenn der Transistor nicht leitet. Bei so niedriger Baudrate kann der Ru (pull up) auch grösser werden (4,7...10 kOhm). Ganz "saubere" Lösung gibt es (wegen invertierenden Wirkung eines Transistors) nur mit zwei Transistoren.

MfG

sast
21.06.2006, 07:48
Hallo PICture,

kannst du dass bitte mit einer kurzen Skizze verdeutlichen, wo die R's hängen.

Danke sast

PICture
21.06.2006, 07:53
Sorry! Ich habe das schon geskizzed, aber nicht mitgepostet... :)


VCC VCC
+ +
| |
.-. |
Ru | | |
| | |
'-' |
D | |/
>-----|<--+-|
| |>
D | |
>-----|<--+ +----->
| |
D | .-.
>-----|<--+ | |Rd
| |
'-'
|
===
GND

sast
21.06.2006, 08:10
Hallo PICture,

danke erst mal. Soweit ist das klar. Kann ich nun zum invertieren einfach noch einen Transistor dahinter hängen?

sast

Edit: Sorry, aber hab gerade gemerkt, dass da doch gar keine Invertierung vorliegt. Frage ist somit sinnlos.

PICture
21.06.2006, 08:29
Diese Schaltung invertiert nicht, da der Transistor als Emitterfolger arbeitet. Das heisst, dass auf dem Emitter eine Spannung=Basisspannung - 0.7V ist. Deswegen wird bei 0V auf einem der Eingänge auf der Basis +0,7V und auf dem Emitter wieder 0V. Bei z.B. +3,3V auf der Basis wird auf dem Emitter aber nur +2,6V. Wenn das nicht als high Pegel angenommen wird, muss man das mit zwei Transistoren realisieren, das ist aber ganz andere Schaltung. Probiere, bitte, ob das so funktioniert, sonst skizze ich das mit zwei Transistoren.

sast
21.06.2006, 08:40
Danke PICture,

hatte es auch gerade gemerkt. Ich muss mir sowas immer aufmalen, um dahinter zu steigen. Hab mich da halt von deiner vorhergehenden Antwort leiten lassen. Werds mal ausprobieren.

sast

PICture
21.06.2006, 09:04
Hallo sast!

Ich habe die "saubere" Lösung auch schon geskizzed. Die Beiden Transistoren arbeiten hier als Inverter. Bei dem T1 ist seriell mit Basis noch eine Diode Db geschaltet, um die Schwellenspannung auf ca. 1,4V zu erhöhen. Auf dem Kollektor von T2 ist dann 0V (wenn er leitet) oder volle Vcc (wenn er gesperrt ist). Die Resistoren R sind nicht kritisch.

Viel Erfolg! :)

MfG



VCC VCC VCC
+ + +
| | |
.-. .-. .-.
R| | R| | R| |
| | | | | |
'-' '-' '-'
D | | |
>-----|<--+ +--+ +----->
| | | |
D | Db |/ | |/
>-----|<--+-->|--| T1 +--| T2
| |> |>
D | | |
>-----|<--+ === ===
GND GND

shaun
21.06.2006, 11:27
Eine saubere Lösung wäre eine Schnittstelle, die für Multidrop-Betrieb gedacht ist. Solange die Slaves nur empfangen geht das mit RS232, aber wenn sie auch mal was sagen wollen, gibt es nicht bloß Kollisionen, sondern satte Kurzschlüsse. Das kann man natürlich mit Dioden und Pullup umgehen und in der Software dafür sorgen, wie bereits erwähnt wurde, dass nur der gefragte Slave spricht, anders geht es bei anderen Systemen (RS485 zB) ja auch nicht. Wenn die Leitungen nicht zu lang werden und die Geschwindigkeit im Rahmen bleibt, sollte es ausreichen, jedem Slave-Tx eine Diode in Reihe zu schalten (Kathode zum Slave) und am Master-Rx die Busleitung auf +12V zu ziehen, da vielleicht so 4,7k nehmen. Die Transistorschaltung dahinter ist einigermassen unnötig, es sei denn, die Leitungen werden wirklich lang, dann kann es Sinn machen, die Slave-Ausgänge erst am Empfänger zusammenzufassen. Und schön drauf achten, dass die UARTs der Slaves ihr Tx auch brav auf log.0 halten, sonst ist der Bus blockiert.

sast
21.06.2006, 12:19
Hallo PICture,

habe deine "saubere Lösung" aufgebaut, und siehe da es funktioniert.

Nochmal vielen Dank.

Hallo shaun,

Du hast natürlich recht, dass das nicht die schönste Lösung ist. Aber irgendwie musste ich eine Lösung finden, wie ich alt und neu (die Motoren) zusammenbringe. Wie gesagt wenn ich nur Controller nehme und einen Pegelwandler zum PC, dann gibt es keine Probleme solange ich ordentlich nach dem Master/Slave Prinzip arbeite und die Abarbeitung synchron lasse.

Die Motoren kommunizieren normalerweise über Daisy Chain. Das hat nur leider nicht in mein Konzept gepasst. Sonst hätte ich alle Controller ändern müssen, und außerdem muss der Letzte im Bus warten bis die Daten durchgereicht sind.

Übrigens sind alle Schaltungsteile auf der 3,3V Seite angeordnet. Als Widerstände hab ich einfach immer 4k7 eingesetzt. Und die Transistoren sind 2 BC547C. Es kommen 3,3V für H-Pegel und 0V für den L-Pegel raus.

sast

shaun
21.06.2006, 14:06
Na dann ist doch alles klar. Ich habe auch irgendwie übersehen, dass Du den Bus auf der CMOS-Seite verbinden willst, ich war von RS232-Transceivern auf den Modulen ausgegangen. Da die MAX IMHO Pullups an den Eingängen haben, wäre eine reine Diodenlösung dann mit Pulldown etwas blöd gewesen.

PICture
21.06.2006, 19:42
Hallo sast!

Gerne geschiehen! Ich frohe mich immer wenn ich helfen kann, Du hast mit Deiner detalierten Beschreibung der funktionierenden Schaltung wachrscheinlich auch vielen geholfen. :)

MfG