PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mehrere serielle Infrarot Tranceiver in Reihe schalten



Zsadan
16.12.2005, 11:55
Hallo,

ich möchte gerne eine etwas größere Fläche für den Asuro benutzen, und ich habe jetzt schon eine gute Höhe für den Tranceiver gefunden, und ich weiß auch den Senderadius des Tranceivers.
Ich brauche jetzt um die gesamte Fläche ab zudecken, mehrere Tranceiver, welche ich auch besitze, und ich wollte fragen wie ich diese zusammenschalten kann, sodass ich nur ein Com-Port an meinem PC brauche und nur 1 Terminalverbindung.
Ich möchte sie vorzugsweise in Reihe schalten, aber eine parallel Schaltung wäre auch ok.l

hosti
18.12.2005, 10:50
Wieso willst du sie unbedingt in Serieschalten??

RedBaron
18.12.2005, 12:00
Hallo Zsadan,

bei mehreren Transceivern reicht die interne Stromversorgung durch die Schnittstelle nicht mehr aus, du wirst also eine externe Stromversorgung anschließen müssen.

Dann kannst du auch die LEDs mit mehr Leistung betreiben und erhöhst so den Senderadius. Zumindest benötigst du dann weniger von den Dingern.

Beim Sender kannst du mehrere Dioden in Serie schalten (wegen der Strombegrenzung). Das ganze über eine zweichfache (wegen der Invertierung) Transistorstufe (damit der NE555 nicht überlastet wird). Die Dioden verteilst du dann im Raum. Die Serienschaltung hat außerdem den Vorteil, dass man nur ein Kabel legen muss. Von Diode zu Diode und von der letzten dann zurück, also eine Ringleitung.

Beim Empfänger must du allerdings eine Parallelschaltung bauen. Muss ungefähr so aussehen, wie in der Skizze gezeigt: Viele Empfänger, jeweils mit einer Transistorstufe. Entkopplung der Einheiten über eine Diode. Oder-Schaltung aller Einheiten. Ansteuerung der RxD-Leitung über eine zweifache Transistorstufe (wegen der Invertierung).

Gruß Redbaron

RedBaron
18.12.2005, 12:03
ok, ein paar "e" zu wenig. hier zum einfügen: e e

Manf
18.12.2005, 12:08
ok, ein paar "e" zu wenig. hier zum einfügen: e e
Es gibt übrigens die Edit-Funktion oben rechts im Posting, falls wichtige
Dinge noch geändert werden sollen.
Manfred

Zsadan
18.12.2005, 20:01
Vielen Dank, ich werde dein Vorschlag ausprobierne sobald ich wieder auf Arbeit bin.

Zsadan
20.12.2005, 08:16
Hallo,
ich habe jetzt einen seriellen Hub gefunden, dem man über einen USB anschluss an den Rechner anschließen kann.
Wenn jetzt eine Signal Überlagerung bei 2 oder mehr Tranceivern stattfindet, kann ich das in dem Terminalprogramm verarbeiten, oder gibt es da schwierigkeiten?
Muss ich auch für jeden angeschlossen Tranceiver ein eigenes Terminalprogramm aufrufen, oder gibt es möglichkeiten oder Terminalprogramme, womit ich die Signale mehrere Tranceiver in einem Terminalfenster sehen kann?

mfg

Zsadan

RedBaron
30.12.2005, 11:05
Hallo Zsadan,

unabhängige Tranceiver arbeiten nicht synchron. Um Datenmüll (sprich IR-Müll) zu verhindern, darfst du immer nur einen senden lassen. Welchen nimmst du? :-k

Gruß Redbaron

Zsadan
05.01.2006, 08:12
Auf was bezieht sich "welchen nimmst du?", auf den Tranceiver, Hub oder auf das Terminalprogramm?

gruß

Zsadan

RedBaron
05.01.2006, 11:47
Hallo Zsadan,

ich meine, wie entscheidest du, welcher der Sender der Transceiver gerade senden darf?

Wenn zwei (oder mehrere) gleichzeitig senden und nicht synchron arbeiten, wirst du im Überlappungsbereich der beiden nichts empfangen können, weil sich die Sender gegenseitig stören. Wenn z.B. die Sender zufällig im Gegentakt laufen, sendet der eine Licht aus, während der andere dunkel ist und umgekehrt. Beim Empfänger ist es dann immer hell (entweder vom einen oder vom anderen Sender). Auch wenn sie nicht genau im Gegentakt laufen, klappt es nicht. Hell- und Dunkelphasen haben nicht das richtige Verhältnis. Der Empfänger wird damit nicht klarkommen.

Gruß Red Baron

Zsadan
05.01.2006, 13:41
Wir haben es getestet, und mehrere Asuros mit mehreren Tranceivern senden lasssen kann und für jeden Tranceiver ein eigenes Terminslfenster hatten und die Signale richtig ankamen.
Ich suche jetzt ein Terminalprogramm, das mir in einem Fenster die übertragenen Signale aller Tranceiver anzeigt, sodass ich nicht mehr für jeden Tranceiver ein eigenes Terminalfenster brauche, da es bei 6 Tranceiver sehr unübersichtlich wird.

Gruß Zsadan

RedBaron
05.01.2006, 14:16
Hallo Zsadan,

verstehe ich dich richtig? Ihr habt mehrere ASUROS gleichzeitig in Betrieb und ebenfalls gleichzeitig mehrere RS232-(oder USB?)-Transceiver ohne dass die sich stören? Was passiert, wenn zwei ASUROS nahe bei einander stehen und gleichzeitig senden? Was passiert, wenn ein ASURO etwa gleich weit von zwei Tranceivern entfernt ist (d.h. von jedem einzeln empfangen könnte), wenn diese gleichzeitig senden?

Zum Terminalprogramm: Sollen die verschiedenen Datenströme gemischt werden oder in einzelnen Fenstern dargestellt werden oder was hast du dir so vorgestellt. Kannst du programmieren?

Gruß Red Baron

Zsadan
05.01.2006, 14:48
Also die Tranceiver empfangen zurzeit nur.
Die Asuros senden beide zurgleichen Zeit, aber der eine Asuro sendet im 2 Sekunden Takt und der andere alle milisekunden, also hat der 2 Sekunden Tackt Asuro nichts mehr gesendet.
Die Datenströme von mehreren Tranceivern sollen in einem Fenster dargestellt werden, daher gemischt werden.
Ich kann leider noch nicht programmieren, aber mein Ausbilder.

Gruß Zsadan

RedBaron
05.01.2006, 15:53
Also klappt es nicht, dass mehrere ASURO und Transceiver einfach so störungsfrei miteinander arbeiten. Richtig?

Was wollt ihr dann mischen?

Was genau soll passieren, wenn ein ein Asuro in den Überlappungsbereich zweier Transceiver kommt. Beim einfachen mischen sieht man alles doppelt!

Vielleicht erzählst du ein bisschen mehr, was du konket machen möchtest. Dann kann man 'mal schauen, welche Lösung angemessen ist. Ich befürchte jedoch, dass es nicht einfach wird, wenn man eine sichere Übertragung erreichen will. Entweder braucht man passende Hardware (s.o.) oder eine Menge Software. Letzteres wird schwierig, wenn du nicht programmieren kannst.

Gruß Red Baron

Zsadan
06.01.2006, 07:41
Also wir haben ein Fahrtisch, besser ein kleines Fußball Feld, in dem die Asuros fahren.
Wir möchten am Ende maximal 4 Asuros gleichzeitig fahren lassen und diese sollen den Zustand der Batterie senden, dieses klappt schon bei einem.
Später wollen wir versuchen das die Asuros automatisch zu einer Ladestation fahren, sobald der Batteriestand unter eine bestimmte Grenze fällt.
Dann sollen die Tranceiver ein Signal an den/die Asuros senden, welcher Platz an der Station frei ist.
Und wir haben auch in überlegung, eine 2D Karte anzufertigen, worauf die Position der Asuros angezeigt wird, und in Echtzeit die Position neu berechnet.
Das mit dem Programmieren ist kein Problem, da mein Ausbilder schon programmieren kann.
Es wäre uns aber wichtig das der Batteriestand aller Asuros in einem Fenster angezeigt wird.

gruß

Zsadan

RedBaron
06.01.2006, 21:02
Hallo Zsadan,

das mit dem Terminalprogramm wird schwierig werden. Aber da ihr sowieso automatisieren wollt, was hälst du von folgender Idee :-k :

Der Ladezustand der Batterien ändert sich nur relativ langsam. Da ist es ausreichend, die Messwerte nur "gelegentlich", d.h. alle paar Sekunden (oder sogar nur alle paar 10 Sec oder gar Minuten) zu übertragen. Wenn dann noch die Intervalle zwischen den Übertragungen auf allen Robots unterschiedlich eingestellt sind (#1 nach 3,5 Sec, #2 nach 4,7 Sec, #3 nach 5,3 etc) sollte es auch nur relativ selten zu Übertragungskollisionen, d.h. zu gleichzeitiger Übertragung, kommen.

Auf der Empfängerseite schreibt ihr ein kleines Programm, dass auf die angeschlossenen COM-Ports lauscht, also sie z.B. der Reihe nach abfragt und die empfangenen Zeichen einfach in eine Textbox schiebt.

Das sollte soweit erst einmal funktionieren.

Man kann auch mit einfachen Mitteln Vorkehrungen für z.B. folgende Situationen treffen, die die Daten eigentlich unbrauchbar machen:
Ein ASURO verläßt während des Sendens den Empfangbereich des einen Emfängers und kommt in den eines zweiten.
Zwei ASURO senden gleichzeitig.
Ein ASURO ist im überlappenden Emfangsbereich mehrerer Empfänger.
usw.

Eine Möglichkeit wäre, die Daten in einem gesicherten Block zu senden und im Empfangsprogramm nur korrekte Datenblöcke zu verarbeiten. Unvollständige oder doppelte Datenblöcke werden einfach ignoriert. Die korrekten Daten kann man dann wieder anzeigen oder anderweitig auswerten. Ein Block könnte so aussehen:

'A' = Anfang des Blocks, das Empfangsprogramm (für jeden Kanal separat) wartet immer auf dieses Zeichen, bevor es weiterarbeitet .
x = Nr. des ASURO, also 1..4, hieran kann man erkennen, von welchem ASURO die Daten stammen.
y = lfd. Blocknummer, 0..9 dann wieder von vorn. Hieran kann man erkennen, ob man Daten doppelt hat.
zzzzz = Messwert
p = Prüfsumme über alle Ziffern des Datenblocks, hieran kann man erkennen, ob alle Zeichen korrekt übertragen wurden.

Daran denken: Immer auf 'A' testen. Wenn ein 'A' kommt, bevor ein Block abgeschlossen ist, konnte aus irgendwelchen Gründen der vorhergehende nicht bis zum Ende empfangen werden und muss verworfen werden.

Wenn man sich dann noch z.B. die Uhrzeit merkt, zu der die Daten empfangen wurden und mit auswertet (also z.B. anzeigt), hat man einen super Überblick.

Zum Senden der Ladestationsnummer: Hier könnt ihr einfach die Transceiver der Reihe nach (nie gleichzeitig!) die gleichen Daten senden lassen. Am besten sogar mehrfach, damit die Daten auch bei Störungen sicher übertragen werden. Eine solche Störung könnte z.B. sein, wenn während der Sendung einer der ASURO seinerseits damit beginnt seine Messwerte zu senden. Auch hier: am besten eine gesicherten Datenblock senden.

Wenn ihr euer Programm auf zufällig unter einem Windows-PC und in VB schreibt, wäre hier noch ein Tipp zur Programmierung der RS232C Schnittstelle: http://www.the-starbearer.de/Praxis/Programmieren/VB%20Projekte/VBPraxisSerielle.htm


Gruß Red Baron

stochri
07.01.2006, 08:14
Hallo Zusammen,
meiner Meinung nach wäre eine

MASTER-SLAVE Kommunikation

für dieses Problem die zuverlässigste Lösung.

Der PC sendet die Adresse ( z.B.1 )eines ASUROs und dieser antwortet dann.
Dieses Prinzip hat keine Problem mit der Synchronisation, es gehen keine Daten verloren, falls der PC gerade etwas anderes tut. Ausserdem gibt es keine Datenkollisionen.
Ich verwende dieses Prinzip schon lange bei verschiedenen Projekten und es funktiniert sehr gut.

Gruss,
stochri

RedBaron
07.01.2006, 10:07
Moin,

das hilft natürlich Kollisionen zu vermeiden. Die anderen Probleme (z.B. verstümmelte Daten) bleiben. Dafür muss man aber ein Synchronisationsprotokoll implementieren (einschließlich der Unwägbarkeiten, wie z.B. ein ASURO antwortet nicht in der vorgegeben Zeit). Ein asynchrones Protokoll ist da einfacher (glaub' ich).

Aber im Endeffekt hängt es von den Details der Anwendung ab, welches die bessere Lösung ist.

Gruß Red Baron