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
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
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...
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.
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
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
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.
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ß
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.
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
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.
>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.
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
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.
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.