PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : rs232 über IR?



Static
31.01.2007, 15:48
Hallo,
ich weiß zu Infrarotübertragung gibt es schon einige Threads, aber ich werde einfach nicht so richtig schlau draus.
Ich versuche zwischen zwei Mega8 µC eine Infrarot Übertragung aufzubauen.
Als Empfänger benutze ich den TSOP1738 und zum sende eine normale Ir Diode.
Ich verstehe allerdings die Funktionsweise des 1738 nich so ganz. Die sende-LED muss mit 38kHz moduliert werden, das mache ich per Software mit Timer0.
Nun scheint es aber nicht so zu sein, dass der TSOP1738 einfach ohne IR Licht den Ausgang auf 1 schaltet und bei richtig gepulstem IR-Licht auf 0.
Wenn ich mit dem Sender in Bascom mit RC5Send RC5 codes sende kommt am empfänger aber ein konstantes Bitmuster an. Die getRc5 Funktion von Bascom scheint jedoch nicht zu funktionieren und ich beabsichtige größere Datenmengen zu senden, daher würde ich das gerne über Rs232 machen.
Geht das mit dem TSOP1738 überhaupt? Wenn ja, wie?

Hubert.G
31.01.2007, 17:49
Hast du dir schon mal angesehen ob das Signal nicht invertiert ist? Ich habe noch kein solche Übertragung gemacht, sehe aber auch keinen Hinderungsgrund warum RS232 nicht funktionieren soll, natürlich nur in eine Richtung. Steht auch im Datenblatt: Continuous data transmission possible (up to 2400 bps)
ist allerdings nicht sehr schnell.

Hubert

Static
31.01.2007, 18:03
Danke für den Tipp, das Signal ist aber nicht invertiert es kommt mit rs232 nichtmal das richtige Signal an, da einfaches An und Aus schalten des Modulators (der led) anscheind nicht ausreicht.
Im Datenblatt steht ja auch:



The data signal should fullfill the following condition:
• Carrier frequency should be close to center
frequency of the bandpass (e.g. 38kHz).
• Burst length should be 10 cycles/burst or longer.
• After each burst which is between 10 cycles and 70
cycles a gap time of at least 14 cycles is neccessary.
• For each burst which is longer than 1.8ms a
corresponding gap time is necessary at some time in
the data stream. This gap time should have at least
same length as the burst.


Aber ich versteh das mit der Burst length usw. nicht

m.a.r.v.i.n
31.01.2007, 18:16
Hi,

RS232 über IR wird z.B. beim Asuro gemacht.

Hier ist der Schaltplan dazu.
http://www.asurowiki.de/pmwiki/uploads/Main/ir_interface.jpg

RX hängt am IR Empfängerchip. Beim Asuro ist dies der SFH5110. Achtung! andere Pinbelegung als der TSOP173x.
TX hängt an der IR LED Kathode.
über PB3 wird die IR LED Anode gepulst (Timer Ausgang). Beim Asuro mit 36kHz.

Senden und Empfangen geht also über normale UART Sende/Empfangsfunktionen.

max. 2400 Baud sind damit möglich im Halb Duplex Verfahren.
Die Software sollte erkennen, ob die empfangenen Zeichen nicht die eigenen vorher gesendeten Zeichen sind (durch Reflexionen).

Static
01.02.2007, 16:12
ah, war mein Fehler. Die Frequenz der led hat wohl nicht ganz gestimmt. Musste den Timer nur etwas schneller laufen lassen als berechnet, da der Interrupt anscheind auch noch etwas Zeit verbraucht.

veit
11.02.2007, 20:56
ääääh und jetz geht das schon ???

kannst du da noch bissel was zu posten ????
code ???


das wäre seeeehr fein!

Static
12.02.2007, 18:56
Jo. also beim Sender sieht der Code wie folgt aus:


$regfile = "M8def.dat" ' the used chip
$crystal = 16000000 ' frequency used
$baud = 9600 ' baud rate
$framesize = 48 ' die Größe des Frames
$swstack = 32 ' die Größe des Software-stacks
$hwstack = 32 ' die Größe des Hardware-Stacks

Config Timer0 = Timer , Prescale = 1 'Timer0 einstellen
On Timer0 Fmod 'wenn Timer0 überläuft zum Modulationsinterrupt springen

Config Pind.6 = Output 'Led anschluss
Config Pind.7 = Output 'Sw uart pin


Portd.6 = 0
Portd.7 = 0

Enable Interrupts

Print "hallo computer"

Dim T0preset As Byte 'Timervorladewert
T0preset = 140

Enable Timer0
Open "comd.7:300,8,n,1" For Output As #1 'Software uart auf Portd.7 erzeugen



Do
Print "sende"
Print #1 , "hallo" '"hallo" auf Portd.7 ausgeben
Waitms 500

Loop

Fmod:

Toggle Portd.6

If Pind.7 = 1 Then
Timer0 = 0 'niedrige Frequenz erzeugen, die nicht vom TSOP erkannt wird
Else
Timer0 = T0preset '~38kHz ausgangsfrequenz erzeugen
End If

Return

End


Die Led hängt (natürlich mit vorwiderstand) an Portd.6 .
Immer wenn der Timer überläuft, wird der Zustand des Ports gewechselt.
Lässt man den Timer bei ~115 starten, würde sich theoretisch eine Frequenz von 38kHz ergeben. In der Praxis hat sich erwiesen das es mit werten um 140 funktioniert, vermutlich weil der interrupt selber auch Zeit verbraucht.
Auf Portd.7 habe ich nun ein Software Uart gelegt und stelle im Timer0 interrupt, je nachdem welchen Zustand der Pd.7 hat, den startwert vom Timer dementsprechend ein. Bei Pind.7 = 0 startwert 140, damit ergibt sich die vom TSOP benötigte frequenz, dieser erkennt das und schaltet seinen ausgang dementsprechend auch auf 0.
Ist Pind.7 =1 wird ein anderer startwert gewählt, wodurch eine andere frequenz als ~38kHz entsteht und der TSOP auf 1 schaltet.
Mit dem TSOP an einem anderen µC als empfänger müsste das so eigentlich funktionieren.
Tut es leider aber noch nicht, wobei ich es auch seitdem erst einmal ausprobiert habe. 0 oder 1 wird korrekt übertragen (einfach per led am tsop zu testen), aber mit uart kommt nur müll an.
Meine Vermutung dazu ist, dass durch den relativ häufigen aufruf des Timer interrupts der µC, bzw. vielmehr Bascom, mit dem Timing des Uart durcheinander kommt. Um dies testen zu können muss ich dann wohl doch auf Hardwareseitige Modulation über NE555 umsteigen.
Möglicherweise hilft aber auch etwas feintuning.

DerOlleKoN
06.12.2009, 20:30
Ist zwar schon was älter der Thread hier aber trotzdem danke für den Denkanstoss.

Habe es mit einem TSOP1740 probiert und es funktioniert. Musste natürlich nur die Frequenz anpassen.Habe ausserdem den Hardware UART genommen. Ein Atmega8 Sendet einen String an den eine Zahl angehängt wird, die jedes mal hochgezählt wird und ein anderer
Mega8 empfängt diesen String und zeigt ihn an.

Habe dfas vor Jahren schonmal probiert und irgendwann genervt aufgegeben, hatte mich damals aber auch noch nicht so mit dem übertragen von Daten auseinander gesetzt.

Hab mir ein paar Tsops und ir dioden bestellt und werde dann mal versuchen ein protokoll für die übertragung zu schreiben, die so noch stark Fehleranfällig ist..


Auf jeden Fall THX! ;)

Static
20.12.2009, 21:00
Freut mich das es dir weitergeholfen hat :D
Bei mir ist das projekt dann irgendwie im sand verlaufen.
Kannst ja mal bescheid sagen wenn du eine stabile Kommunikation damit hingekriegt hast kann man bestimmt mal gebrauchen.