Forum: Mikrocontroller und Digitale Elektronik Arduino RX und TX über einen Draht


von P. H. (bastelflieger)


Lesenswert?

Moin,

ich probiere gerade ein Gerät welches entweder sendet oder empfängt mit 
einem Arduino zu verbinden und dafür die RX/TX Ports zu verwenden. Das 
dumme ist, dass das Gerät über eine Leitung sendet und Empfängt. Von da 
her meine Frage an das Forum:

Hat jemand eine Idee wie man RX und TX parallel schalten kann und den 
Arduino nur jeweils eines von beiden auslesen kann?

Die naive Lösung die beiden Ports einfach zu verbinden und SW mäßig nur 
zu lesen oder zu schreiben haut schon mal nicht hin. Kann man also eines 
per SW abschalten?

Alternativ dachte ich, dass man womöglich über zwei Transistoren jeweils 
den einen oder anderen abklemmen könnte:

1
 
2
3
Gerät
4
|
5
|
6
|---------
7
|        |
8
TR1--|---TR2
9
|    |   | 
10
|    |   |
11
RX  Pin4 TX am Arduino

Die Idee jetzt, dass man einen PNP (TR1) und einen NPN Transistor (TR2) 
nimmt und über einen Steuerausgang (Pin4 wobei egal ist welcher es denn 
wird) entweder RX oder TX abklemmt. Meiner sehr naiven Vorstellung nach 
könnte das funktionieren, wobei ich allerdings nur sehr wenig Ahnung von 
E-Technik habe :-(.

Falls das eine Lösung wäre: Was müsste man denn da für Transistoren 
nehmen? Davon habe ich nämlich gar keine Ahnung... ;-)

Schon mal danke an alle die mir zur Erleuchtung verhelfen wollen!

Grüße
p

von STK500-Besitzer (Gast)


Lesenswert?

Peer H. schrieb:
> Hat jemand eine Idee wie man RX und TX parallel schalten kann und den
> Arduino nur jeweils eines von beiden auslesen kann?

RX sollte ein Eingang sein und TX ein Ausgang.
Die sollte man auf der Arduino-Seite problemlos verbinden können.
Besser wäre es, die beiden Pins mit einem Widerstand zu entkoppeln 
(1kohm?).
Dann kann dein TX-Pin 0 ausgeben und "der Gerät" eine 1, ohne, dass es 
zu einem Kurzschluß kommt.
Der Widerstand darf auch gerne größer sein...

von was? (Gast)


Lesenswert?

Peer H. schrieb:
> Die naive Lösung die beiden Ports einfach zu verbinden und SW mäßig nur
> zu lesen oder zu schreiben haut schon mal nicht hin.

Was ist denn "der Gerät" für eines?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Der RS-485 Standard ist z.B. ein Half-Duplex Protokoll, welches mit 
Tranceivern arbeitet, die per Port auf Senden und Empfangen umgestellt 
werden. Hier z.B. ein paar geeignete Tranceiver von Maxim:
http://www.maxim-ic.com/datasheet/index.mvp/id/1111
Sie benötigen also ausser RXD und TXD noch ein zusätzliches Signal. 
Dafür ist dieser Bus recht robust und kann über dutzende Meter gezogen 
werden.

von STK500-Besitzer (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Der RS-485 Standard ist z.B. ein Half-Duplex Protokoll, welches mit
> Tranceivern arbeitet, die per Port auf Senden und Empfangen umgestellt
> werden. Hier z.B. ein paar geeignete Tranceiver von Maxim:
> http://www.maxim-ic.com/datasheet/index.mvp/id/1111
> Sie benötigen also ausser RXD und TXD noch ein zusätzliches Signal.
> Dafür ist dieser Bus recht robust und kann über dutzende Meter gezogen
> werden.

Alkohol am frühen Morgen?
Was hat RS485 mit oneWire zu tun?

von &KUNZderkann'z (Gast)


Lesenswert?

Bastelflieger,

komm runter auf den Boden und besorge dir die Dokumentation bezueglich 
des Protokolls. Hoffentlich kennst du die Grundlagen der 
Datenuebertragung...

von Achim M. (minifloat)


Lesenswert?

Peer H. schrieb:
> ich probiere gerade ein Gerät welches entweder sendet oder empfängt mit
> einem Arduino zu verbinden und dafür die RX/TX Ports zu verwenden.

K-Line wäre da eine Lösung. Man liest zwar selber mit, was man sendet, 
aber das kann man auch zur Kollisionserkennung benutzen.
Ungefähr so:
1
______         R1
2
      |    ___ 1kΩ
3
   VCC|---|___|---+
4
      |           |
5
    RX|-----------*
6
µC    |     D1    |
7
    TX|----|<|----*----o K-Line
8
      |   1n4148
9
   GND|----------------o GND
10
______|
Die K-Line kann durch TX nur "runter" gezogen werden, dadurch erhält man 
ein "wired-and" aller angehängten TX-Leitungen. Über RX kann man wie 
gewohnt einlesen. Einzig gilt zu beachten, dass man, wenn man die 
Kollisionserkennung nicht braucht, den Receiver vor jedem Senden 
abschalten und danach wieder anschalten muss.

Andere Leute setzen ein Protokoll mit drauf und nennen das dann Lin-Bus.

Wiederrum andere nehmen einen Transistor(NPN, Emitterschaltung), um die 
K-Line runter zu ziehen. Dieser Transistor muss dann natürlich über eine 
Inverterstufe angesteuert werden, das kann auch wieder ein Transistor 
sein.

mfg mf

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

STK500-Besitzer schrieb:
> Alkohol am frühen Morgen?
> Was hat RS485 mit oneWire zu tun?

Was soll denn der Kommentar? Hirn abgeschaltet? Du musst ja nicht 
differentiell arbeiten. Mit ein wenig Nachdenken hättest du drauf kommen 
können, einen der differentiellen Drähte auf 1/2 Vcc zu hängen. Fertig.

von STK500-Besitzer (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Was soll denn der Kommentar? Hirn abgeschaltet? Du musst ja nicht
> differentiell arbeiten. Mit ein wenig Nachdenken hättest du drauf kommen
> können, einen der differentiellen Drähte auf 1/2 Vcc zu hängen. Fertig.

umständlich...

von Osche R. (Gast)


Lesenswert?

P. H. schrieb:

> Hat jemand eine Idee wie man RX und TX parallel schalten kann und den
> Arduino nur jeweils eines von beiden auslesen kann?

Diese Lösung gibt es seit Jahren, sie nennt sich LIN bzw ISO K-Line. 
Dafür gibt's fertige Chips, die sind dann auch kurzschlussfest etc.

von P. H. (bastelflieger)


Lesenswert?

Moin,

vielen Dank für all die konstruktiven Antworten!

Letztendlich hat das K-Line Vorgehen wie von Mini Float beschrieben, 
funktioniert. Nu muss ich nur noch dir Differenzen zwischen 
Protokoll-Spec und Realität in den Griff bekommen.

Schöne Ostern!

Grüße
P

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.