- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: rs232 über IR?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121

    rs232 über IR?

    Anzeige

    E-Bike
    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?

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    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

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hi,

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

    Hier ist der Schaltplan dazu.
    Bild hier  

    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).

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    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.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    ääääh und jetz geht das schon ???

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


    das wäre seeeehr fein!

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    Jo. also beim Sender sieht der Code wie folgt aus:

    Code:
    $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.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    05.02.2006
    Beiträge
    23
    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!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.01.2004
    Alter
    36
    Beiträge
    121
    Freut mich das es dir weitergeholfen hat
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen