-
        

Ergebnis 1 bis 9 von 9

Thema: IR RC dekodieren

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731

    IR RC dekodieren

    Anzeige

    Hallo,

    bei Pollin gibts z.Zt. eine Fernbedienung u.a. mit Joystick drauf:


    So eine hab ich schon länger hier rumliegen, aber nie genauer damit befasst, ausser herausgefunden, das die interesanten Tasten kein RC5 o.ä bekanntes aussenden.
    Jetzt hab ich aber endlich eine RC-visu gebaut:


    Die Tasten erzeugen diese Ausgabe, nach dem TSOP:
    http://www.roboternetz.de/phpBB2/alb...hp?pic_id=1259

    Die Linie in der Mitte trennt den Teil der bei allen gleich ist (linke Seite), von dem der bei jeder Taste unterschiedlich ist.
    Der kürzeste Abschnitt ist ca. 0,6ms lang (mit Oszi gemessen).
    Da die Codes unterschiedlich lang sind, nehme ich mal an, das der letzte Teil von den kürzeren noch als Low dazugehört

    Ich hab schon alle RC Seiten durch, aber dieser Code passt zu keinem die ich gefunden habe.


    Wie kann man dies jetzt am besten decodieren, um damit digital weiterverarbeitet zu werden ?


    PS:
    Zu dieser FB gäbe es auch noch eine QUERTZ-Tastatur (gleicher IR-Code), evtl. gibts die ja auch mal bei Pollin

    Hier hab ich mir noch nicht die Arbeit gemacht den Code abzuschreiben

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hi,

    hab diese Woche gesehen, das es nun diese Tastatur (SWK-8650) auch beim Pollin gibt:
    http://www.pollin.de/shop/detail.php...ODgyOTk=&ts=20

    Programm hab ich immer noch keins, aber die Codes visualisiert,
    mit einem TSOPxx36 kommt das an (siehe PDF im Anhang).

    So wie ich das bis jetzt sehe sind das 9 Bit Nutzdaten, die ersten 9 Bit kann man wohl als Startsequenz betrachten.
    Angehängte Dateien Angehängte Dateien

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    hab mich nun doch hingesetzt, und die Sache entschlüsselt.
    Es ist eine Sub draus geworden, die den Code, so wie er im PDF von oben zu finden ist, zurückgibt.
    Da dies so komische Werte sind, wandle ich diese mit einer Tabelle um.
    Dann nur für diesen Test nochmal mit einer 2. Tabelle um das in was lesbares zu bringen.
    Da es die TV-RC und die Tatatur getrennt gab, habe ich die Codes so zusammengestellt, dass man je nach verwendetem Gerät nur die eine oder andere Tabelle braucht, oder beide wenn man eben beides hat

    Noch was zur Tabelle, die Codes sind zwar auf 9 Bit verteilt, überschneiden sich aber nicht, deshalb hab ich das 9. Bit einfach weggelassen um in der Tabelle zu suchen !

    Buchstaben und Zahlen habe ich nach Möglichkeit an die ASCII-Stelle in der Tabelle gelegt, dass man nicht unbedingt weiter umwandeln müsste.
    Die Sondertasten wie Shift usw. sind zum Schluss, somit kann man nur durch die Nummer >= 113 abfragen und merken falls man das auswerten will.

    Während dieser bastelei bin ich noch drauf gekommen, dass wenn die TV-RC neu ist, also Batterie frisch eingelegt, alle anderen Tasten auch diesen IR-Code aussenden, so kann man unterscheiden, ob die "1" von der Tastatur oder RC gekommen ist.
    Es gibt aber trotzdem ein paar Tasten die bei beiden gleiche Codes liefern (macht aber nix ).

    Noch eine Anmerkung: Die TV-RC konnte man an ein TV-Gerät anpassen, damit sie diese Codes sendet zB. bei "0"-"9".

    Ein Tastenpieps hab ich auch mit drin, denn so gut läuft das mit dem schreiben auch nicht, man muss immer sicherstellen, dass die Taste erkannt wurde, also keine verschluckt wird.


    Ist für Mega644 und Mega32 getestet,
    alphaVersion:
    Code:
    ' IR Tastatur
    '
    ' auf RN-Control
    '
    
    $regfile = "M32def.dat"                                     ' the used chip
    '$regfile = "M644def.dat"                                    ' the used chip
    $crystal = 16000000                                         ' frequency used
    $baud = 38400
    
    
    ' configs
    
    Config Portc = &B00111111
    
    Config Timer0 = Timer , Prescale = 64 , Clear Timer = 1
    Const Prescale64 = &H03
    
    #if _chip = 23
    On Oc0 Timer0isr
    #endif
    #if _chip = 37
    On Oc0a Timer0isr
    #endif
    
    ' Dim
    
    Dim Cnt As Byte                                             ' zähler für Timeraufrufe
    Dim Rc_flag As Bit                                          ' Flag ob was gekommen ist
    Dim Z As Byte                                                 ' Zähler
    Dim Rc(20) As Byte                                          ' Bits von RC
    Dim Rcdata(2) As Byte
    Dim Rcdatal As Word At Rcdata(1) Overlay
    Dim Idxw As Word                                            ' Index aus der 1. Tabelle
    Dim Idxb(2) As Byte At Idxw Overlay
    Dim Taste As String * 12
    
    ' div
    
    Portc = &HFF
    
    #if _chip = 23
    Ocr0 = &HC8                                                 ' damits 800 µs werden
    #endif
    #if _chip = 37
    Ocr0a = &HC8                                                ' damits 800 µs werden
    #endif
    
    Print
    Print "NetBox IR Tastatur"
    Print
    
    Enable Interrupts
    
    ' Main
    Do
    
        #if _chip = 23
        Toggle Portc.0
        #endif
        #if _chip = 37
        Pinc.0 = 1
        #endif
    
        ' IR-Daten holen
        Gosub Getrcnetbox
    
        Idxw = 0
    
        If Rcdatal <> 0 Then
            'Print "    " ; Bin(rcdata(2)) ; Bin(rcdata(1)) ; " " ; Hex(rcdata(2)) ; Hex(rcdata(1)) ;
    
            Idxw = Lookdown(rcdata(1) , Hex2keyrc , 118)
    
            Print " " ;
            Print Idxw
    
            'Taste = Lookupstr(idxb(2) , Key2txtrc)    ' geht irgendwie ned, kommt immer nur das 1. raus !?!
            Restore Key2txtrc
            If Idxw < 119 Then
                For Z = 1 To Idxw
                    Read Taste
                Next Z
    
                Print Taste
            End If
    
            Sound Portd.7 , 300 , 250                           'BEEP
    
        End If
    
        Waitms 100
    
    Loop
    
    
    End
    
    ' subs
    
    ' wartet auf IR
    Getrcnetbox:
        #if _chip = 23
        Enable Oc0
        #endif
        #if _chip = 37
        Enable Oc0a
        #endif
    
        ' start init
        Stop Timer0
        Timer0 = 0
        Rc_flag = 0
    
        Rcdatal = 0                                             ' RC Daten löschen
    
        Bitwait Pinc.6 , Reset                                  ' warten auf low
    
        Cnt = 0
        Start Timer0
    
        ' warten bis der Timer fertig ist
        Bitwait Rc_flag , Set
    
        If Rc_flag = 1 Then
    
            ' nur wenn die ersten Bits 0010 sind, könnte der Rest passen, sonst von haus aus garnicht !
            If Rc(1) = 0 And Rc(2) = 0 And Rc(3) = 1 And Rc(4) = 0 Then
                For Z = 5 To 20
                    Shift Rcdatal , Left , 1
                    Rcdatal.0 = Rc(z)
    
                Next Z
    
                ' debug ausgabe!
    '            For Z = 1 To 20
    '                Print Rc(z) ;
    '                Rc(z) = 0
    '            Next Z
    
    '            Print
    
                ' passen die Daten ?
                If Rcdata(2) <> &H94 And Rcdata(2) <> &H95 Then
                    Rcdatal = 0
                End If
    
            End If
    
            Timer0 = 0
            Rc_flag = 0
    
        End If
    
        #if _chip = 23
        Disable Oc0
        #endif
        #if _chip = 37
        Disable Oc0a
        #endif
    
    Return
    
    
    ' Timer ISR
    
    Timer0isr:
    
        Incr Cnt
        Rc(cnt) = Pinc.6
    
        If Cnt = 20 Then
    
            Stop Timer0
    
            Cnt = 0
            Rc_flag = 1
        End If
    
    Return
    
    
    ' Codetabellen
    
    ' erste Tabelle Codes die auf der TV-RC vorkommen, incl. der die auf beiden vorkommen
    Hex2keyrc:
    Data &HF4 , &HF5 , &H9C , &HC1 , &HA8 , &HF9 , &H24 , &H65
    Data &H14 , &H95 , &HD4 , &H8D , &H20 , &H10 , &HE4 , &HAD
    Data &H1C , &H35 , &H85 , &HB5 , &H0D , &H04 , &H05 , &H25
    Data &H34 , &HA5 , &H15 , &HB1
    
    ' Tabelle 2, codes die nur auf dem Keyboard vorkommen
    Hex2keykb:
    Data &HB9 , &H30 , &H00 , &H38 , &H00 , &H00 , &HF8 , &H54
    Data &H39 , &H00 , &H5D , &H00 , &H00 , &H00 , &H1D , &H9D
    Data &H2C , &H8C , &H6D , &H6C , &H71 , &H60 , &H50 , &H48
    Data &H49 , &H7C , &H7D , &H5C , &H4D , &H00 , &H00 , &H31
    Data &H64 , &HE5 , &HD5 , &HB4 , &HF1 , &H08 , &H91 , &HD0
    Data &HD1 , &HC8 , &H88 , &HBD , &HDD , &HFD , &HDC , &HCD
    Data &HBC , &H3D , &HCC , &HED , &HF0 , &HC9 , &HE0 , &H09
    Data &HFC , &H89 , &HE1 , &HA1 , &HB0 , &H3C , &HAC , &HEC
    Data &H2D , &H70 , &H61 , &H51 , &H11 , &H90 , &HA0 , &HB8
    Data &H0C , &H4C , &H79 , &H78 , &H55 , &H74 , &H94 , &H69
    Data &HE8 , &HA4 , &H75 , &H28
    
    
    Hex2keyshift:
    Data &H29 , &H40 , &H98 , &H18 , &H21 , &HA9 , &H00 , &H00
    
    
    ' Text der zur Taste kommt
    Key2txtrc:
    Data "1 RC" , "2 RC" , "3 RC" , "4 RC" , "5 RC" , "6 RC" , "7 RC" , "8 RC"
    Data "9 RC" , "0 RC" , "Mute RC" , "./.. RC" , "Enter RC" , "Prev RC" , "Menu RC" , "Vol + RC"
    Data "Vol - RC" , "Rot RC" , "Grün RC" , "Gelb RC" , "Blau RC" , "CH + RC" , "CH - RC" , "C links"
    Data "C rechts" , "C auf" , "C ab" , "TV/Web"
    
    Key2txtkb:
    Data 13 , " Tab" , "_" , " " , "_" , "_" , "#" , " Entf"
    Data " Backspace" , "_" , "´" , "_" , "_" , "_" , "+" , ","
    Data "-" , "." , "ß" , "0" , "1" , "2" , "3" , "4"
    Data "5" , "6" , "7" , "8" , "9" , "_" , "_" , "<"
    Data "Oben" , "Bild Auf" , "Bild Ab" , "Unten" , "a" , "b" , "c" , "d"
    Data "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l"
    Data "m" , "n" , "o" , "p" , "q" , "r" , "s" , "t"
    Data "u" , "v" , "w" , "x" , "y" , "z" , "ä" , "ö"
    Data "ü" , "^" , "Home" , "WWW.." , "Album" , "Suche" , "E-Mail" , "F6"
    Data "TV Mute" , "TV Video" , "F9" , "Neu laden" , "zurück" , "Weiter" , "Hilfe" , "Drucken"
    Data "Option" , "Stop" , "Lesezeichen" , "Menü "
    
    Key2txtshift:
    Data "Alt Gr" , "Strg" , "Shift rechts" , "Shift links" , "Shift Lock" , "Alt"
    TSOP1x36 ist an PORTC.6 angeschlossen,
    an Portc.0 ist nur eine StatusLED, um zu sehen ob sich was tut.

    Und ein Bildchen hab ich auch noch gemacht von der ganzen Testumgebung:
    zum Bild

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    63
    Beiträge
    622
    Hi linux_80,

    da hast Du Dir sehr viel Mühe gemacht, den Code zu entschlüsseln und mit Hilfe einer Tabelle verwendbar zu machen! Diese Postings von Dir sind eine sehr schöne Demonstration, wie man ein Problem angehen und erfolgreich zu Ende bringen kann, obwohl Dir niemand einen Tipp zu diesem spezifischen Code geben konnte.

    Weiter viel Erfolg,

    Fred
    Only entropy comes easy. - Anton Checkhov

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    Hi linux_80,

    schönes Projekt. Die Fernbedienung ist programmierbar und kann auch noch andere Codes, unter anderem auch RC5:

    Man wählt z.B. einen Code von Loewe Opta, den 009.

    1. AUS + TV/WEB gleichzeitig drücken und gedrückt halten, bis LED dauerhaft leuchtet
    2. 3-stelligen Code eingeben
    3. zum Speichern TV/WEB drücken

    Ab sofort wird RC5 gesendet.

    Damit kannst Du die TV-RC sicher noch besser von der Tastatur unterscheiden.

    Gruß, uffi.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    Noch ne Frage: wie ist Deine Reichweite mit dem TSOPxx36? Bist Du sicher, dass die TV-RC und die Tastatur 36 kHz Bursts senden, oder sind es evtl. doch 38 kHz?

    Kannst Du die Bursts mit einem Fototransistor ausmessen?

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    Für die RC5 Decodierung habe ich einen Interrupt-basierten Algorithmus in C für einen ATMEGA entwickelt, zu finden hier:

    http://freenet-homepage.de/uffmann/RemoteControl1.html

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Mahlzeit,

    ob es 36 oder 38kHz sind hab ich nicht gemessen, hab nur 'nen 36er TSOP da, und da kommt was an. Bei Gelegenheit mess ich mal.

    Das mit dem umproggen des Codes auf RC5 geht natürlich, aber dann muss die Auswerteroutine beide Codes gleichzeigt beherrschen, denn der Joystick da drauf sendet immer nur diesen speziellen Code, und dieser war ja das Ziel der Übung

    Dank des Tastenpieps kann man die Reichweite gut ausprobieren, also quer durchs Zimmer, auch wenn man in die andere Richtung zeigt ist kein Problem. Bin auch mal in den Gang raus, dann sinds ca. 8m, auch keine Probleme.
    Nur wenn Sonne oder Neonröhre dazwischenfunken muss man manchmal öfter drücken bis der Tastenpieps piept. Aber aus meiner Routine kommen keine falschen Werte, nur solche die in der Tabelle vorkommen.

    Man darf auch nicht zu schnell schreiben, denn wenn man die nächste Taste drückt, bevor das Senden der letzten abgeschlossen ist, wird gleich mit der neuen begonnen, dann sind beide verloren !

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    54
    Beiträge
    198
    o.k. bei der Reichweite sind es wohl definitiv 36 kHz Bursts (sonst würdest Du keine 8m erreichen).

    Aber dass bei Änderung des Codes auf RC5 die "Joystick"-Tasten immer noch mit dem seltsamen 9-bit Code arbeiten, wundert mich schon sehr!

Berechtigungen

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