Die Projektwerkstatt.

Optische Datenübertragung

Feb
27
Geschrieben von Martin Schulten um 10:09 am

Projektbeschreibung „optische Datenübertragung“

1. Zielsetzung
Ziel des StudentsLab Projekt „optische Datenübertragung“ war es eine optischeDatenübertragung mittels Laserimpulsen über eine Distanz von einigen Metern zu realisieren. Hauptziel sollte zuerst die Entwicklung eines geeigneten Übertragungsprotokolls sein, dessen Umsetzung direkt am Computer erstellt und getestet werden kann. Mit einem Übertragungsprotokoll ist eine definierte Abfolge von Handlungen gemeint die auf Sender und Empfängerseite festlegt wie Daten verschickt und empfangen werden können. Um den Schwierigkeitsgrad des Projekts etwas zu vereinfachen wurde bisher auf den Einsatz eines Lasers verzichtet. Stattdessen wurde ein Optokoppler eingesetzt. Zielsetzung ist es den Optokoppler durch einen Laser zu ersetzen, sobald die Software am Computer einwandfrei funktioniert. Das reduziert die Fehlersuche von 2 potentiellen Fehlerquellen (Laser und Software) auf 1 Fehlerquelle (Software), da der Optokoppler genauer arbeitet und einfacher zu handhaben ist.

Die größten Probleme des Projekts sind:
1.) Wann weiß der Empfänger, dass Daten geschickt werden?
2.) Wann weiß der Empfänger, dass alle Daten angekommen sind?
3.) Woher weiß der Empfänger mit welcher Geschwindigkeit der Sender Datenimpulse schickt?

1.1 Hardware

Die Hardware des Projekts bestand aus einer Platine mit 2 Optokopplern, 2 D-Sub9 Buchsen und diversen Widerständen. Da die einzelnen PIN’s des COM-Ports Softwaremäßig relativ einfach ein und auszuschalten sind haben wir uns hierfür entschieden. Die aktuelle Platine unterstützt das gleichzeitige Senden und Empfangen in beide Richtungen. Dazu wurden zum Senden der PIN 4 (DTR) und der PIN 5 (Masse) verwendet. Diese PIN’s sind mit der Sendeseite des Optokopplers verbunden. Zum Empfangen der Daten wurden der PIN 3 (TXD), der PIN 8 (CTS) und der PIN 9 (RTS) verwendet. Da zum Senden und Empfangen komplett unterschiedliche PIN’s verwendet werden ist es möglich gleichzeitiges Senden und Empfangen mit nur einem COM-Port zu realisieren.
Die beiliegende Grafik zeigt die aktuelle Platine als Lochmaster-Schaltplan.

 

1.2 Übertragungsprotokoll
Die Software des Projekts hat sich mit der Problemstellung des Übertragungsprotokolls
auseinandergesetzt. Die 3 oben genannten Hauptprobleme wurden wie folgt gelöst:

1.) Wann weiß der Empfänger, dass Daten geschickt werden?
-Vor Jedem Datenwort kommt eine Präambel die aus einem An-Aus-An Impuls (101) besteht.

2.) Wann weiß der Empfänger, dass alle Daten angekommen sind?
-Jedes Datenwort ist genau 8 Impulse lang.

3.) Woher weiß der Empfänger mit welcher Geschwindigkeit der Sender Datenimpulse
schickt?
-Die Präambel dient gleichzeitig der Geschwindigkeitsmessung der Datenimpulse.
Das funktioniert folgendermaßen:
Der erste Impuls der Präambel ist An (logisch: 1). Die Software misst dann ab dem nächsten Impuls, der Aus ist (logisch: 0) bis zum nächsten An (logisch: 1) die Zeit. Dies ist nun die Impulsbreite des aktuellen Datenwortes. Damit der Empfänger nicht direkt auf einer Taktflanke (also einem „Zwischenzustand“ indem gerade der Zustand des Impulses geändert wird) misst wird die erste Messung des Impulszustands nach der 1,5fachen Zeit der Impulsbreite gestartet. Das ist im Idealfall genau zwischen einer Impulsänderung.
Ab da wird immer einmal pro Impulsbreite gemessen und das Entsprechende An,- oder
Aussignal gespeichert. Nach 8 Impulsen wird das Datenwort dekodiert.
Fehlererkennungscodes (zum Beispiel Parität) wird zurzeit nicht mitgesendet.

Die beiligende Grafik verdeutlicht dieses Prinzip.

Vorteil dieser „dynamischen Datenübertragung“ ist, dass je nach Auslastung des Senders langsame als auch schnelle Datenwörter frei von Übertragungsfehlern übertragen werden können. Es spielt keine Rolle, ob das Datenwort gerade langsam übertragen wird (wenn der Sender stark beansprucht wird) oder schnell.
1.3 Software

Die erste Umsetzung des Übertragungsprotokolls erfolgte mittels der Programmiersprache C#. Dort wurde das „PinChange-Event“ genutzt, dass immer dann ausgelöst wird, wenn sich ein PIN des COM-Ports ändert. Es wird also bei jeder PIN-Änderung eine bestimmte Handlung ausgeführt (erkennen der Präambel, dekodieren, etc.). Da dies jedoch nur mit langen Impulsbreiten von ca. 150-70ms funktioniert (sehr langsam) wird das Übertragungsprotokoll zurzeit in der Programmiersprache C++ umgesetzt. Ziel ist es Impulsbreiten von 3-10ms zu erreichen, die dann schnellere Datenübertragungen ermöglichen sollen.

Eine grafische Oberfläche ist zurzeit leider nur in einer ersten „quick and dirty“ Version vorhanden (optisch nicht sehr ansprechend). Ziel ist es diese als eine Art Chat aufzubauen.

Glossar:

-Was ist ein Optokoppler?
Ein Optokoppler ist ein elektronisches Bauteil, dass 2 Stromkreise elektrisch voneinander trennt. Innerhalb des Optokopplers ist eine LED und ein Fototransistor vorhanden, die zusammen potentialfrei Signale/Informationen „übertragen“ können. Dabei fließt kein Strom zwischen der LED und dem Optokoppler, sodass eine „richtige“ (galvanische) Trennung der Stromkreise erreicht wird.

-Was ist COM-Port?
Ein Anschluss, der zur seriellen Übertragung von Daten dient (ähnlich einem USB- Anschluss, jedoch langsamer). Die Tatsache, dass die einzelnen Steuer,- und Datenleitungen dieses Anschlusses leicht mit dem Computer beeinflusst werden können ist der Hauptgrund, warum wir uns für diesen Anschluss entschieden haben.

-Was ist eine Präambel?
Ein kurzes Datenwort, dass vor jeder Datenübertragung mitgeschickt wird um dem Empfänger kenntlich zu machen, dass nun Daten folgen.

-Was ist ein Datenimpuls?
Ein Datenimpuls besteht aus einem An und Ausschalten der Datenleitung

-Was ist eine Parität?
Ein zusätzlich Übertragener Datenimpuls, der angibt ob die Anzahl der übertragenen Einsen (An-Impulsen) gerade oder ungerade ist. Damit können einfache Übertragungsfehler erkannt werden.