Está en la página 1de 9

Control Remoto Inalmbrico Aplicaciones Personales

Decodificacin de Control Remoto Infrarrojo Sony


Autor: Carlos A. Narvez V. Ingeniero Electricista Universidad de Oriente Email: cnarvaez@bolivar.udo.edu.ve

Propsito
El presente proyecto tiene como objetivo la decodificacin de un control remoto infrarrojo Sony con el fin de utilizarlo en aplicaciones diversas. Para ello disponemos de un control remoto para Betamax modelo RMT 150. Ver Fig. 1. La decodificacin ser realizada utilizando un PIC16F84 de Microchip y un software escrito para este microcontrolador.

Fig. 1 Control Remoto Sony para Betamax

Teora de Operacin
Sony utiliza una codificacin bit-width, es decir, un pulso alto de 2.6ms para indicar el encabezado, seguido de un pulso bajo de 400s y luego un pulso alto de 800s o de 1400s para indicar un 0 o un 1 respectivamente. Normalmente a la salida de cualquier modulo detector de IR la seal se muestra invertida, tal como se muestra en la figura 2. La codificacin Sony consiste en un cdigo de 12 bits, los primeros 7 bits corresponden al comando o tecla presionada y los ltimos 5 bits corresponden a la direccin del dispositivo, ver Fig. 3. La transmisin es realizada serialmente primero se enva el comando partiendo de los bits menos significativos (LSB) y luego la direccin del dispositivo partiendo igualmente de los LSB del mismo. Si se deja presionada una tecla, la transmisin del comando y la direccin del dispositivo es repetitiva cada 25s

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales

400s LSB
0 1 0 1 0

MSB
0 1

Encabezado 2.6 ms

800s

1400s

Fig. 2 Comando TV/VCR

MSB

LSB

MSB

LSB

Comando 7 Bits

Direccin 5 Bits

Fig. 3 Codificacin SONY

La tabla 1 muestra las teclas ms comunes del control remoto y el valor en binario y hexadecimal de cada comando. Esta tabla fue realizada utilizando un pequeo hardware para captar las seales del control remoto y un osciloscopio. En el osciloscopio podemos observar el encabezado seguido de 12 bits. Nuestro inters se centra en los primeros 7 bits que corresponden al comando; se le agrega un octavo bit puesto a cero para completar un byte y as poder trabajar mejor a nivel del software. La direccin del dispositivo son cinco bits igual para todos los comandos y que identifica, como su nombre lo indica, al dispositivo o control remoto. Este campo no es de inters prctico en el presente trabajo.

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales

Commando Power Chanel Chanel+ Tv/Vtr Rew Play FF Stop Pause

Binario 0010101 0010001 0010000 1001010 0011011 0011010 0011100 0011000 0011001

Hex 15 11 10 2A 1B 1A 1C 18 19

Tabla 1 Comandos y su valor en binario y hex

Deteccin de luz infrarroja


La deteccin de luz infrarroja la podemos realizar a travs de los denominados modulos IR. Estos modulos de IR son capaces de detectar una seal codificada modulada normalmente a 38Khz. La modulacin se realiza para evitar la falsa informacin que produce la luz infrarroja ambiental. Los mdulos infrarrojos constan de 3 pines: VCC, comun y seal.

Fig. 4 Modulo Detector de IR Radio Shack Cat. No. 276-137B

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales

Hardware
El hardware diseado para este proyecto se muestra en la figura 5. En el podemos destacar el arreglo de 8 LED conectados a la puerta B del microcontrolador cuyo fin es visualizar el comando recibido en binario. El mdulo IR es conectado al pin RA4 el cual se configura como entrada en el microcontrolador. El Pin MCLR el cual es activo bajo, se configura como entrada y es usado como Reset del microcontrolador. El mdulo IR utilizado es similar al presentado en la figura 4. La frecuencia de trabajo es de 4Mhz y todo el circuito es alimentado con +5 voltios.

5V +V

PIC16F84 2.7K RA3 5V +V 10K


RA1 RA0 RA4 OSC1 MCLR OSC2 Vss VDD RB0 RB7 RB1 RB6 RB2 RB5 RB3 RB4 RA2

15pF 4MHZ 15pF

5V +V

Reset

100

MSB
680 680 680 680 680 680

LSB
680 680

Fig. 5 Decodificador Sony

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales Software


;********************************************************************** ; Programa para decodificar un tren de pulsos codificados en * ; formato Sony para el Microcontrolador PIC16F84 @ 4Mhz. * ; * ; Este programa es una adaptacin del programa del autor Jim Nagy * ; presentado en el articulo DS40160A/6_007 Michochip Technology Inc.* ; * ; * ;********************************************************************** ; * ; Filename: decosony.asm * ; Date: 20/08/2001 * ; File Version: 1.0 * ; * ; Author: Carlos A. Narvaez V. * ; Company: Universidad de Oriente * ; * ; * ;********************************************************************** list p=16F84 #include <p16F84.inc> __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

;******* Eques del Programa Zero Carry IR EQU EQU EQU 2 0 4

; RA4

input IR

;******* Definicin de las teclas del Control Remoto Power ChanelL ChanelP TvVtr Rew Play FF Stop Pause EQU EQU EQU EQU EQU .EQU EQU EQU EQU 0x15 0x11 0x10 0x4A 0x1B 0x1A 0x1C 0x18 0x19

;******* Definicin de Variables Temp CntrLo CntrMid CntrHi BitCnt Command EQU EQU EQU EQU EQU EQU ORG goto 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x000 init ; Contador de tiempo (low byte) ; (middle byte) ; (high byte) ; Contador de bits ; Ultimo comando recibido ; vector reset del procesador ; ir a comienzo del programa

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales


; Subrutinas ; ;********************************************************************** ; Delay ; Espera por aproximadamente W mseg y retorna ;********************************************************************** Delay CLRF Temp d1 NOP DECFSZ Temp,F ; Lazo 255 * 4uS GOTO d1 MOVWF Temp ; repita el lazo W veces DECFSZ Temp,W GOTO Delay RETLW 0 ;********************************************************************** ; GetaByte espera hasta 2 segundos por 12 bits. Los datos ; Sony son enviados como 7 bits del comando y 5 bits ; del cdigo de dispositivo, en ambos casos los LSB ; primero. Slo necesitamos el comando de 7 bit al cual ; agregamos un octavo bit puesto a cero para completar ; un byte ;********************************************************************** GetaByte CLRF CntrLo ; reset contadores MOVLW 0x80 MOVWF CntrMid CLRF CntrHi gb1 INCF BTFSC INCF BTFSC INCF MOVLW SUBWF BTFSC GOTO BTFSC Goto Hay seal CALL BTFSS GOTO ; ; ; HdrCheck STATUS,Carry gb1 ; ver si es un encabezado CntrLo,F STATUS,Zero CntrMid,F STATUS,Zero CntrHi,F D'3' CntrHi,W STATUS,Carry main PORTA,IR gb1 ; Espera por una seal

; pero no mas de 2 seg ; (2.5*256*256*12us ~ 2seg) ; aborte si el tiempo se excede ; sino cheque a ver si hay seal ; y sino, loop

; ;

Es un encabezado...continue Lee los primeros 7 bit. Resultado en Command MOVLW MOVWF CLRF CALL RRF DECFSZ GOTO RRF BCF D'7' BitCnt Command GetaBit Command,F BitCnt,F gb2 Command,F Command,7 ; preparado para recibir 7 bits

gb2

; agrega un 8 bit ; puesto a cero

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales


; ; gb3 Lee 5 bit Cdigo del dipositivo pero los ignora MOVLW MOVWF CALL DECFSZ GOTO D'5' BitCnt GetaBit BitCnt,F gb3 ; Preparado para recibir 5 bits

Como test final, asegurese que son solo 12 bits los recibidos CLRF CLRF BTFSS GOTO INCF BTFSC INCF MOVLW SUBWF BTFSS GOTO RETLW CntrLo CntrMid PORTA,IR main CntrLo,F STATUS,Zero CntrMid,F D'4' CntrMid,W STATUS,Carry gb4 0 ; Reset contadores ; Chequee que no hay seal por el ; resto del frame ; Si hay aborte

gb4

; Cheque cuanto he esperado ; (4*256*10us = 10ms) ; loop hasta que los 10ms expiren

;********************************************************************** ; GetaBit Determina el valor del bit que se esta recibiendo. ; Retorna con carry = 1 si el bit = 1 y carry = 0 si el bit = 0 ; Los bits Sony son codificados como 400us sin portadora (low) seguido ; de 800us de portadora (high) para un "0" o 1400us para un "1". ;********************************************************************** GetaBit CLRF CntrLo ; Reset contador b1 INCF CntrLo,F ; determne tiempo de no portadora MOVLW D'100' SUBWF CntrLo,W ; permite hasta 800us (100*8us) BTFSC STATUS,Carry GOTO main ; aborte si es mayor BTFSC PORTA,IR ; mantengase contando portadora viene GOTO b1 ; ; Un espacio menor que 800us fue recibido MOVLW SUBWF BTFSS GOTO ; b2 D'25' CntrLo,W STATUS,Carry main ; Asegurese que es mas grande que ; 25*8us = 200us ; aborte si es menor

Determine la longitud del pulso IR que esta siendo recibido CLRF INCF MOVLW SUBWF BTFSC GOTO BTFSS GOTO CntrLo CntrLo,F D'225' CntrLo,W STATUS,Carry main PORTA,IR b2 ; Cuente este pase ; Permita hasta 1800us (255*8us) ; Aborte si es mayor ; siga contando hasta final pulso

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales


; Seal presente MOVLW SUBWF BTFSS GOTO D'50' CntrLo,W STATUS,Carry main ; Asegurese que es mayor que ; 50*8us = 400us ; Si no aborte

Que es: un 1 o un 0 MOVLW SUBWF RETLW D'125' CntrLo,W 0 ; Compare con un ancho de 1000us ; Carry 1 o 0

;********************************************************************** ; ; Detecta encabezado > 1.8 ms low ; Retorna con carry = 1 si es un encabezado y carry = 0 si no lo es. ; ;********************************************************************** HdrCheck CLRF hc1 INCF BSF BSF MOVLW MOVWF MOVLW MOVWF BCF MOVLW SUBWF BTFSC GOTO BTFSS GOTO Temp Temp,F PORTA,IR STATUS,RP0 B'00100000' PORTA B'00110000' PORTA STATUS,RP0 D'250' Temp,W STATUS,Carry hc2 PORTA,IR hc1 ; Chequee para un encabezado ; de aprox. 2.5 ms de longitud ; Cuente cada pase a traves del loop ; ; ; ; ; ; ; ; Banco 1 Reset schmitt Entrada a la deriva debido a la luz ambiental Banco 0 Chequee para un encabezado de aprox. (250*13us ~3.25 ms)

; Aborte si es muy largo ; Chequee si la seal esta aun ahi ; y si esta mantengase looping

; ;

Un pulso de menos de 3ms de duracin ha sido recibido MOVLW SUBWF RETLW D'138' Temp,W 0 Temp,W 0 ; Asegurese que es mayor que ; 138*13us ~ 1.8ms ; C = 1 si T>1.8ms ; Agregando 0 a cualquier numero C=0

hc2

CLRW ADDWF RETLW

Carlos A. Narvez V. 2002

Control Remoto Inalmbrico Aplicaciones Personales

;********************************************************************** ; ; Programa Principal ; ;********************************************************************** init CLRF PORTA ; Clear registro PORTA CLRF PORTB ; Clear registro PORTB BSF STATUS,RP0 ; Banco 1 MOVLW B'00110000' ; RA4 - RA5 como input MOVWF PORTA ; Configure TRISA MOVLW 0x00 ; PORTB todos Salidas MOVWF PORTB ; configura TRISA BCF STATUS,RP0 ; Banco 0 main CALL MOVF MOVWF GOTO END GetaByte Command,W PORTB main ; Tomar un byte de Comando ; Muestre comando por PORTB ; directive 'end of program'

Carlos A. Narvez V. 2002

También podría gustarte