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

Thema: IR-Signal richtig auswerten

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235

    IR-Signal richtig auswerten

    Anzeige

    Powerstation Test
    Guten abend zusammen

    Hab hier ein Problem was mich schon länger beschäftigt:
    Ich hab einen TSOP-38 an einen MEGA8 gepackt (an Port C.4). Nun wollte ich das IR-Signal meiner TV-Fernbedienung aufnehmen. Soweit so gut hab ein Programm mit einem Timer geschrieben, der mir immer die High- oder Lowpegelzeiten übermittelt. Nun habe ich irgendetwas von RC5 aufgegabelt und Manchestercode. Wenn ich das Signal meiner Austaster (TV-Fernbedienung) aufnehme, bekomme ich folgendes:

    WertL:314
    WertH:668
    WertL:314
    WertH:5732
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:314
    WertH:5680
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:314
    WertH:5680
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:314
    WertH:5681
    WertL:314
    WertH:5680
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:314
    WertH:5680
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5681
    WertL:313
    WertH:5684
    WertL:314

    (Taste ca. 3 Sek. gedrückt)



    Mein Programm dazu sieht folgendermaßen aus:

    $regfile = "m8def.dat"
    $framesize = 24
    $swstack = 8
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600

    Dim B As Integer
    Dim A As Integer

    Config Pinc.4 = Input

    Config Timer0 = Timer , Prescale = 1
    Enable Timer0
    On Timer0 Isr_von_timer0
    Enable Interrupts

    B = 0
    Print "da"

    Do
    If Pinc.4 = 1 Then
    If B = 0 Then
    Print "WertL:" ; A
    A = 0
    B = 1
    End If
    End If


    If Pinc.4 = 0 Then
    If B = 1 Then
    Print "WertH:" ; A
    A = 0
    B = 0
    End If
    End If
    Loop
    End

    Isr_von_timer0:
    Timer0 = 0
    A = A + 1
    Return



    Wie kann ich das Signa jetzt wieder so ausgeben, dass ich mit dem µC den Fernseher bedienen kann??? Könnt ihr mir da helfen oder hilfreiche Links geben?

    Mfg Mel

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    ich kann zwar so auf Anhieb keinen Fehler in deinem Code sehen, aber das was du da ausgibst ist jedenfalls kein FB Code und schon gar nicht RC5.
    Bei deinen 60KHz Abtastrate müssten die High/Low Zeiten zwischen 50 und 200 sein. Da stimmt noch was nicht.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo,

    vor einiger Zeit hab ich mal ein RC5 Projekt gemacht.
    Daraus habe ich folgenden Code rausgeschnitten...

    Getrc5(address , Command)
    If Command > 127 Then Command = Command - 128

    der Rest unter:

    http://www.gerold-online.de/cms/index.php?id=136

    Günter

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235
    Gut werd ich mir zuhause noch mal anschauen. Was ich nur gehört habe ist, dass der TSOP38 immer nur Impulse rausgibt, also nicht die volle Länge eines anstehenden Pegels ausgibt. Aber werd es mal mit dem RC5 probieren. Melde mich dann heute mittag noch mal. Thx schon mal

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Also die TSOP´s die ich mir in Datenblättern angesehen hatte, machten die Datenübertragung etwa so: brauchen für ein "aktives" Bit einen Burst von mindestens 10 Pulsen oder mehr und nach einigen zig Pulsen MUSS der Sender auf low gehen, damit sich der TSOP wieder erholen/beruhigen/odersonstwas kann. Klartext: der TSOP kommt mir wegen des Timings etwas pflegebedürftig vor. Ich wollte die mal für andere Zwecke verwenden weil sie so schnell sind . . . . das kann halt ihr Vorteil sein.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    hier habe ich einen rc5-code-empfänger für einen tsop in c.
    vielleicht kann den mal ein findiger bascom-programmer umsetzen.
    läuft nur mit timer ohne interrupt:

    Code:
    XTAL=8000000
    TCCR0 = 1<<CS02;			//divide by 256
    TIMSK = 1<<TOIE0;			//enable timer interrupt
    
    #define RC5TIME 	1.778e-3		// 1.778msec
    #define PULSE_MIN	(uchar)(XTAL / 512 * RC5TIME * 0.4 + 0.5)
    #define PULSE_1_2	(uchar)(XTAL / 512 * RC5TIME * 0.8 + 0.5)
    #define PULSE_MAX	(uchar)(XTAL / 512 * RC5TIME * 1.2 + 0.5)
    
    #define	xRC5_IN	PIND
    #define	xRC5		PD7		// IR input low active
    
    uchar	rc5_bit;				// bit value
    uchar	rc5_time;				// count bit time
    uint	rc5_tmp;				// shift bits in
    uint	rc5_data;				// store result
    
    
    SIGNAL (SIG_OVERFLOW0)
    {
      uint tmp = rc5_tmp;				// for faster access
    
      TCNT0 = -2;					// 2 * 256 = 512 cycle
    
      if( ++rc5_time > PULSE_MAX ){			// count pulse time
        if( !(tmp & 0x4000) && tmp & 0x2000 )	// only if 14 bits received
          rc5_data = tmp;
        tmp = 0;
      }
    
      if( (rc5_bit ^ xRC5_IN) & 1<<xRC5 ){		// change detect
        rc5_bit = ~rc5_bit;				// 0x00 -> 0xFF -> 0x00
    
        if( rc5_time < PULSE_MIN )			// to short
          tmp = 0;
    
        if( !tmp || rc5_time > PULSE_1_2 ){		// start or long pulse time
          if( !(tmp & 0x4000) )			// not to many bits
            tmp <<= 1;				// shift
          if( !(rc5_bit & 1<<xRC5) )		// inverted bit
            tmp |= 1;				// insert new bit
          rc5_time = 0;				// count next pulse time
        }
      }
    
      rc5_tmp = tmp;
    }

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.04.2008
    Ort
    Esslingen
    Alter
    35
    Beiträge
    235
    Ok habe festgestellt meine Fernbedienung senden keinen RC5 Code. Es handelt sich um die "TelePilot 910C" von Grundig. Kennt sich da jemand mit aus?

Berechtigungen

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

Labornetzteil AliExpress