linux_80
05.08.2008, 01:40
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:
' 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 (http://roboter.net-con.net/rn/CIMG0152s.JPG)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.