-
        

Ergebnis 1 bis 7 von 7

Thema: RC5 IR ... Hilfe :(

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    31.01.2006
    Beiträge
    23

    RC5 IR ... Hilfe :(

    Anzeige

    Hallo zusammen,

    ggf. hat wer nen tip für mich. Ich versuche nun seit mehreren Stunden mit Hilfe des Threads (http://www.roboternetz.de/phpBB2/zei...ag.php?t=20209) einen TSOP1738 ans laufen zu bekommen.

    Als HW verwende ich das RN-Control v 1.4

    Habe also nun den TSOP laut http://www.datasheetcatalog.org/data.../301092_DS.pdf angeschlossen.

    + an +
    gnd an gnd
    und out an Port pind.3

    Egal was ich tue... ich bekomm nix eingelesen (also es wird nichts ausgegeben ... ausser mein programmstart). ... ich habe nun mehrere IR Empfänger durch (von alten Recievern etc. ...) bin aber letztendlich beim TSOP gelandet, da ich diesesn Fabrikneu hier hatte und auch ein Datenblatt hierfür habe.

    Als Fernbedienungen habe ich hier diverse rumliegen.
    Eine original Philips von einem Philips TV, eine Logitech Harmony, eine andere universal FB von Heitech.

    Mein Code:

    Code:
     $regfile = "m32def.dat"                                    
     $framesize = 32                                            
     $swstack = 32                                               
     $hwstack = 32
     $crystal = 16000000                                        
     $baud = 9600                                             
     
     Config Rc5 = Pind.3
     On Int1 Int1_int                                        
     Enable Int1
     Config Int1 = Falling
     Enable Interrupts
    
     Dim Address_rc5 As Byte , Command_rc5 As Byte , Rc5_flag As Bit
    
    
     Sound Portd.7 , 400 , 450                                   'BEEP
     Sound Portd.7 , 400 , 250                                   'BEEP
     Sound Portd.7 , 400 , 450                                   'BEEP
    
     Print "Waiting for IR"
    
     'main
     Reset Rc5_flag
     Do
       If Rc5_flag = 1 Then
          If Address_rc5 <> 255 Then
            Reset Rc5_flag
            Command_rc5 = Command_rc5 And &B01111111
            Print "Adresse" ; Address_rc5 ; "Code" ; Command_rc5
          End If
       End If
     Loop
    End
    
    'Lesen der RC5 Codes
    Int1_int:                                                   'Interrupt Handler For Int1
       Disable Int1
       Enable Interrupts
       Getrc5(address_rc5 , Command_rc5)
       Set Rc5_flag                                             'Flag für RC5 Daten
       Gifr = Gifr Or &H80                                      'clear Flag Int1
       Enable Int1
    Return

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Moin!

    Als ich vor einiger Zeit mal mit RC5 rumexperimentiert habe musste ich feststellen, dass nur ein Bruchteil aller IR-Fernbedienungen mit diesem Code läuft. Ich hatte mir damals so ´ne Universal-FB für ein paar Euro gekauft, die an die 1000 Hersteller und Gerätetypen gespeichert hatte, und nur bei vielleicht 20% kam RC5 raus. Philips klingt schon mal gut, aber 100% sicher bin ich mir nicht, ob die in allen (!) Geräten RC5 verwenden. Ohne Oszi wird das wohl auch nicht sicher herauszufinden sein.

    Ob der Sensor sein Signal ordentlich an den µC abgibt habe ich getestet, indem ich mir den Eingang über einen anderen Ausgang mit LED habe anzeigen lassen:

    Code:
    DDRX.Y=1
    
    Do
    PortX.Y = PinD.3
    Loop
    Wenn´s flackert, kommt das Sgnal schon mal rein.

    Und dann habe ich in manchen Threads gelesen, dass die GetRC5-Abfrage in einer ISR problematisch sein kann, weil die erste Synchronisationsflanke fehlt. Nur mal so und zum Testen, ob es grundsätzlich funktioniert, würde ich mal einen Code probieren, bei dem der GetRC5-Befehl in der Hauptschleife steht. Das hält den Controller zwar irre lange auf, aber das schließt diese Fehlerquelle schon mal aus. Wenn´s damit auch nicht klappt würde ich fast mal tippen, dass es dann am Code der FB liegt... an ein Oszi kommst Du nicht ran?

    (Der µC läuft auch tatsächlich mit externem Quarz und 16 MHz? )

  3. #3
    hallo,
    ich kann die Mitteilung des Dr.Sauerbruch nur bestätigen. Auch ich habe viel Zeit vertan um dann festzustellen, dass jede Fernbedienung anders tickt. Den RC5-Befehl kann man vergessen. Hier hilft nur, selbst das Datenprotokoll zu lesen (Oszi) und sich ein eigenes Programm zu schreiben.
    dolivo

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Sauerbruch
    Und dann habe ich in manchen Threads gelesen, dass die GetRC5-Abfrage in einer ISR problematisch sein kann, weil die erste Synchronisationsflanke fehlt.
    Da RC5 immer mindestens zweimal den Code sendet, geht der erste dabei zwar verloren, aber den zweiten bekommt die Routine dann mit. Der Bascom Befehl scheint da tolerant zu sein. Allerdings würde ich auch nur ein Flag in der ISR setzen und den GetRC5() Befehl dann in der Hauptschleife anwenden.

    Zitat Zitat von Sauerbruch
    Nur mal so und zum Testen, ob es grundsätzlich funktioniert, würde ich mal einen Code probieren, bei dem der GetRC5-Befehl in der Hauptschleife steht.
    Das auf jeden Fall. So minimal wie möglich, wenn man zweifel an Hard- und Software hat.

    @luvat: Hier habe ich dir mal ein paar Zeilen zusammengeschrieben (ungetestet), falls du kein Oszi hast. Es sollten die High und Low Zeiten aller Intervalle ausgegeben werden.
    Code:
    $regfile = "m32def.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    $baud = 9600
    
    Ddrd.2 = 1                                       'hier wird das Signal eingelesen
    Dim Interval(200) As Word
    Dim Flanken_anzahl As Byte
    Dim Print_flag As Byte
    Dim I As Byte
    Config Timer0 = Timer Prescale = 64
    Load Timer0 , 25
    On Timer0 Timer0_isr                                        'ergibt 10KHz Abtastfrequenz, also 100µs Zeitwerte
    Enable Timer0
    Config Int0 = Change
    On Int0 Int0_isr
    Enable Int0
    Enable Interrupts
    Flanken_anzahl = 1
    
    Do
       If Print_flag = 1 Then
          Print_flag = 0
          Print Flanken_anzahl; ":";
          For I = 1 To Flanken_anzahl
             Print Interval(i) ; " ";
             Interval(i) = 0
          Next I
          Print ""
          Flanken_anzahl = 1
       End If
    Loop
    End
    
    Timer0_isr:
       Incr Interval(flanken_anzahl)
       If Interval(flanken_anzahl) > 10000 Then                 'Ausgabe nach 1 Sekunde ohne weitere Signale
          Print_flag = 1
       End If
    Return
    
    Int0_isr:
       Incr Flanken_anzahl
       If Flanken_anzahl > 200 Then
          Flanken_anzahl = 200
          Print_flag = 1
          Print "Too many intervals"
       End If
    Return

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Den RC5-Befehl kann man vergessen.
    Na ja - ganz so kritisch sehe ich es auch nun wieder nicht!

    Wenn man eine Anwendung hat, die nicht soooo zeitkritisch ist und man sich im Programmablauf die paar 100 µS Pause leisten kann, ist der GetRC5-Befehl was sehr schönes. Ich habe damit schon das eine oder andere Gerät fernsteuerbar gemacht. Voraussetzung ist natürlich, dass die Fernbedienung auch wirklich RC5 sendet

    Und um das schnell herauszufinden, habe ich an einem verregneten Wochenende mal einen "RC5-Checker" gebastelt (Bild anbei). Dieses kleine Gerätchen (mit einem Tiny2313 und ´nem TSOP 38 wie man sieht) stellt das empfangene Adress- und Kommandobyte auf 2 Zeilen mit je 8 LEDs dar. Empfängt er einen Non-RC5-Code (beide Bytes sind 255), läuft ein Lichtpunkt von links nach rechts. Damit bewaffnet wusste ich nach etwa einer halben Stunde über alle IR-Fernbedienungen im Umkreis von 500 Metern bescheid

    Also luvat, nicht aufgeben

    Gruß,

    Daniel
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken rc5-checker.jpg  

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    31.01.2006
    Beiträge
    23
    lol

    naja... zeitkritisch ist das programm nicht. ... es wird ein rgb fader, welchen ich per FB steuern will. ... daher ist die zeit nicht wichtig

    vielen dank auf jedenfall für die antworten. ... morgen ist ja sonntag ... da kann ich das ma testen :>

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Hallo,

    teste doch einfach mal den Programmteil aus der Bascom Hilfe.

    Stichwort "getrc5"

    Für deinen Zweck reicht der voll aus.

    Gruß
    Papsi

Berechtigungen

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