Forum: Mikrocontroller und Digitale Elektronik UART als "BUS" verwendbar?


von AVRli (Gast)


Lesenswert?

Hallo zusammen,

ich möchte meine Schaltung erweitern und habe nun nur noch die 
Möglichkeit das über den UART zu machen. Daher eine Frage an die 
Experten: Ist es möglich das man mehrere Module an einem RX und einem TX 
Pin anschließen kann?

Meine Überlegung ist die das durch das Protokoll im Master die externen 
Module abgefragt werden.

Der Master muß den Ablauf natürlich steuern und sicher stellen das 
wirklich nur der antwortet der auch gefragt wurde.

Nur geht das so einfach die Pin's zusammen legen?


Gruß und danke im voraus, AVRli...

von Emanuel B. (roquema) (Gast)


Lesenswert?

RS422 bzw. RS485 sind deine Stichworte...

von AVRli (Gast)


Lesenswert?

Ok danke, also ich wollte die vorhandene Hardware nicht unbedingt 
ändern. Ich habe an meinem Master ein MAX232 dran. Wollte nun die Slaves 
einfach daran knüppern, das fällt also aus? (Pegelanpassung 
vorausgesetzt)


Gruß AVRli...

von crazy horse (Gast)


Lesenswert?

geht nicht.
Zumindest nicht nach den RS232-Treibern. Oder mit irgendwelchen 
Kunstgriffen (Tx an mehrere Rx ist kein Problem, wenn man an 
Leitungslänge, Baudrate, EIngangsstrom und Kabelkapazität denkt), die 
ext. Tx über Dioden entkoppeln und mit einem pulldown auf -10V ziehen. 
Bei moderaten Baudraten kann das funktionieren - ich würde sowas nur im 
Notfall nehmen.

von AVRli (Gast)


Lesenswert?

Als Baudrate schwebt mir 4800 Baud vor.
Es ist nicht viel was übertragen werden soll, alle 2 min mal ein 
Datensatz.

Ich denke ich hätte schon mal was davon gelesen wo Slaves über RS232 
angesteuert werden.

Also alle TX mit Dioden entkoppeln und dann danach mit einem Pulldown 
nach unten ziehen.

Ok, ich werde das mal aufstecken, hoff es klappt.

Danke euch, Gruß AVRli...

von Artur Funk (Gast)


Lesenswert?

Wie schon oben gesagt, MAX232 raus, MAX485 oder je nach dem MAX422 rein 
und du kannst mit 9600 Baud über 600 Meter mit bis zu 32 Teilnehmern 
kommunizieren.

von crazy horse (Gast)


Lesenswert?

tja, ganz so leicht ist es leider nicht...

von Artur Funk (Gast)


Lesenswert?

Was soll daran nicht leicht sein? Ich habe einen BUS mit MAX488 
programmiert und zwar den Master. Man braucht soweit ich weiß noch zwei 
zusätzliche Leitungen anzusteuern, wenn man senden oder lesen möchte. 
Ich müßte noch irgendwo Quellcode haben...

von crazy horse (Gast)


Lesenswert?

"tja, ganz so leicht ist es leider nicht..."
"Man braucht soweit ich weiß noch zwei
zusätzliche Leitungen anzusteuern"

Noch Fragen?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Du kannst bei allen Modulen RX und TX brücken und das Protokoll 
dementsprechend ändern, daß alle TX-Ausgänge erstmal Eingänge mit PullUp 
sind. Bei den RX-Eingängen machst Du auch die PullUps an. Der Master 
schaltet dann seinen TX auf Ausgang, versendet eine Anfrage an ein 
spezielles Modul über eine Adresse (hier kann das 9-te Bit genutzt 
werden), dann schaltet er sein TX wieder auf Eingang und das adressierte 
Modul antwortet über sein TX. Danach schaltet das adressierte Modul sein 
TX wieder auf Eingang und so weiter. Hierbei hat man nur eine einzige 
Leitung gegenüber Masse, jedes Modul muß aber die selbst gesendeten 
Daten, die es zeitgleich empfängt, wieder verwerfen.

von crazy horse (Gast)


Lesenswert?

und das heisst dann wieder, auf TTL-Level zu kommunizieren...

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>und das heisst dann wieder, auf TTL-Level zu kommunizieren...

Ja und was ist daran schlimm? Wenn keine 100 Meter überbrückt werden 
müssen, ist das durchaus legitim. Zum Schutz der einzelnen Module kann 
man noch jeweils 1kOhm Serienwiderstand vom AVR nach außen legen. Bei 
niedrigerer Baudrate <56k kann dieser auch bis zu 4k7 betragen.

von crazy horse (Gast)


Lesenswert?

Schlimm ist das nicht. Aber rel. gefährlich für die Bauteile, wenn da 
dran rum gespielt, kontaktiert, auch mal eine Fremdspannung 
draufkommt...
Und längere Leitungen treiben ist auch nicht gerade die Paradedisziplin 
üblicher MCs.
Masseversatz tut ein ein übriges zum an sich schon schlechten 
Störabstand.
Nene, dafür gibts Treiberbausteine. Überlastgeschützte Sender und 
Emfänger, die einiges abkönnen.
Wie gesagt, prinzipiell funktioniert das so, wie du denkst. Das Problem 
sind die Randbedingungen.

von AVRli (Gast)


Lesenswert?

Dank an alle...

@Travel Rec

Vielen Dank für die Erklärung. Das klingt alles recht ordentlich, mein 
Problem ist nun aber das ich schon über einen MAX232 von meinem µC nach 
"draußen" gehe.

Von hier wollte ich nun meine "externen Module" da anschließen wollte. 
Alles natürlich ohne großen Aufwand, wie es immer so sein soll. :-))))

Wenn es nicht geht, ist es natürlich nicht so optimal aber das mit dem 
RX und TX zusammen auf eine LEitung finde ich gut nur ich befürchte das 
es ausfällt weil ich den MAX232 dazwischen hab. :-(

Das Protokoll für die Kommunikation kann man etwas aufbohren, halt die 
Anfragen und Antworten in Frames verpacken die eindeutig adressiert 
sind. Das ganze muß echt nicht schnell sein, 4800 Baud reicht völlig.



Gruß AVRli...

von w. (Gast)


Lesenswert?

wie mann mehre TX entkoppelt wurde doch schon beschrieben da bastelte 
man sich nen passiven Dsub-9-Splitter.und schraubt den dazwischen.

Aber wen du schon das protokoll ändern willst, wäre es nicht schlauer 
nen separater µC als Commcenter zu missbrauchen, der genügend Ports 
besitzt oder die Weichen mittels Busstreibern stellt oder 
Einfachrepeater spielt?

von Daniel F. (df311)


Lesenswert?

Artur Funk wrote:
> Was soll daran nicht leicht sein? Ich habe einen BUS mit MAX488
> programmiert und zwar den Master. Man braucht soweit ich weiß noch zwei
> zusätzliche Leitungen anzusteuern, wenn man senden oder lesen möchte.
> Ich müßte noch irgendwo Quellcode haben...

eine half-duplex-rs485-verbindung braucht - je nach treiber - ein 
zusätzliches signal, das von senden auf empfangen umschaltet. das 
umschalten kann man entweder direkt in einer sende-routine einbauen oder 
mit einem interrupt (TXC_IE) lösen. und ein oder zwei bit zu 
setzen/löschen sollte eigentlich ein vertretbarer aufwand sein - 
zumindest weniger als die rs232 irgendwie auf einen bus unmzubauen

ich habe mir für solche und ähnliche spielereien ein paar max485 (half 
duplex) und buchsenleisten auf ein stücken lochstreifen gelötet, die ich 
nach bedarf einfach zusammenstöpseln kann.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Man kann´s auch kompliziert machen. Schmeiß doch den Max232 ´raus und 
verbinde die Schnittstellen über Schutzwiderstände direkt. Dann bist Du 
alle Sorgen los und sparst einen Haufen Kupfer.

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.