www.mikrocontroller.net

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


Autor: Zack (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TSE (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

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

Autor: Andi ... (xaos)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd M. (bernd_m)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian ... (zahlenfreak)
Datum:

Bewertung
-1 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: space (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eindraht-RS232-Halbduplex
Erschienen in Elektor Ausgabe 463, Juli/August 2009
http://www.elektor.de/jahrgang/2009/juli-047-augus...

Autor: Matthias Gessler (matttthias)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
anbei eine mögliche Lösung....


Grüße

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.