Forum: Mikrocontroller und Digitale Elektronik Serielle Schnittstelle mit AND-Gatter ein-/ausschaltbar?


von matthias (Gast)


Angehängte Dateien:

Lesenswert?

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?

von oldmax (Gast)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

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.

von Garstiger Gast (Gast)


Lesenswert?

Hmm, wie waere es denn mit einem wired-OR aus Schottky-Dioden?

von slow (Gast)


Lesenswert?

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).

von matthias (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

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

von matthias (Gast)


Lesenswert?

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.

von Purzel H. (hacky)


Lesenswert?

Oder RS422. Das erlaubt einen Master-slave Betrieb mit einem Vorwaerts 
und einem Rueckwaerts-Leiterpaar.

von Matthias L. (Gast)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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.

von Matthias (Gast)


Lesenswert?

>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).

von user (Gast)


Lesenswert?

also wenn man das vor einen pegelwandler macht, also mit 5V logik-Level 
kann das schon funktionieren

von togo (Gast)


Lesenswert?

Nimm nen 4052. Das klappt wunderbar.

von togo (Gast)


Lesenswert?


von matthias (Gast)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

>Das ist bei RS485 auch nicht vorgesehen.

Eben doch. Sieh dir das mal an. Das ist genau für sowas gemacht.

von Matthias L. (Gast)


Lesenswert?

>(mit dem letzen beginnend)

Wie adressierst du denn "den letzten" ?

von Reinhard Kern (Gast)


Lesenswert?

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

von Hans-Georg L. (h-g-l)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

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.

von matthias (Gast)


Lesenswert?

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).

von Reinhard Kern (Gast)


Lesenswert?

Und wie startet so ein Messboard ohne Spannungsversorgung?

Gruss Reinhard

von Purzel H. (hacky)


Lesenswert?

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

von matthias (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.