PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bündeln v. seriellen Kabeln funzt nicht... (doch! gelöst!)



Willa
12.04.2008, 22:08
Hallo!
Schon oft wurde in diesem Forum empfohlen zum ansteuern von 2 µC's einfach die seriellen kabel zusammenzufassen und gebündelt "in den PC zu stecken". Das wurde mir im Forum auch mal so erzählt und ich habe es auch wiederholt und dieses Verfahren anderen Usern empfohlen 8-[ . Jetzt bin ich endlich mal dazu gekommen das selber auszuprobieren und stelle fest dass es nicht funktioniert. Falls beide µCs mal genau gleichzeitig Daten an den PC senden, NUR DANN kommt ein Zeichenwirrwarr am PC an. Senden die µCs nacheinander, so kommt überhaupt nix an. Ist nur ein µC mit dem seriellen Kabel verbunden, so funktioniert alles wunderbar.
Komischerweise funktioniert das senden vom PC zu den µCs auch wenn beide µCs angeschlossen sind (Empfang in den µCs per Inkey())...
Also, so problemlos scheint das nicht zu funktionieren... Gibts vielleicht noch ein paar Tipps warum das so ist?

Viele Grüße,
William

edit: es funktioniert doch, das Problem ist gelöst (siehe weiter unten in diesem Thread)

Vitis
13.04.2008, 00:34
klar geht das nit ... wenn die TX einfach zusammengelötet werden laufen die pegel gegeneinander ... kann ja nicht gehen.
wenn, dann geht das nur über je eine diode an den TX und n Pullup.

kolisson
13.04.2008, 00:50
und VITIS ... natürlich nur wenn die micros nicht gleichzeitig sprechen.

gruss


und an dich willa:
was soll das denn bringen zwei micros an einen port zu hängen, wenn du kein protokoll hast ? da geht ja aus deiner anfrage hervor, dass du keines hast.

möchtest du zwei oder einhundert mikros via pc über seriell abfragen ?
(das geht sehr (oder mittel) problemlos über eine serielle schnittstelle am pc

das gleiche gilt für den fall, dass du 2 oder einhundert micros kommandieren willst.

wenn die micros allerdings auf der gleichen leitung von sich aus sprechen sollen.. brauchst das master - slave protokoll... sonst reden die durcheinander.

MASTER/SLAVE heisst : einer steuert die konversation. er sagt also, wer sprechen darf und wer das maul zu halten hat. dann gibt es keine probleme.

gruss klaus

Willa
13.04.2008, 10:04
Hallo! Danke erstmal für eure Posts.

klar geht das nit ...
Naja, soooooo klar scheint das nicht zu sein, schließlich wurde das hier im Forum 3mal unabhängig voneinander empfohlen... Sonst wäre ich ja gar nicht auf die Idee gekommen...

wenn, dann geht das nur über je eine diode an den TX und n Pullup
Könntest du das noch ein bisserl genauer erläutern? Dioden machen ja sinn, einfach nach jedem TX eine in die Leitung oder...? Und von wo nach wo dann Pullups?

was soll das denn bringen zwei micros an einen port zu hängen, wenn du kein protokoll hast ? da geht ja aus deiner anfrage hervor, dass du keines hast.
Naja, mein "Protokoll" ist: PC sendet eine Frage, µC1 antwortet sofort, µC2 wartet 100ms, µC3 wartet 200 ms.... So kommen die sich nicht in die Quere.

möchtest du zwei oder einhundert mikros via pc über seriell abfragen ?
(das geht sehr (oder mittel) problemlos über eine serielle schnittstelle am pc
Ja wie denn? Bei mir klappts mit dem antworten ja nicht...

Vielen Dank und viele Grüße,
William

Willa
14.04.2008, 17:59
Hat vielleicht sonst noch jemand eine Idee wie das mit der Diode gemeint sein kann...? Verstehe halt nicht so viel von Elektronik.....

uwegw
14.04.2008, 19:24
Das Problem ist, dass die µCs ihre Leitung fest auf Masse halten, wenn sie gerade nichts senden. Damit geraten sie mit dem gerade Sendenden in Konflikt.

Wenn du auf dem 5V-Pegel die Leitungen zusammenschaltest, brauchts du imho eher einen zentralen Pulldown. Und dann für jeden µC eine Diode in der Leitung, Anode am µC, Kathode am Widerstand. Dann liegt im Ruhezustand die Leitung auf Masse. Wenn einer sendet, zieht er über die Diode die Leitung auf 5V. Wenn ein zweiter gleichzeitig sendet, überlagern sich die Daten, aber es gibt keinen Kurzschluss.

Willa
14.04.2008, 20:12
Hi! Danke für deine Antwort. Kann ich mir das ungefähr so vorstellen wie im Bild? Dass die µCs nicht gleichzeitig senden, dafür sorge ich per Software.

uwegw
14.04.2008, 21:43
Müsste eigentlich funktionieren... hab aber so was noch nie selbst ausprobiert. Ich vernetzte meine Controller lieber per I2C.

PICture
15.04.2008, 03:42
Hallo!

@ Willa

Dein Schaltplan ist elektronisch gesehen i.O. Zwischen den pull-down R und den PC gehört noch ein Wandler, der aus 5V Signalen +/- 12V macht (z.B. MAX232).

MfG

Hessibaby
15.04.2008, 07:46
Die einfachste Methode ist das Daisy-Chaining ( Gänseblümchenkette ).
Nach dieser Methode, des seriellen Bussystems, arbeitet der PCI-Bus im PC und auch das Ethernet.
Kurze Erklärung : µC1 sendet auf TX ein Datenpaket an RX von µC2, ist dieser nicht der adressierte Empfänger gibt er das Paket über seinen TX an den RX des nächsten weiter bis einer die Daten vom Bus nimmt und über seinen TX den Empfang bestätigt. In diesem "Ring" kann, über Pegelwandler (z.B. MAX232) auch ein PC eingeschliffen werden.
( Das beim PCI-Bus, zur Quasiparallelisierung, noch DMA-Steuerung und Interruptservices inkl. Prefetch dazukommen, will ich nicht verschweigen, aber auch nicht langatmig erklären. Siehe dazu Literatur z.B. von, meinem Kumpel, Rodney Zaaks )

Gruß

P.s. Für eine reine Hardwarelösung würde ich die Ausgänge der µC über Exclusivodergatter anschließen.

Willa
15.04.2008, 12:03
Hi! ich habe es grad mal probiert und die Schnittstellen so verschaltet wie auf meinem Bild (MIT max232 zwischen Widerstand und PC), leider funktioniert das nicht. Es kommt wieder nichts an. Dann werde ich das wohl per Software lösen müssen, so wie von Hessibaby vorgeschlagen.

sast
15.04.2008, 13:56
Dreh mal die Dioden um und nimm den Widerstand als Pullup

sast

Borki90
15.04.2008, 16:44
@sast: Die Dioden Drehen???

Der Pegel bei Ruhezustand entspricht 5V

Wikipedia (http://de.wikipedia.org/wiki/EIA-232):

Der Ruhezustand der Übertragungsleitung, der auch mit „Mark“ bezeichnet wird, entspricht dem Pegel einer „logischen 1“

Sieht man auch, wenn man eine LED an den TX Pin des AVR's hängt. Also kann das mit den Dioden gar nicht funktionieren, da die anderen AVR's immer logisch 1 senden, wenn sie gerade nicht senden.
Man müsste also, die Signale gleich nach dem AVR invertieren. Danach hat man zwei möglichkeiten:

-über Dioden das ganze Verbinden, ein Pulldown auf die Leitung und bei der PC Seite wieder Invertieren (braucht nur eine Leitung)
-oder gleich alle Negierten Singale auf ein NOR Gatter führen. (braucht mehrere Leitungen)

sast
15.04.2008, 17:24
@borki90
Das mit dem Ruhepegel ist korrekt. Deshalb ist ja der Widerstand auch als Pullup geschaltet.
Wenn nun ein MC was zu sagen hat, dann zieht er auf Masse und über die Diode vor dem MC wird der Pegel auf logisch "0" gezogen. Wenn er auf "1" geht liegt sowieso "1" an durch den Pullup.
Ist erstens "logisch" und zweitens schon zigfach so von mir praktiziert.

sast

Borki90
15.04.2008, 17:31
Ouch.. :-b

Sry, so weit hatte ich nicht gedacht.. Ist wirklich "Logisch".

Aber meine Methoden funktionieren auch O:)

mfg
Borki90

Willa
15.04.2008, 17:49
@sast ("Stephen electronic Engineer develops and the research" \:D/ ): Leider habe ich alle Teile wieder abgelötet kurz bevor deine Nachricht kam. Aber wenn das ganz sicher ist, dass es mit umgedrehten Dioden und Pullup funktioniert, dann probier ichs nochmal....

zweitens schon zigfach so von mir praktiziert
Also hast du das schonmal so gemacht und es hat geklappt...?
@Borki: Das ist mir dann doch zu aufwändig :-D Aber danke für den Vorschlag!

威廉生物學家

sast
15.04.2008, 20:48
@William (Biologe)

Ja ich verwende diese Variante in etwas abgewandelter Form ständig. Und habe während meines Posts sogar auf dem Steckbrett eine Schaltung mit 2 Slaves und einem Master aufgebaut.
Wichtig ist nur zu verstehen, dass wir uns hier über einen Zusammenschluss der Slave TX Leitungen auf der µC Seite unterhalten. Also auf der 5V Seite. Zwischen Pegelwandler (MAX232) und PC liegt die Sache etwas anders, da hier der Ruhepegel zwischen -3V und -15V liegt und die logische "0" von oben zwischen +3V und +15V liegen kann.
Solange deine Controller also alle über einen einzigen MAX232 mit dem PC reden sollen, ist die obige Variante mit dem Pullup die Richtige.
Solltest du aber auf die Idee kommen mehrere TX Leitungen auf der 15V Seite zusammenzubringen, dann wird das Ganze etwas schwieriger.

sast

Willa
16.04.2008, 11:32
@sast: Jetzt funktioniert es dank Dir! 谢谢
Auch vielen Dank an alle anderen die sich an diesem Thread beteiligt haben!

Vielleicht hat ja irgendwann jemand ein ähnliches Problem, daher hier nochmal ein kleiner Schaltplan: