Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Decosony
Decosony
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.
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
400s LSB
0 1 0 1 0
MSB
0 1
Encabezado 2.6 ms
800s
1400s
MSB
LSB
MSB
LSB
Comando 7 Bits
Direccin 5 Bits
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.
Binario 0010101 0010001 0010000 1001010 0011011 0011010 0011100 0011000 0011001
Hex 15 11 10 2A 1B 1A 1C 18 19
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
5V +V
Reset
100
MSB
680 680 680 680 680 680
LSB
680 680
; 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
; 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
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
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
;********************************************************************** ; ; 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'