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