RS232 TTL Muliplexer

OP #4890848
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?
#4890857
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.
Gast #4890874
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
Gast #4891198
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.
Gast #4891280
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.
OP #4891337
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.
#4891433
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren