Murus
03.12.2005, 21:41
Hallo zusammen,
ich arbeite seit einiger Zeit hier an der Datenübertragung per Laser.
Mein Fernziel ist es, am Sender einen Text einzugeben, abzulasern und beim Empfänger den Text wieder auslesen.
Die Hardware hab ich gebaut und die funktioniert. Als Laser hab ich eine normale Laserdiode aus nem Laserpointer im Gebrauch, angesteuert von einem Hexfet. Als Empfänger ne Photodiode mit nachgeschaltetem OpAmp, der, wenn er voll vom Laser beleuchtet wird, +3V gegen Masse rauslässt.
Im Sender und Empfänger sitzen zwei Mega8, intern mit 1MHz getaktet.
Die Übertragung möchte ich per Ein- und Ausschalten des Lasers realisieren.
Zum Sender:
Momentan arbeite ich noch mit zwei fest eingestellten Bytes und einer Präambel, die ebenfalls 1 Byte gross ist. Die Präambel sieht so aus: 10101010. Danach werden zwei weitere, beliebige Bytes gesandt, die auch in einem Array stecken. Nach jedem Timer1-Overflow-Interrupt wird das nächste Bit an den Laser ausgegeben, so, dass er blinkt.
Zum Emfpänger:
Hier arbeite ich mit dem Komparator. Ich verwende die interne Referenz von 1.25V. Am Eingang hängt der OPV, der von der Photodiode angesteuert wird. Der Komparator ist so getrimmt, dass er bei jeder L/H-Flanke einen Interrupt auslöst. Wenn die Präambel reinkommt (Laser beginnt zu blinken), wird in der Komparator-Interrupt-Routine der Zählerstand des Timer1 ausgelesen. Dies passiert 4mal. Am Schluss hab ich den Timerwert, der zwischen zwei H/L-Flanken der Präambel liegt. So kann ich denn auch weiterrechnen. Nach der Präambel wird der Komparator-Interrupt ausgeschaltet und der Timer1 wird mit dem zuvor berechneten Wert voreingestellt, und zwar so, dass der Interrupt immer dann kommt, wenn die Hälfte einer Flanke am Laser anliegt, also nur dann, wenn entweder dunkel oder hell ist. Wenn der Timer1 überläuft, wird der Komparator-Wert (1 oder 0, je nach Beleuchtung der Photodiode) in ein Array gespeichert.
Wenn die beiden Bytes durch sind, werden sie an einem LCD angezeigt.
Mit niedrigen Übertragungsfrequenzen funktioniert diese Methode. Wird man aber nur etwas schneller, fällt die ganze Geschichte auseinander, die Synchronisation stimmt hinten und vorne nicht mehr.
Was schlägt ihr für andere Methoden vor? Wie könnte man das noch lösen? Während der Übertragung auch noch synchronisieren? Ich hab halt das Problem, dass auch mehrmals nacheinander derselbe Zustand eintreffen kann....
Was habt ihr da so für Ideen?
Herzlichen Gruss
Mario
ich arbeite seit einiger Zeit hier an der Datenübertragung per Laser.
Mein Fernziel ist es, am Sender einen Text einzugeben, abzulasern und beim Empfänger den Text wieder auslesen.
Die Hardware hab ich gebaut und die funktioniert. Als Laser hab ich eine normale Laserdiode aus nem Laserpointer im Gebrauch, angesteuert von einem Hexfet. Als Empfänger ne Photodiode mit nachgeschaltetem OpAmp, der, wenn er voll vom Laser beleuchtet wird, +3V gegen Masse rauslässt.
Im Sender und Empfänger sitzen zwei Mega8, intern mit 1MHz getaktet.
Die Übertragung möchte ich per Ein- und Ausschalten des Lasers realisieren.
Zum Sender:
Momentan arbeite ich noch mit zwei fest eingestellten Bytes und einer Präambel, die ebenfalls 1 Byte gross ist. Die Präambel sieht so aus: 10101010. Danach werden zwei weitere, beliebige Bytes gesandt, die auch in einem Array stecken. Nach jedem Timer1-Overflow-Interrupt wird das nächste Bit an den Laser ausgegeben, so, dass er blinkt.
Zum Emfpänger:
Hier arbeite ich mit dem Komparator. Ich verwende die interne Referenz von 1.25V. Am Eingang hängt der OPV, der von der Photodiode angesteuert wird. Der Komparator ist so getrimmt, dass er bei jeder L/H-Flanke einen Interrupt auslöst. Wenn die Präambel reinkommt (Laser beginnt zu blinken), wird in der Komparator-Interrupt-Routine der Zählerstand des Timer1 ausgelesen. Dies passiert 4mal. Am Schluss hab ich den Timerwert, der zwischen zwei H/L-Flanken der Präambel liegt. So kann ich denn auch weiterrechnen. Nach der Präambel wird der Komparator-Interrupt ausgeschaltet und der Timer1 wird mit dem zuvor berechneten Wert voreingestellt, und zwar so, dass der Interrupt immer dann kommt, wenn die Hälfte einer Flanke am Laser anliegt, also nur dann, wenn entweder dunkel oder hell ist. Wenn der Timer1 überläuft, wird der Komparator-Wert (1 oder 0, je nach Beleuchtung der Photodiode) in ein Array gespeichert.
Wenn die beiden Bytes durch sind, werden sie an einem LCD angezeigt.
Mit niedrigen Übertragungsfrequenzen funktioniert diese Methode. Wird man aber nur etwas schneller, fällt die ganze Geschichte auseinander, die Synchronisation stimmt hinten und vorne nicht mehr.
Was schlägt ihr für andere Methoden vor? Wie könnte man das noch lösen? Während der Übertragung auch noch synchronisieren? Ich hab halt das Problem, dass auch mehrmals nacheinander derselbe Zustand eintreffen kann....
Was habt ihr da so für Ideen?
Herzlichen Gruss
Mario