PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zwei Geräte an einem UART



Christoph2
04.05.2015, 11:29
Hi,

ich verwende in einem Projekt den ATmega328 (8MHz, 3.3V) mit dem Arduino Bootloader, damit ich ihn über die serielle Schnittstelle (bzw über usb mit einem ftdi) programmieren kann.
Das programmieren über uart funktioniert nur mit dem hardware-uart.
Außerdem will ich das WLAN Modul ESP8266 verwenden, das ich wegen der deutlich höheren Geschwindigkeit auch am Hardware UART verwenden will.

Funktioniert das prinzipiell? Ich habe es folgendermaßen verschalten:
uC RX -> WLAN TX, FTDI TX
uC TX -> WLAN RX, FTDI RX

Das Programmieren funktioniert problemlos, mit dem WLAN Modul kann ich aber nicht kommunizieren.
Dass sich die Kommunikation überlagert, ist ausgeschlossen. Den FTDI verwende ich nur zum programmieren, also die ersten paar Sekunden nach dem Reset des uC, während der Bootloader läuft. Wenn einmal mein Programm läuft, ist die Hardware UART Schnittstelle frei für das WLAN Modul.

Das Problem sind wahrscheinlich die beiden parallel geschalteten TX-Leitungen von WLAN und FTDI. Ist es möglich, z.B. mit Widerständen eine Schaltung zu bauen, die das parallel anschließen erlaubt?

lg
Christoph

PICture
04.05.2015, 11:44
Hallo!

Bei Steuerung von mehreren Geräten per eine serielle Schnittstelle habe ich immer jedem Gerät eigene Adresse verpasst und nur der zuletzt Adressierte darf antworten. Das benötigt natürlich ein komplizierteres Protokol, mir ist aber bisher keine reine Hardwaremässige Lösung bekannt. :confused:

Christoph2
04.05.2015, 11:53
Ein eigenes Protokoll kann ich leider nicht verwenden, da ich den ESP8266 nicht selbst programmiert habe, und ich auch das Protokoll, das der Bootloader zum flashen verwendet, nicht verändern kann.

Aber ich will eh nicht gleichzeitig kommunizieren können. Während ich flashe, kann der ESP8266 ruhig mist empfangen, der wird eh resettet sobald mein Programm startet. Und während der Kommunikation mit dem ESP8266 verwende ich die serielle Schnittstelle nicht.

lg
Christoph

PICture
04.05.2015, 12:07
Dann am einfachsten wären zwei getrennte bzw. multiplexte RX Leitungen am µC:

µC RX1 -> WLAN TX
µC RX2 -> FTDI TX
µC TX -> WLAN RX, FTDI RX

Im schlimmsten Fall müsste man doppelt nacheinander an beide Teilnehmer gleiches "schicken" und einzeln "anhören".

vohopri
04.05.2015, 12:10
Hallo Christoph,

nachdem es bei dir wegen der zeitlichen Organisation eh nicht zu Kollisionen kommen kann, sollte das mit 2 Dioden und falls nötig noch einem Widerstand zu machen sein. Auswendig weiss ich jetzt aber nicht die Polarität und obs ein pull up oder down sein muss. Wichtig ist, dass sich verschiedene Pegel der Datenausgänge nicht konkurrieren und kurz schliessen.

avr_racer
04.05.2015, 19:00
Hallo,

wie wäre es mit RS485 ?

http://de.wikipedia.org/wiki/EIA-485

Peter(TOO)
05.05.2015, 03:15
Hallo,

nachdem es bei dir wegen der zeitlichen Organisation eh nicht zu Kollisionen kommen kann, sollte das mit 2 Dioden und falls nötig noch einem Widerstand zu machen sein. Auswendig weiss ich jetzt aber nicht die Polarität und obs ein pull up oder down sein muss. Wichtig ist, dass sich verschiedene Pegel der Datenausgänge nicht konkurrieren und kurz schliessen.
Da das UART mit negativer Logik am TTL-Ausgang arbeitet, ist der Ruhepegel eine "1".
Man benötigt also ein AND-Gate.
Mit Dioden:
Anoden zusammen und ein Pull Up da dran.

Allerdings muss man jetzt auf den 0-Pegel aufpassen!
Der treibendes Ausgang schaltet nicht ganz auf 0V und an der Diode fällt auch eine Spannung ab (ca. 0.7V bei Si-Diode und ca. 0.25V bei einer Schottky).
Da muss man sehen, dass der 0-Pegel des Eingangs sicher unterschritten wird.
Genaue Angaben stehen in den Datenblättern.

Natürlich geht auch ein AND-Logikgatter, dann stimmt das mit den Pegeln ohne nachzurechnen!

MfG Peter(TOO)

- - - Aktualisiert - - -

Hallo,

wie wäre es mit RS485 ?

Das hilft auch nicht wirklich weiter.
Man benötigt ein zusätzliches Steuersignal um die Ausgänge umzuschalten, welches scheinbar nicht vorhanden ist, andernfalls schaltet man auch hier zwei Ausgänge direkt aufeinander.

Mit diesem Signal kann man auch jetzt das Logiksignal mit einem MUX umschalten.

Mit RS485 verlagert man das Problem nur, löst es aber nicht.

MfG Peter(TOO)