PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : IR Fernbedienung - Signal kommt zweimal



rosesa
05.06.2004, 22:52
Ich habe mir vor kurzem einen RP5 zugelegt und bin sehr happy damit.

Jetzt habe ich ein kleines Problem mit der IR Kommunikation. Ich habe ein paar Fernbedienungen ausprobiert und eine davon (SEG TV) scheint auch zu funktionieren – jedenfalls reagiert das Testprogramm (DISPLAY_IR_CODE.bas), wenn ich eine Taste drücke.
Nun war mir das Zählen etwas zu langweilig und ich habe das Programm so verändert, dass HBYTE und LBYTE als Binärzahl dargestellt werden.
Zuerst werden jeweils die Bits 7-4 dargestellt, dann folgt eine Pause und die Bits 3-0 werden dargestellt. Wenn alle 4 Werte angezeigt wurden, startet das Programm wieder von vorne. Jetzt ist es so, dass das Programm manchmal zweimal durchläuft, bevor es wieder auf ein IR-Signal wartet. Hat jemand ähnliche Erfahrungen gemacht? Kann das an der Fernbedienung liegen, oder kann ich da im Programm was verbessern?

Ich hab schon nach einer Antwort gesucht, habe aber leider Nix gefunden.

Hier mein Programm:


...
define ADR byte[6] ' IR Adresse
define CMD byte[7] ' IR Wert
define OUTPUT byte[8]
define VAR byte[9]
...
#LOOP
pause 5
sys COMNAV_STATUS
if IR_F = off then goto LOOP
gosub GET_IRDATA
if LBYTE and HBYTE = &HFF then goto LOOP
ADR=HBYTE:CMD=LBYTE

beep 100,5,10:beep 100,5,10:beep 100,5,10

' HByte Bits 7, 6, 5, 4
OUTPUT = (ADR AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null

' HByte Bits 3, 2, 1, 0
OUTPUT = ADR AND &H0F
if OUTPUT > 0 then gosub show else gosub null

' HByte Bits 7, 6, 5, 4
OUTPUT = (CMD AND &HF0) SHR 4
if OUTPUT > 0 then gosub show else gosub null

' HByte Bits 3, 2, 1, 0
OUTPUT = CMD AND &H0F
if OUTPUT > 0 then gosub show else gosub null

beep 100,5,10:beep 100,5,10:beep 100,5,10

goto LOOP
'-------------------------------------------
' Funktionen
'-------------------------------------------
#show
' IN: OUTPUT
VAR = OUTPUT AND 8
if VAR = 8 then gosub LED1ON
pause 5
VAR = OUTPUT AND 4
if VAR = 4 then gosub LED2ON
pause 5
VAR = OUTPUT AND 2
if VAR = 2 then gosub LED3ON
pause 5
VAR = OUTPUT AND 1
if VAR = 1 then gosub LED4ON
pause 200
beep 100,10,100
gosub LEDSOFF
return

#null
gosub LED1ON:pause 5:gosub LED1OFF
gosub LED2ON:pause 5:gosub LED2OFF
gosub LED3ON:pause 5:gosub LED3OFF
gosub LED4ON:pause 5:gosub LED4OFF
pause 200:beep 100,10,100
return
...

Vielen Dank & Grüße

recycle
06.06.2004, 00:04
Jetzt ist es so, dass das Programm manchmal zweimal durchläuft, bevor es wieder auf ein IR-Signal wartet. Hat jemand ähnliche Erfahrungen gemacht? Kann das an der Fernbedienung liegen, oder kann ich da im Programm was verbessern?

Ich denke mal das wird an der Fernbedienung liegen.
Ist bei mir jedenfalls auch so, dass das RC5-Kommand meist 2 mal gesendet wird, wenn ich eine Taste drücke.
Macht ja unter Umständen auch Sinn das Signal mehrfach zu senden, da die Fernbedienung kein Feedback bekommt ob es wirklich beim Empfänger angekommen ist.
Wenn ich bei meiner Fernbedienung (ist vermutlich bei RC5 immer so) eine Taste länger gedrückt halte, wird ein anderes Signal gesendet.
Somit kann der Empfänger dann trotzdem unterscheiden ob ich die Taste nur einmal kurz gedrückt habe oder sie gedrückt halte.

Ich vermute mal, dass das im RC5 Standard alles irgendwo definiert ist. Wenn du es ganz genau wissen willst, würde ich mal nach RC5 googeln.

matren
06.06.2004, 00:32
Dann müsste die Fernbedienung das Signal aber wirklich 2 mal senden,
da sich ja das Toggle-Bit jedesmal ändern muss.
Oder der RP5-Code ignoriert das Toggle-Bit. ???

Hier ist das ein wenig beschrieben:
http://www.produktinfo.conrad.com/dlc/images/flagge_en.gif http://users.pandora.be/davshomepage/rc5.htm

Dirk
06.06.2004, 12:03
Hi rosesa,

dass das Programm teilweise 2x durchläuft, ist bei mir genau so, und zwar sowohl bei der Original-Demo und auch bei meinem Programm "Binärausgabe.bas", das du im Download-Bereich finden kannst.

Das muss wohl am Sendeprotokoll liegen.

Gruß Dirk

Hall2004
08.06.2004, 07:25
Hallo

Also wenn ich mir Dein Proggi (übrigens sehr gut gemacht, mit der Binärausgabe ansehe, vermisse ich die Zeile zum zurücksetzen von LBYTE und HBYTE

LBYTE=0:HBYTE=0
gosub GET_IRDATA

So hab ich's gemacht und meine Ergebnisse sind eindeutig.
Ich weiß nicht, ob das unbedingt nötig ist, aber es funzt.

Ich schicke übrigens die Daten über das ser. Kabel an ein Terminalprog.
Da sieht man sie in Klarschrift. Scheint mir zum Testen der Fernbedienungen besser. Aber wie gesagt. Deine Lösung scheint mir auch ganz schick