Forum: Mikrocontroller und Digitale Elektronik Zwei Geräte an einen USART anschließen, kann ich das dauerhaft so betreiben?


von Thomas (Gast)


Lesenswert?

Hallo,

ich würde gerne wissen, ob meine Lösung zufällig funktioniert, oder auf 
lange Sicht Bauteile zerstört :-) Im Forum habe ich zu diesem Ansatz 
nichts finden können.



Aufbau: (drei teilnehmende Bauteile: Arduino, Bauteil, PC; jeweils zwei 
verbunden)

Batteriebetrieb:
Arduino Pro Mini mit ATMEGA328p auf 3,2V --- schreibt Daten auf Bauteil 
über serielle Schnittstelle ---> Bauteil.

Angeschlossen über USB:
Bauteil <--- schreib und Lesezugriff über serielle Schnittstelle ---> PC



Problembeschreibung:

Das Problem besteht darin, dass mein Bauteil nur eine serielle 
Schnittstelle anbietet. Die Verbindung wird über einen FTDI hergestellt. 
Wenn ich den FTDI anschließe, müsste der genau so geschaltet sein, wie 
der Arduino, also zum Bauteil TX -> RX und umgekehrt.

Ich möchte mir zusätzliche Hardware sparen duck, also habe ich ins 
Datenblatt des ATMEGA geguckt und gesehen, dass die Pins für die USART 
Schnittstelle auch als Eingang im Tri-State geschaltet werden können 
(Tabelle 13.1 Seite 77).

Mein Ansatz setzt also, beim Einstecken des FTDI (irgendein Port zeigt 
mir an, was gesteckt ist), die Register DDRD0 und DDRD1, sowie PORTD0 
und PORTD1 auf 0x00. Damit sollte meiner Meinung nach der Arduino von 
den Leitungen getrennt sein.

Verbunden ist jetzt also [PC, ARDUINO, BAUTEIL] [TX, TX, RX] und [RX, 
RX, TX], wobei der Arduino seine Ports im Tri-State hat.

Die Kommunikation zwischen dem Bauteil und dem PC funktioniert.



Fragen:

Kann ich das dauerhaft so betreiben?

Werde ich Probleme bekommen, weil der Arduino beim Einschalten erst den 
Bootloader startet und damit die serielle Schnittstelle aktiviert, die 
dann falsch verbunden ist (macht es was kaputt, wenn TX mit TX und RX 
mit RX verbunden ist?)? Vom PC muss ich da noch nichts senden, sondern 
warte auf ein "Hallo" des Bauteils.

Wenn es nicht geht würde ich mich über eine kurze Erklärung freuen :-)

Vielen Dank schon mal im Voraus für die Unterstützung!!!
Thomas

von Jean Player (Gast)


Lesenswert?

Moin,
da du wahrscheinlich nicht weisst, wann einer deiner Master(PC, µC) auf 
das "unbekannte" Bauteil zugreift, wäre ein wired or Anschluss 
angebracht.
 Also an die TX Ausgänge der Master ne Diode und nen Pullup an den RX 
Eingang des "unbekannten" Bauteils.

Gruß

von Thomas (Gast)


Lesenswert?

Hallo Jean Player,

danke für die schnelle Antwort :-)

Ich weiß sehr genau wann ich lesen / schreiben möchte.

uC: Wenn die Batterie angeschlossen ist. -> Dann ist der PC [mit FTDI] 
nicht angeschlossen, er wird über den gleichen Anschluss wie die 
Batterie angesteckt. Im Stecker zur Batterie gibt es eine Brücke, die 
einen Pin auf Masse zieht (sonst über internen Pullup auf High).

PC: Wenn der FTDI angeschlossen ist. -> Dann ist die oben genannte 
Brücke offen und der Pin per Pullup auf High.

Die Schutzschaltung, die Du beschreibst, ist aber wahrscheinlich eine 
gute Idee, da am Anfang der Bootloader des Arduino auf dem uC zu 
kommunizieren versucht. Ist das nur "unschön" oder macht die Beschaltung 
TX auf TX Probleme?

Gruß zurück,
Thomas

von me (Gast)


Lesenswert?

Wenn die beiden Ausgänge unterschiedliche Pegel haben (und das passiert, 
wenn einer der beiden sendet) hast du eigentlich einen satten 
Kurzschluss. Eine Diode oder zumindest ein Schutzwiderstand der den 
Strom auf verträgliche Werte reduziert, sind mehr als angebracht. 300 
Ohm dürften recht gut passen und je nach Baudrate durchaus verträglich 
sein.
Bei Openkollektor-Ausgängen mit externem Pullup wäre es egal. 
Push-Pull-Ausgänge wie du sie bei einem AVR und FTDI hast, dürfen nicht 
parallel betrieben werden.

von Thomas (Gast)


Lesenswert?

Hallo me, danke für die Antwort :-)

Ich verstehe Jean und Dich so, dass ich auf jeden Fall eine Diode bei 
beiden TX Pins benötige. Muss das so aussehen? (hinter den tx Pins am uC 
und Pc eine Diode, später zusammengeführt an rx, des Bauteils)

                      (+)
                       |
                      [r]
                      [ ]
PC (tx) --->|---       |
                 >------- (rx) Bauteil
uC (tx) --->|---

Wenn ich die Dioden einbaue, würde ich auch gleich den Pullup Widerstand 
beim RX des Bauteils einsetzen, wenn es zur Stabilität beiträgt (ich 
verstehe nicht, wofür der gebraucht wird).

Ist mein Szenario mit dem Tristate am AVR generell unklug? Ich dachte 
der Tristate Zustand verhindere den Kurzschluss. Dauert es zu lange bis 
der Tristate aktiv ist, weshalb ich noch Kurzschlüsse habe?

Wenn ich auf den Bootloader verzichte und die Pins wie oben beschrieben 
setze, sendet nur der FTDI, der AVR bleibt stumm. Bin ich in dem Fall 
sicher?

Welche Diode sollte man einsetzen? 1N5817?

Vielen Dank nochmal, hoffe die übrigen Fragen können noch beantwortet 
werden. Dieses Forum ist wirklich toll :-)

Thomas

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Als Dioden eignen sich z.B. BAT54, aber andersrum wie oben gezeichnet.

Grüße,

Peter

von me (Gast)


Lesenswert?

Wenn du ohne Bootloader arbeitest und Kollisionen mit dem FTDI 
auschließen kannst, kannst du natürlich auch den AVR-Pin Tristate oder 
Pullup schalten. Du musst allerdings zu jeder Zeit verhindern, dass 
einer der ICs Highpegel treibt und der andere Low zieht. Du darfst mit 
dem AVR daher nicht senden solange der FTDI in deiner Schaltung steckt. 
Da Programmfehler nie auszuschließen sind, würde ich dir immer zu 
100-300 Ohm als Schutzbeschaltung in einer der beiden TX-Leitungen 
raten.

Wie Peter Diener ja bereits gesagt hat, gehören die Dioden umgedreht. 
Die TX-Pins ziehen die Leitung nur mehr auf Low. High wird über den 
Pullup erreicht (falls dein unbekanntes Bauteil nicht ohnehin einen 
Pullup an RX hat). Die Dioden verhindern, dass Strom aus den ICs heraus 
fließen kann und verhindern so die Kurzschlussgefahr.

                      (+)
                       |
                      [R]
                      [ ]
PC (tx) ---|<|---      |
                 >--------- (rx) Bauteil
uC (tx) ---|<|---

oder (wenn du erkennen kannst, dass der FTDI in deiner Schaltung ist):

PC (tx) ---------
                 >--------- (rx) Bauteil
uC (tx) ---[R]---

von Thomas (Gast)


Lesenswert?

Wow, super, danke für die vielen guten Antworten!

Und vielen Dank für die Zusammenfassung, me!!!

Ihr habt mir sehr weiter geholfen! Ich werde mir meinen Aufbau nochmal 
ansehen, wenn genügend Platz ist, werde ich die Dioden einbauen.

Danke auch dafür, dass ich mich jetzt von dem falschen Gedanken trennen 
konnte die TX-Leitungen würden Impulse "Senden" :-s Manchmal lohnt es 
sich doch Dinge nicht einfach zu verwenden, sondern auch mal 
nachzusehen, wie sie funktionieren... .

Werde mir RS-232 mal durchlesen :-)

Schönen Gruß,
Thomas

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.