Forum: Mikrocontroller und Digitale Elektronik 2 USART an einem Atmel


von Matthias (Gast)


Lesenswert?

Hi,

ich würde gerne 2 UART Quellen an nur einem ATMEGA32L Hardware UART 
betreiben. Senden darf immer nur einer, und steuern will ich das ganze 
durch I/0 Pins des ATMEGA32L und einer Flusskontrolle. Bei den beiden 
Quellen handelt es sich um, den Ethernet-Wandler XPORT Direct von 
Lantronix und um einen FTDI. Beide haben die typischen Steuerleitungen 
DTR und DSR und müssten doch somit vom uC aus- bzw.- eingeschaltet 
werden können. Was mich noch zwickt ist, ob ich durch Diode bei den 
beiden zusammenlaufenden RX- und TX Leitungen der beiden Schnittstellen 
einen Stromrückfluss in den Ausgang des jeweilig nichtsendenen Gerätes 
verhindern kann und gleichzeitig mein Signalpegel noch so hoch ist dass 
mein Hardware USART die Bitfolgen erkennt.

Ich hoffe das habe ich jetzt einigermassen verstänflich ausgedrückt.

Danke im Voraus

von Mark E. (mark_e)


Lesenswert?

der mega32 hat 2x hardware uart ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Was mich noch zwickt ist, ob ich durch Diode bei den
> beiden zusammenlaufenden RX- und TX Leitungen der beiden Schnittstellen
> einen Stromrückfluss in den Ausgang des jeweilig nichtsendenen Gerätes
> verhindern kann und gleichzeitig mein Signalpegel noch so hoch ist dass
> mein Hardware USART die Bitfolgen erkennt.

Spendier Dir einen 74xx125, verdrahte die Enable-Leitungen zweier 
Treiberstufen darin mit den Steuerleitungen an FT232/XPORT.

Beide können prinzipiell auch dann Daten senden, wenn ihnen dieses per 
Hardware-Handshake untersagt wird - im Falle des FT232 ist das eine 
Frage der Ansteuerung auf PC-Seite, wenn die kein Hardwarehandshake 
verwendet, wird der Pegel an den entsprechenden Eingängen schlicht 
ignoriert. Mit einem Tristate-Treiber für jedes der seriellen 
Datensignale gehst Du auf Nummer Sicher.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Mark E. wrote:
> der mega32 hat 2x hardware uart ...

Seit wann?

von Gast (Gast)


Lesenswert?

Er meint wohl den ATmega324P.
Das wäre klar die einfachste Lösung.

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


Lesenswert?

> der mega32 hat 2x hardware uart ...

>>Seit wann?

Würde ich auch gerne wissen.


Zum Thema Dioden: Da die UART-RX Leitung Low-Aktiv ist, kann man diese 
über einen PullUp Widerstand von 4k7 an Vcc schalten und die beiden 
TX-Leitungen der Adapter über je eine Diode 1N4148 mit der Anode an die 
RX-Leitung zusammenschalten. Die TX-Leitung des Controllers kann man 
über einen Multiplexer oder über NAND-Gatter an die Adapter anschalten.

von Andreas K. (a-k)


Lesenswert?

Wenn man schon Tx multiplext, kann man das auch für Rx machen. Auch kein 
grosser Unterschied

Wenn man jedoch 2 Pins für die Steuerung frei hat, kann man die 
Tx-Leitung mit je einem Serienwiderstand an die Empfänger hängen und mit 
dem entsprechenden Controller-Pin ggf. auf 1 festnageln.

Software-UART nur für Tx wäre aber auch zu bedenken, ist als Tx-only 
völlig harmlos.

von Matthias (Gast)


Lesenswert?

>Mit einem Tristate-Treiber für jedes der seriellen
>Datensignale gehst Du auf Nummer Sicher.

Was wäre denn da so ein passender IC ?
Kenn mich da nicht aus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hatte ich genannt. 74xx125.

von Matthias (Gast)


Lesenswert?

>Wenn Hardwarehandshake verwendet wird, dann aktiviert das Terminal zuerst >die 
RTS-Leitung (request to send - darf ich senden?) und fragt damit beim >Modem an, 
ob es bereit ist Daten zu empfangen. Wenn das Modem bereit ist, >aktiviert es nun 
seinerseits die CTS-Leitung (clear to send - bin >bereit). Erst nun sendet der 
Sender auf der TXD-Datenleitung asynchron >das oben beschriebene Datenbyte mit 
Start- und Stoppbits.

Das heisst für ich soviel wie.

1.) Gebe ich entweder dem FTDI oder dem Lantronix auf sein RTS, dass an 
einem uC Port geckeckt wird, kein CTS, von einem anderen uC Pin zurück, 
dann sendet er auch nicht. Dann muss ich nochmal eine Leitung des uC 
spendieren, die dann den jeweiligen Port durch die Enable Leitung am 
74XX125 aktiviert. Das wären dann Pro externer USART Quelle 3 
Steuerleitungen. VErstehe ich das richtig

von Marko (Gast)


Lesenswert?

oder man nehme halt für einen der beiden Kameraden ne
Software UART, ist für meine Begriffe da die
elegantere Lösung.
Legt man die SoftUART auf nen Int-Pin, z.B. INT0
kann man dann auch schön eventbasierend proggen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Das heisst für ich soviel wie.
>
> 1.) Gebe ich entweder dem FTDI oder dem Lantronix auf sein RTS, dass an
> einem uC Port geckeckt wird, kein CTS, von einem anderen uC Pin zurück,
> dann sendet er auch nicht. Dann muss ich nochmal eine Leitung des uC
> spendieren, die dann den jeweiligen Port durch die Enable Leitung am
> 74XX125 aktiviert. Das wären dann Pro externer USART Quelle 3
> Steuerleitungen. VErstehe ich das richtig

Nein, glücklicherweise verstehst Du das nicht richtig.

Du benötigst insgesamt zwei Ausgänge und einen Eingang am µC, der 
Eingang ist RXD.

Dasselbe Signal, das einer der Datenquellen mitteilt, daß sie senden 
darf (CTS aus Sicht des µC), wird auch als Steuersignal für den 
Tristate-Treiber verwendet. Du musst nur gegebenenfalls die Polarität 
mit einem 74xx04 anpassen.

Du musst nur mit Deiner Software sicherstellen, daß nur genau eine 
dieser Leitungen zu einem gegebenen Zeitpunkt aktiv ist, sonst würden 
beide Tristatetreiber gleichzeitig aktiv werden, was zu einem 
Kurzschluss führt.

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.