Forum: Mikrocontroller und Digitale Elektronik RS232 TTL Muliplexer


von Olli Z. (z80freak)


Lesenswert?

Hallo,

ich habe einen Aufbau bei dem mehrere Module von einem kleinen 
Attiny/Atmega angesteuert werden müssen. Die Kommunikation geht dabei 
immer vom Atmega aus und arbeitet mit einer sehr niedrigen Baudrate 
(max. 2400). Der von mir favorisierte Atmega hat nur einen UAR. Wie 
könnte ich die RX/TX so multiplexen das ich damit mehrere Geräte 
abfragen kann?

Ich dachte da an sowas wie einen einfachen 74er Baustein, welcher einen 
2- oder 3-Bit Binäreingang hat und ein digitales Eingangssignal auf den 
jeweiligen Ausgang schaltet. So sollte immer nur ein Sender aktiv sein. 
Das ganze natürlich entsprechend der RX und TX Richtung.

Hat sowas schonmal jemand realisiert und kann mir einen Tipp geben 
welche Logic-ICs hier am besten geeignet sind und ob ich das so 
überhaupt hinbekommen kann?

von Jim M. (turboj)


Lesenswert?

Olli Z. schrieb:
> Die Kommunikation geht dabei
> immer vom Atmega aus und arbeitet mit einer sehr niedrigen Baudrate
> (max. 2400). Der von mir favorisierte Atmega hat nur einen UAR.

So niedrige Baudraten kann mann auch in Software regeln, z.B. mit einem 
Timer. Hier dürfte selbst mit Atmega mehr als 1 Software UART möglich 
sein - bei intelligenter Programmierung versteht sich.

von Jim M. (turboj)


Lesenswert?

Olli Z. schrieb:
> So sollte immer nur ein Sender aktiv sein.
> Das ganze natürlich entsprechend der RX und TX Richtung.

Äh, UART kann man ver- AND- en, wenn sichergestellt ist das nur ein 
Gerät sendet. Also entweder 74xx AND oder einfach 1 Widerstand + 1 Diode 
pro TX.

von Georg (Gast)


Lesenswert?

Olli Z. schrieb:
> Hat sowas schonmal jemand realisiert und kann mir einen Tipp geben
> welche Logic-ICs hier am besten geeignet sind und ob ich das so
> überhaupt hinbekommen kann?

MAN kann das natürlich hinbekommen. Für den Sender z.B. kann man einen 
74xx138 verwenden und damit 8 TxD-Ausgänge ansteuern. Es gibt aber viele 
Möglichkeiten, das wird wohl ein langer Thread.

Georg

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Einen TxD Ausgang auf 4 oder 8 Leitungen umschalten geht mit dem 74138 
bzw. einem halben 74139. Das TxD auf den /E  Eingang geben; einen 
Ausgang mittels A01[2] selektieren unn fertsch.

Gruss
WK

Edit: huups - zu langsam.

: Bearbeitet durch User
von Christian M. (Gast)


Lesenswert?

Olli Z. schrieb:
> Die Kommunikation geht dabei
> immer vom Atmega aus

Olli Z. schrieb:
> RX und TX Richtung

Was jetzt, Unidirektional oder Bidirektional?

Du könntest es softwaremässig lösen, dass Du zuerst ein Gerätenummer 
oder so sendest. Irgendein Protokoll brauchst Du ja sowieso! Und den RX

Jim M. schrieb:
> kann man ver- AND- en

Gruss Chregu

von A. S. (Gast)


Lesenswert?

Ja, geht problemlos.
Wenn Rx und Tx getrennt Multiplex werden, kannst Du den Durchsatz etwas 
erhöhen, indem Du schon den nächsten anfragst, während der erste noch 
antwortet. Dann aber Anfrage erst beenden, wenn die Antwort fertig ist.

Ich würde trotzdem auch dringend ein Busprotokoll und parallele 
Leitungen empfehlen.

von Wolfgang (Gast)


Lesenswert?

Georg schrieb:
> Für den Sender z.B. kann man einen 74xx138 verwenden und damit
> 8 TxD-Ausgänge ansteuern.

Um die Sendeseite des Master-µC bräuchte man sich gar keine Gedanken zu 
machen, falls vom Master jeweils eine Adresse mit gesendet wird und dann 
jedes Modul selber weiss, ob es gemeint ist.

Ohne mehr über die Module zu wissen, kann man allerdings wohl nur die 
allgemeine Multiplexer-Demultiplexer-Lösung nehmen.

von Olli Z. (z80freak)


Lesenswert?

Wow, erstmal vielen Dank für die rege Beteiligung!

Ich sollte erwähnen das ich auf das Serialprotokoll der Module keinen 
Einfluß habe. Von daher ist die Bus-Idee mit eigenem Protokoll leider 
nicht umsetzbar.

An den Einsatz von UND-Gattern hatte ich zu Anfang getestet. Das Problem 
war dabei nur, das die UND-Gatter immer einen Ausgangspegel haben. Damit 
wäre ein inaktives Modul, welches am Ausgang des UND ein LOW abgibt, 
dominanter als ein aktives welches ein HIGH ausgeben möchte. Somit 
müsste ich dann nochmal alle UND-Ausgänge wieder verODERn.

Daher ging ich in Richtung Multiplexing. Damit ist sichergestellt das 
jeweils nur ein Gerät mit dem Atmega verbunden ist und diese sich nicht 
gegenseitig stören können. Natürlich muss die TX gemultiplexed und die 
RX gedemultiplexed (uah, furchtbares Denglisch ;-) werden.

Als Alternative zum Multiplex-Verfahren könnte man vielleicht auch ein 
Tri-State-Gate vor RX/TX eines jeden Moduls setzen? Dabei bräuchte man 
ggf. einen BCD-zu-Dezimal Dekoder mehr um nicht so viele Ports als 
EN-Leitungen zu verbraten.

Mit "Unidirektional" meinte ich den Kommunikationsstart. Zwar würden die 
Module ggf. selbst Daten senden wollen, aber das ignoriere ich. Durch 
einstellen der RTS/CTS Signale sollte es gelingen das diese erst senden 
wenn sie "dran" sind. Wenn dabei dann einzelne Pakete flöten gehen wg. 
Bufferüberlauf ist das kein Beinbruch in meinem Fall.

Richtig sauber wäre natürlich jeweils noch einen FIFO-Puffer vor die 
serielle der Module zu klemmen. Aber ich glaube das ist nicht notwendig.

von chris (Gast)


Lesenswert?

Ganz traditionell 4x 4051b je rs232/485/422/TTL/lin/i2c/SPI/ICP/ADC.
bei 16x mux.
Eingang Dwarf, Ausgang Pmod, das erklärt auch die 4x anstelle von 2-3x .

von Kurt B. (kurt-b)


Lesenswert?

Olli Z. schrieb:
> Wow, erstmal vielen Dank für die rege Beteiligung!
>
> Ich sollte erwähnen das ich auf das Serialprotokoll der Module keinen
> Einfluß habe. Von daher ist die Bus-Idee mit eigenem Protokoll leider
> nicht umsetzbar.
>

Machs dir halt ganz einfach, nimm drei Transistoren und ziehe mit 
jeweils zweien von ihnen die beiden nichtgewünschten Kanäle/Signale 
gegen Masse weg.

Drei Entkoppeldioden, drei Transistoren (können z.B. BS170 sein), und 
ev. noch drei Längswiderstände in den Signalpfaden.

 Kurt

von Olli Z. (z80freak)


Lesenswert?

Ich glaube fast, das ein 4052 oder zwei 4051er wohl genau das ist was 
ich suche...

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.