Hallo, ich arbeite gerade an einem System, bei dem mehrere Boards mit RS232 (5V-Pegel) angesprochen werden sollen. Hierfür will ich die RS232-Verbindung unter bestimmten Zuständen für manche Boards ausschalten. Ist es möglich, mit dem RS232-Signal über ein AND-Gatter (z.B. 74HCT08) zu gehen und mit dem zweiten Eingang einen ENABLE-Eingang zu haben?
hi Mit Und_Gattern wird das nix, weil das Ausgangspotential gebunden ist. Nimm einen Buffer mit Tristate-Ausgang und CS-Eingang. Bspw. 74LS244 Vielleicht findest du welche, die nicht 8-Bit breit sind. Alternative.... du machst eine Ringleitng. RxD auf TxD des nächsten µC usw bis du wieder am Anfang bist. Dann sendest du vor den Nutzdaten eine Kennung mit, sowas wie µC-Nummer. Im Programm prüfst du, ob die empfangenen Daten für den µC bestimmt sind, wenn nicht, sendest du die Daten einfach wieder weiter. Der nächste empfängt usw. Gruß oldmax
Für sowas ist RS485 gedacht. Deren SendeTreiber lassen sich direkt mit nem Pin abschalten. Somit belegt immer nur den Bus, der gerade was erzählen will.
Hmm, wie waere es denn mit einem wired-OR aus Schottky-Dioden?
Es gibt viele Möglichkeiten das zu realisieren. Bastellösungen mit Dioden, Gattern, Widerständen, Optokopplern; bewährte Lösungen wie RS485, I2C (gut ist nicht RS232ähnlich-seriell) Wie ist denn die Aufgabenstellung? Welche Umgebung? Leitungslängen? Störfestigkeiten? Schon vorhandene Installationen? Halbe Spezifikationen ergeben halt auch nur halbe Sachen (Antworten).
Danke für die Tipps bisher. Bislang ist noch nichts aufgebaut. Das System ist bisher nur in der Planung. Bei dem System handelt es sich um ein Messsystem. Es soll eine Hauptplatine geben, die von den einzelnen Messboards die Informationen sammelt und verarbeitet. Das ganze soll ein modularer Aufbau sein. Ich dachte nun, ich fahre von der Hauptplatine zum ersten Messboard. Von dem wird zum zweiten weitergefahren, usw. . Das heisst die Messboards haben (neben den Sensoranschlüssen) zwei Anschlüsse (Input & Output). Über Input wird die Spannungsvergung und das RS232-Signal eingespeisst. Über Output wird die Spannungsversorgung und das (abschaltbare) RS232-Signal an das nächste Messboard geleitet. Nun zur Aufgabe: Da es ein modulares System sein soll und die Anzahl der verwendeten Messboards unterschiedlich sein wird, muss es eine Art Initialisierunglauf geben. Da ich die einzelnen Messboards nicht selbst codieren will, würde ich die Kodierung gerne dynamisch machen. Und zwar wie folgt: - Gerät wird eingeschaltet - Alle Messboards schalten das RS232-Singal am Output aus - Hauptplatine sendet Initialisierungsbefehl mit Adresse 1 auf den Bus - erstes Messboard erhält diesen Befehl, kodiert sich auf Adresse 1, schickt Bestätigung an Hauptplatine und schaltet RS232-Signal an Output ein - Hauptplatine sendet Initialisierungsbefehl mit Adresse 2 auf den Bus - ... - Hauptplatine sendet Initialisierungsbefehl mit Adresse X auf den Bus - keine Antwort: Hauptplatine beendet Initialisierungslauf Da ich zusätzlich noch eine galvanische Trennung des RS232-Signals haben möchte (wegen Masseschleifen) würde ich es nun am liebsten mit Optokopplern machen. Ich habe mal eine Schaltung angehängt. Vielleicht kann jemand einen Blick darauf werfen und seine Meinung dazu äußern.
>Bei dem System handelt es sich um ein Messsystem. Es soll...
Nimm RS485. Immer eine Verbindung von Teilnehmer zu Teilnehmer. So
kaskadiert und adressiert sich das selbst.
Wenn ich RS485 nehme, heisst das aber auch, dass alle Informationen der Teilnehmer über den Teilnehmer direkt nach dem Hauptboard gehen. Pro Messwertabfrage und Messboard sind das vorraussichtlich um die 60 Byte. Am liebsten wäre es mir, wenn das Hauptboard gezielt jedes Messboard anspricht und dieses ohne Umwege direkt dem Hauptboard antwortet.
Oder RS422. Das erlaubt einen Master-slave Betrieb mit einem Vorwaerts und einem Rueckwaerts-Leiterpaar.
Dann bau mit RS485 den klassischen Bus auf. Allerdings musst du dir da Gedanken über eine Adressierung machen. Aber so hast Du direktverbindung zum Master. Alternativ könntest du auch, wenn alle in Reihe sind, einfach einen AnfrageFrame durch alle durchlaufen lassen und jeder trägt seine Daten einfach dazu. So geht eine Nachricht einmal im Kreis, und wenn sie wieder den Sender (Master) erreicht, hast du Daten zu den Messgeräten gesendet und gleichzeitig Daten von den Messgeräten empfangen...
Hi! > - Hauptplatine sendet Initialisierungsbefehl mit Adresse 1 auf den Bus > - erstes Messboard erhält diesen Befehl, kodiert sich auf Adresse 1, Was ist wenn einer die Busverkabelung ändert und Wert2 auf Adr.1 ankommt? Es sei denn die Module melden sich mit einer ganz bestimmten Kennung zurück. Dann kannste aber auch gleich fest codieren(Schalter/Jumper) Viel Erfolg, Uwe
matthias schrieb: > Wenn ich RS485 nehme, heisst das aber auch, dass alle Informationen der > Teilnehmer über den Teilnehmer direkt nach dem Hauptboard gehen. Wie? Genau das willst du doch: > Am liebsten wäre es mir, wenn das Hauptboard gezielt jedes Messboard > anspricht und dieses ohne Umwege direkt dem Hauptboard antwortet. Und genau dafür ist RS485 gedacht. Deine Murkslösung mit der vergewaltigten RS232-Schnitte wird dir nur Probleme bescheren. BTW: CAN wäre auch eine Möglichkeit.
>Da ich zusätzlich noch eine galvanische Trennung des RS232-Signals haben >möchte (wegen Masseschleifen) würde ich es nun am liebsten mit >Optokopplern machen. Ich habe mal eine Schaltung angehängt. Vielleicht >kann jemand einen Blick darauf werfen und seine Meinung dazu äußern. Schau Dir dazu mal bei analog.com die Sparte "Iso Coupler" an. Die Teile sind nicht schlecht. Wenn Du dynamisch Adressieren willst, dann könnte das interessant werden. Mit RS485 wird das wohl eher nichts. Aber wenn man RS422 macht, dann sollte das gehen. Pro Gerät am Bus jeweils 2 RS422 Treiber (je 1x RX / 1x TX). Mit den Enable Leitungen kann man das dann ganz gut "durchschalten". Mach Dir aber auch mal Gedanken zum Thema Reinitialisierung. Falls ein Teilnehmer in der Kette mal nicht mehr funktioniert, .... So was hab ich schonmal gebaut. Darf aber keine weiteren Details nenen. Je nach Länge der Eimerkette, dauert die Initialisierung eine Weile. Höngt man am Ende einen Loop rein, dann kann man die Kette auch schön überwachen (falls es mal dazwischen eine Unterbrechung gibt).
also wenn man das vor einen pegelwandler macht, also mit 5V logik-Level kann das schon funktionieren
Ich frage mich, warum es mit RS485 einfacher sein soll so etwas zu implementieren!? RS485 besitzt doch nur ein anderes Übertragungsprinzip. Protokoll-mäßig gibt es keine Definition. Daher sollte es doch egal sein, ob ich die Software für RS232 oder RS485 schreibe. Ich sehe auch bei dem Bus-Aufbau von RS485 keinen Vorteil. Um eine automatische Initialisierung durchführen zu können, muss ich meines Erachtens einzelne Busabschnitte weg- bzw. dazuschalten können. Das ist bei RS485 auch nicht vorgesehen. Zum Thema Reinitialisierung: Bei der Übertragung der Messwerte sendet jedes Messboard seine Kennung mit. Das Hauptboard überwacht ob alle Messwerte ankommen. Sollte das nicht der Fall sein, wird nach und nach (mit dem letzen beginnend) jedem Teilnehmer den Befehl zugeschickt, seinen Ausgang auszuschalten. Nachdem alle Messboards ihren Ausgang ausgeschaltet haben wird eine neue Initialisierung durchgeführt. Dass das etwas Zeit in Anspruch nimmt ist mir klar, ist aber auch kein Problem.
>Das ist bei RS485 auch nicht vorgesehen.
Eben doch. Sieh dir das mal an. Das ist genau für sowas gemacht.
>(mit dem letzen beginnend)
Wie adressierst du denn "den letzten" ?
Hallo, ich betreibe seit vielen Jahren solche Systeme, aber da wird ein Multiplexer für die RS232C-Signale verwendet, der TxD vom PC auf n Schnittstellen weitersendet und das antwortende RxD (es antwortet immer nur die angesprochene Station) an den PC durchschaltet. Der arbeitet mit originalen V24-Schnittstellen oder mit entsprechenden Lichtleitern. Anders als mit dem Multiplexer geht es auch nicht, da RS232C nicht abschaltbar ist, man kann nur eben die Mux-Mimik in die Messgeräte direkt einbauen (wie bei RS485), aber das kommt letzlich auf das gleiche heraus. Der PC fragt ringsum alle Stationen ab, die Online sind, und fragt zwischendurch auch alle anderen möglichen Adressen ab - antwortet eine, wird sie Online gesetzt. Die Adressen werden im Gerät eingestellt. Funktioniert völlig problemlos seit rund 20 Jahren. Bei ganz wenigen Geräten kann man auch TxD parallel anschliessen und RxD mit Dioden verknüpfen, das war früher üblich für NC-Maschinen. Gruss Reinhard
Nimm Busfähige Treiber und verwende das 9 Bit Protokoll, das fast alle MCs beherschen. Sobald der Master eine "Adresse" auf dem Bus legt ( 9. Bit gesetzt) wachen alle Slaves via Interrupt auf und schauen nach, ob sie gemeint sind. Wenn nicht ist die Sache erledigt. Stimmt die Adresse des Slaves überein bleibt er wach und hört oder antwortet auf daten ( 9. Bit nicht gesetzt). Die Adressen der Slaves kannst du fix in die Firmware schreiben oder über I/O Ports einstellbar machen. HG
Hans-georg Lehnard schrieb > Nimm Busfähige Treiber und verwende das 9 Bit Protokoll, > das fast alle MCs beherschen.... Das ist noch besser. Das Ganze mit RS485 Treibern. Perfekt.
Also, ich werde wohl wirklich auf RS485 umsteigen. Als Treiber würde ich den 75176 nehmen. Aber wie sieht es mit der automatischen Initialisierung aus? Wie wäre es denn, wenn ich auf dem Messboard nicht den Bus vom Output ausschalten, sondern die gesamte Spannungsversorgung? Somit wären immer nur die Boards aktiv, die schon initialisiert sind (und das eine, das gerade initialisiert wird).
Und wie startet so ein Messboard ohne Spannungsversorgung? Gruss Reinhard
>75176
Sind der letzte Schrott. die lassen 40mA runter und haben noch nichts
gemacht. Nimm was Neueres. zB einen ADM483 oder so.
Optokoppler sind unnoetig, denn die Treiber haben einen grossen
gleichtaktbereich.
Bei der galvanischen Trennung geht es mir hauptsächlich um die Vermeidung von Masseschleifen. Wenn ein System aus einer Hauptplatine und sagen wir mal 10 Messboards besteht, kann da schon was zusammenkommen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.