Forum: Mikrocontroller und Digitale Elektronik bidirektionale Kommunikation über einen Draht


von Zack (Gast)


Lesenswert?

Servus Forum,

ich seh mal wieder vor einem Problem. Und zwar habe ich 2 uCs die ich 
über eine handelsüblichen 3,5-mm Kinkenbuchse (Kopfhöreranschluss) 
verbinden muss/will, wobei die Stromversorgung des einen uC ebenfall 
über diesen 3-Poligen Anschluss erfolgen muss. Die Datenmenge wird 
äußerst gering sein.

Der eine uC wird quasi in ein Control-Panel eingebaut. Dieses beinhaltet 
2 Potis (A/D-Wandler im uC), 1 Schalter und 3 LEDs. Mehr nicht.
Der Andere uC brauch also als Input die 3 Werte und gibt als Output 3 
Werte für die LEDs.
So nun frage ich mich wie sich das Realisieren lässt. Eine Idee war 
UART. Braucht aber min. 2 Leitungen (Rx und Tx), I2C auch (Clock, Data) 
sämmtliche mir bekannten RSxxx bruachen ebenfalls mehr als einen Draht.
Daten in eine Richtung mit UART kein Problem, aber bidiraktional ist 
hier die Herausforderung!
Wer har ne Idee und will sie mir veraten?

Ich bedanke mich schonmal.
MfG
Zack

von TSE (Gast)


Lesenswert?

Can bus arbeitet so weit ich weiß mit einer leitung
aber wenn die datenmenge so gering ist würde ich an deiner Stelle 
einfach selber ein Master/Client bus progen

von Gast (Gast)


Lesenswert?

Hmm naja und wie soll so ein Master-Slave-Bus aussehen?
Was für ansätze gibt für sowas?

von TestX .. (xaos)


Lesenswert?

TSE schrieb:
> Can bus arbeitet so weit ich weiß mit einer leitung
> aber wenn die datenmenge so gering ist würde ich an deiner Stelle
> einfach selber ein Master/Client bus progen

nope, CAN braucht 2 bzw 3 adern...

von Uhu U. (uhu)


Lesenswert?

Ein 1-Draht-Bus kann z.B. so funktionieren:

- Der Bus steht im Idle-Zustand auf 1
- Der Master zieht ihn für bestimmte Zeit auf 0 und stellt dann
  ebenfalls für definierte Zeit ein Datenbit auf die Leitung.
- Dann erhält der Slave einen Zeitslot zugeordnet, in dem er sein Bit
  sendet
- Dann wird der Bus wieder in den Idle-Zustand versetzt.

Auf diesem Protokoll wird ein logisches Protokoll aufgesetzt, das den 
Slots zyklisch bestimmte Werte zuordnet. Die werden dann vom jeweiligen 
µC verarbeitet.

von Bernd M. (bernd_m)


Lesenswert?

CAN ist differentiell und braucht zwei Leitungen.

Machst Du Anlehnung an LIN-Bus:
- 1 Leitung + GND
- 1 Master, n Slaves
- Master sendet / pollt zyklisch oder bei Bedarf
- bei PTP Verbindung keine Adressierung notwendig
- realisierbar mittels USART: RXD und TXD werden über eine Diode 
miteinander
verknüpfert, Pullup nicht vergessen.
- Tricky: sendende CPU empfängt eigenes Gesendete
- nur RX ISR nötig

Gruss Bernd

von Sebastian .. (zahlenfreak)


Lesenswert?

Ich würde durch umpolen der Versorgungsspannung Daten zum Slave senden. 
Der Slave braucht dann nur einen gleichrichter. Vom Slave zum Master 
gehts dann über den dritten draht.
Auf die Weise sollte man auch Hardware-UART oder -SPI des Controllers 
nutzen können. Ist dafür hardwareseitig aufwändiger als andere Lösungen.

Sebastian

von STK500-Besitzer (Gast)


Lesenswert?

Sony LANC funktioniert auch als "1wire", wobei dort noch ein Takt mit 
übertragen wird.
Man sollte also mit jeweils einem Open-Collector-Treiber pro Seite Daten 
auf einer Leitung senden können. Wenn man dann noch das Signal wieder 
abgreift, kann man dann auch die Daten des anderen (und die eigenen) 
empfangen.
Dadurch sollte auch eine Kollisionserkennung möglich sein.

Die Lösung mit der Wechselspannung wird für unidirektionale 
Kommunikation im Bereich der Modelleisenbahn benutzt. Dass man da auch 
eine Rückmeldung hat, ist mir nicht bekannt. Dass es mit nur einer 
Leitung zur Rückmeldung funktionieren soll, bezweifle ich, da ein 
Masse-Bezug fehlt.

von Ich (Gast)


Lesenswert?

Es reichen auch zwei Drähte für Versorgung und Signal. Schau Die mal das 
EIB Protokoll oder die billigene Derivate an (z.B. www.freebus.org).
Wenn Spaß macht kannst Du ja auch was auf "HF" modulieren und mit einem 
TP wieder rausholen.
Signal kannst Du über nen PWM Ausgang erzeugen (so im kHz Bereich) und 
mit einem C auf die Versorgung schicken. Der Empfänger filtert sich das 
Nutzsignal wieder raus. Anders rum funktioniert das natürlich genauso 
(siehe Power Line)
Gruß

von (prx) A. K. (prx)


Lesenswert?

UART half duplex ist problemlos mit einem Draht machbar. Auf beiden 
Seiten RX direkt dran und TX über eine Diode einkoppeln, dann noch einen 
Pullup dran. Klappt besser, wenn einer den Hut auf hat, also der Slave 
nur auf Anfragen antwortet.

von space (Gast)


Lesenswert?

Moin,

das ist ja alles schön und gut, aber lohnt sich der Aufwand?
Beim Einstecken eines Klinkensteckers wird zwischen benach-
barten Kontaken kurzzeitig ein Kurzschluss erzeugt. Hoffentlich
himmelst Du damit nichts.
Viel Erfolg
Stefan

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


Lesenswert?

Wenn Du mittels offenem Kollektor beidsitig auf den Signaldraht gehst, 
der mittels Pullup nach Vcc gezogen ist, kannst Du die Controller über 
UART verbinden. RX und TX werden in dem Fall auf beiden Seiten gebrückt. 
Der sendende Controller muß seine eigenen Daten ausmaskieren. Der Slave 
sendet nur auf Anfrage des Masters.

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


Lesenswert?

>Beim Einstecken eines Klinkensteckers wird zwischen benach-
>barten Kontaken kurzzeitig ein Kurzschluss erzeugt. Hoffentlich
>himmelst Du damit nichts.

Wenn man + auf die Spitze, Signal auf den Ring und Masse auf den Schaft 
gibt, geht das schon. Die Signalleitung sollte mit einem 
Schutzserienwiderstand versehen werden.

von Philipp (Gast)


Lesenswert?

1. Lösung 1-wire
2. Lösung eigene HW dazwischen :

So hab ich es mal gemacht. Die Versorgung muß z.B. min. 6V sein. Dann 
werden die Daten auf der Spannungsversorgung als Serielles Protokoll 
übertragen, indem die Spannungsänderung an der Versorgungsspannung 6V = 
LOW, 9V = HIGH die Daten ergeben. Damit kannst du nicht wahnsinig viel 
übertragen, aber so 300 Baud gehen sich schon aus (bei einigen 100mA). 
Eine kleine Zusatzhardware ist schon notwendig, aber der Stabi sitzt an 
der Versorgungsspannung und davor reicht schon ein Widerstand, 
Transistor und eine Zener Diode.

Wenn du 2x Plus nimmst, dann geht es in beide Richtungen. Ich wollet 
damals nur 2 Verbindungsleitungen.

ciao,
Philipp

von Blackbird (Gast)


Lesenswert?

Der "Control-A1-Bus" von Sony erfüllt alle Deine Anforderungen. Das 
Protokoll ist minimal, es ist bidirektional und kurzschlußfest. Und man 
kann es beliebig erweitern.
Applikationen gibt (gab) es viele und es gab mal eine gar nicht kleine 
Community, die sich mit allen Hardware-, Protokoll- und 
Software-Aspekten beschäftigt hatte. Es sollte sich also genügend 
Material für eine eigene Implementierung finden lassen.


Blackbird
PS.: In meine "Vor-µC"-Zeit hatte ich so einen Adapter noch diskret 
aufgebaut. Der tut es heute noch mit meiner Anlage.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Eindraht-RS232-Halbduplex
Erschienen in Elektor Ausgabe 463, Juli/August 2009
http://www.elektor.de/jahrgang/2009/juli-047-august/eindraht-rs232-halbduplex.989203.lynkx

von Matthias G. (matttthias)


Angehängte Dateien:

Lesenswert?

Hallo,
anbei eine mögliche Lösung....


Grüße

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.