BENEMÈRITA UNIVERSIDAD AUTÒNOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA ELECTRÓNICA “CONTROL REMOTO INFRARROJO SONY” Alumno: Zúñiga López José Alberto Aguilar Pérez Oscar Abelardo Pérez Romero ASIGNATURA: INTERFACES PROFESOR: M.C. ARROYO DIAZ SALVADOR ANTONIO Puebla de Zaragoza, a 7 de diciembre del 2008
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
El presente proyecto tiene como objetivo la decodificación de un control remoto
infrarrojo Sony con el fin de utilizarlo en aplicaciones diversas, en este caso se utilizo parapoder enviar comandos a una PC por el puerto serial utilizando el protocolo de
comunicación RS232 y la adquisición de los datos se hizo con un programa en Visual c++,
la decodificación se hizo con un PIC16f628 el cual, a su vez controla un carro a controlremoto de RF, este control remoto forma parte de un proyecto final el cual mas adelante se
describirá y se explicara el uso de este control remoto en dicho proyecto.
Para poder explicar como se llevo a cabo la decodificación del tren de pulsos delcontrol remoto es necesario explicar el protocolo de comunicación infrarroja de SONY,
cabe aclarar que para cada marca de equipos electrónicos existe un protocolo diferente, en
el caso de SONY es el RC-5.
Teoría de Operación
Sony utiliza una codificación “bit-width”, es decir, un pulso alto de 2.6ms paraindicar elencabezado, seguido de un pulso bajo de 400µs y luego un pulso alto de 800µs o
de 1400µs para indicar un “0” o un “1” respectivamente. Normalmente a la salida de
cualquier modulo detector de IR la señal se muestra invertida, tal como se muestra en lafigura 2.
La codificación Sony consiste en un código de 12 bits, los primeros 7 bits
corresponden al comando o tecla presionada y los últimos 5 bits corresponden a ladirección del dispositivo, ver Fig.3. La transmisión es realizada serialmente primero se
envía el comando partiendo de los bits menos significativos (LSB) y luego la dirección
del dispositivo partiendo igualmente de los LSB del mismo. Si se deja presionada una
tecla, la transmisión del comando y la dirección del dispositivo es repetitiva cada 25µs.
La siguiente tabla muestra las teclas más comunes del control remoto y el valor
en binario y decimal de cada comando. Esta tabla fue realizada utilizando un pequeño
hardware para captar las señales del control remoto y analizador lógico el cual resultamuy interesante ya que corre en Windows 98 y se pueden monitorear hasta cuatro señales
en tiempo real conectadas al puerto paralelo de la pc . En el analizador lógico podemos
observar el encabezado seguido de 12 bits. Nuestro interés se centra en los primeros 7 bitsque 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 dirección del dispositivo son cinco
bits igual para todos los comandos y que identifica, como su nombre lo indica, aldispositivo o control remoto. Este campo no es de interés práctico en el presente trabajo.
Se me hizo necesario el uso de un analizador lógico para poder ver las señales que
se reciben y mandaban por el puerto en cada momento, pero como no tengo uno ni dineropara comprármelo, me tuve que montar uno con un AMD K6 viejo que tenía en casa y con
ayuda del programa Logic Analyzer de Logixell.
He aquí algunas fotos de mi mesa en pleno desarrollo y algunas capturas del analizador en
La detección de luz infrarroja la podemos realizar a través de los denominados
módulos IR. Estos módulos de IR son capaces de detectar una señal codificadamodulada normalmente a 38Khz. La modulación se realiza para evitar la falsa
información que produce la luz infrarroja ambiental. Los módulos infrarrojos constan de3 pines: señal, común y VCC.
Fig. 4 Modulo Detector de IR Radio
Hardware
El hardware diseñado para este proyecto se muestra en la figura 5. En el
podemos destacar la comunicación vía serial conectado al MAX232 para hacer laconversión de voltajes entre RS232 y TTL conectados al puerto B del
microcontrolador cuyo fin es visualizar el comando recibido en binario. El módulo IR es
conectado al pin RB5 el cual se configura como entrada en el microcontrolador. El PinMCLR el cual esta desactivado y con el oscilador interno activado. El módulo 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.
Integrado MAX232: Los circuitos con letra T son"Transmitters", que trasladan nivel TTL/CMOS en su
entrada a nivel RS232 en su salida. Los circuitos con letra
R son "Receivers", que trasladan señales RS232 en suentrada (que pueden ser de hasta +30/-30 V) a nivel
Distribución de patas (con sus funciones) del PIC 16F628A.
El PIC 16F84A puede estar muy bien como elección para comenzar, pero la única razón
que va quedando para hacerlo es que la mayoría de los ejemplos de programa y de circuitoque se encuentran por allí están realizados sobre él. En base a lo dicho en el párrafo
anterior, entonces el PIC 16F628A es igual de elegible, ya que es un reemplazo
prácticamente directo de nuestro famoso microcontrolador "de batalla". ¿Pero por quécambiar, si ambos están disponibles en el mercado? Por una razón muy simple: el PIC16F628A tiene más memoria de programa (el doble), más RAM, más EEPROM, más
modos de uso, más timers, y más prestaciones, incluyendo la que aprovechamos en este
diseño, el puerto serie implementado por hardware.
Software ;********************************************************************** ; Programa para decodificar un tren de pulsos codificados en * ; formato Sony para el Microcontrolador PIC16F84 @ 4Mhz. * ; * ; Este programa es una adaptación 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 EQU 2 Carry EQU 0 IR EQU 4 ; RA4 input IR
;******* Definición de las teclas del Control Remoto
; 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 código de dispositivo, en ambos casos los LSB ; primero. Sólo 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 CntrLo,F ; Espera por una señal BTFSC STATUS,Zero INCF CntrMid,FBTFSC STATUS,Zero INCF CntrHi,F MOVLW D'3' ; pero no mas de 2 seg SUBWF CntrHi,W ; (2.5*256*256*12us ~ 2seg) BTFSC STATUS,Carry GOTO main ; aborte si el tiempo se excedeBTFSC PORTA,IR ; sino cheque a ver si hay señal Goto gb1 ; y sino, loop
; Hay señal ;
CALL HdrCheck ; ver si es un encabezado BTFSS STATUS,Carry GOTO gb1
; ; Es un encabezado...continue ; Lee los primeros 7 bit. Resultado en Command
; 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 D'25' ; Asegurese que es mas grande que
SUBWF CntrLo,W ; 25*8us = 200us BTFSS STATUS,Carry GOTO main ; aborte si es menor
; Determine la longitud del pulso IR que esta siendo recibido
CLRF CntrLo b2 INCF CntrLo,F ; Cuente este pase
MOVLW D'225' SUBWF CntrLo,W ; Permita hasta 1800us (255*8us) BTFSC STATUS,Carry GOTO main ; Aborte si es mayor BTFSS PORTA,IR ; siga contando hasta final pulso GOTO b2
movf dato_serie,w ; recupera el dato guardadomovwf PORTA ; exhibe el dato en LEDS en PORTA
btfss dato_serie,4 ; pero, como el PORTA tiene el bit 4 que es
bcf PORTB,4 ; open drain, nos conviene poner
btfsc dato_serie,4 ; el bit 4 del dato en otra salida;bsf PORTB,4 ; lo hacemos en el bit 4 del PORTB.
btfss dato_serie,5 ; y , como el PORTA tiene el bit 5 que esbcf PORTB,5 ; sólo usable como entrada, tenemos que ponerbtfsc dato_serie,5 ; el bit 5 del dato en alguna salida;
Se cumplió exitosamente con el propósito de esta practica, el único inconveniente que se
encontró fue con el programa en Visual c++ para poder recibir los datos vía serial, no se
pudo encontrar la variable en la cual se guardan los datos recibidos de la tarjeta
decodificadora, por lo tanto no se pudo manipular aplicaciones dentro de Windows con estatarjeta, lo que si se pudo es manipular un carrito a control remoto de RF pudiéndolo
controlar con las siguientes teclas coincidiendo con las flechas su movimiento.