ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA

CONTROL REMOTO PARA PC

Tesis previa a la obtención del Título de Ingeniero en Electrónica v Telecomunicaciones

JUAN MANUEL REAL PAREDES

Quito, agosto de 1999 DEDICATORIA

A Dios, Gracias por darme la preciosa familia que tengo. A mis queridos Padres, nada será suficiente para expresarles mi amor y gratitud. Ustedes día a día estimulan mi superación. Certifico que la presente tesis ha sido realizada en su totalidad por Sr. Juan Manuel Real P.

Ing. Alüánso Espinosa R. DIRECTOR DE TESIS AGRADECIMIENTO

Para la Escuela Politécnica Nacional dejo constancia de mi gratitud imperecedera, porque en sus aulas se forjaron mis ideales de lucha, superación y de (rabajo. Para el Ing. Alfonso Espinosa, director de ésta tesis un profundo agradecimiento por sus

N consejos y su apoyo siempre positivo; al igual que a todos los profesores de ésta universidad que me prestaron su valiosa colaboración tanto en mi formación, cuanto para llevar a feliz termino ésta tesis, síntesis de una constante investigación científica. También expreso mi gratitud a mis compañeros y amigos que siempre fueron solídanos a lo largo de mi vida estudiantil El autor CONTENIDO

INTRODUCCIÓN 1

L COMUNICACIONES INFRARROJAS DE BAJA VELOCIDAD 4

1.1 Lias comunicaciones ópticas 4 1.1.a El medio de propagación 5 l.l.b El espectro de luz y el espectro infrarrojo 6

1.2 Elementos del sistema de comunicación en controles remotos de baja velocidad 7 1.2.a Características de los emisores 8 1.2.b Características de los receptores 10

1.3 Controles remotos infrarrojos, 12

1.4 Estándares usados por controles remotos infrarrojos de baja velocidad 14 1.4.a Comparación entre los diferentes estándares 15 1.4.b Estándar RC5 16

II. SUBSISTEMA DEINTERFAZDE TECLADO DEL COMPUTADOR PERSONAL 21

2.1 El teclado 22 2.1.a Adquisición de las teclas pulsadas 22 2.1.b Codificación de las teclas 24

2.2 Interfaz del teclado 26 2.2.a Transmisión de los códigos 28

///. INTERFAZ DE RATÓN DEL COMPUTADOR 34

3.1 Mouse serial y Microsoft serial mouse 36

3.2 Sistema PS/2 mouse 39

IV. DISEÑO DEL EQUIPO 42

4.1 Diseño del control remoto de teclado 43 4.1.a Descripción del circuito de control 45 4.1.b Formato de trama usado 46 4.1.cMicrocontroJador y programa usado 50

4.2 Diseño del control remoto de ratón 63 4.2.a Descripción del circuito de control 63 4.2.b Programa usado 65 4.3 Diseño del receptor 70 4.3.a Recepción de tramas infrarrojas 70 4.3.b Simulación de la comunicación bidireccional con el ¡nterfaz de teclado 3' arranque 71 4.3.C Envío de datos al interfaz de ratón y arranque 72 4.3.d Encendido y apagado del equipo 73 4.3.e Circuito de control usado 75 4.3JT Programa usado 77

4.4 Consideraciones sobre alimentación y consumo de energía de los equipos

remotos 92

4.5 Tramas generadas en los equipos y alcance efectivo del sistema de control

remoto 94

4. 6 Construcción del equipo y costos 104

CONCLUSIONES Y RECOMENDACIONES 108

BIBLIOGRAFÍA 110

ANEXOS

A. Manual de usuario B. Códigos Phillips C. Códigos de rastreo para un teclado MFIE operando en el modo 2 D. Set de instrucciones del PIC 16f84 E. Programas usados F. Hoja de datos de Baterías Alcalinas AA INTRODUCCIÓN

La tecnología al servicio del hombre tiene entre sus misiones principales ayudarle a realizar sus tareas en forma más rápida, eficiente, fácil y cómoda, ofreciéndole todas las ayudas posibles. Se ha creado numerosos y complejos productos que requieren un proceso inteligente y funcionan en base a procesadores o microcontroladores, "no es aventurado pronosticar que en el siglo XXI

habrá pocos elementos que carezcan de un microcontrofador" 1. Esto ha facilitado que tengamos gran variedad de equipos controlados, mediante "controles remotos" que son hoy totalmente comunes y que están expandiendo su uso a más aplicaciones. Es también indudable que la presencia de computadores personales en hogares y oficinas, que duplican su capacidad a velocidades vertiginosas, facilita la extensa tarea en las diversas actividades que realiza el ser humano. Se ha introducido'tanto el uso de computadores, que los hay ahora en actividades en las que ni remotamente antes se hubiese pensado sería necesario ira computador. Su forma ha variado y seguirá evolucionando mucho más aún. Las tendencias actuales son facilitar el uso del mismo al máximo, hacerlo más amigable, para que más personas puedan manejar un computador, aprovechando todas sus facilidades y las autopistas de información a las que puede acceder. Al operar un computador es necesario tener los medios para introducir información en el mismo. El teclado y actualmente el ratón son por excelencia los mecanismos primarios para introducir información al computador, operarlo y hacer que éste siga su proceso y envíe posteriormente dicha información hacia un dispositivo de salida de información como el monitor, la impresora, etc. Por tanto, es necesario comprender el funcionamiento de estos elementos: ratón y teclado, para posteriormente crear un interfaz que permita operar estos dispositivos en forma remota. En cuanto al interfaz, el de mayor uso es uno de tipo inalámbrico, por la libertad y comodidad que brinda el operar cualquier equipo de esta manera. El alcance efectivo en distancia que se necesita para la operación de un computador es corto, en el orden de las unidades de metros. Lo más usado para sistemas de control remoto en cortas distancias son las comunicaciones ópticas, por ser un sistema económico del que se tiene mucha información, tiene bajo consumo de energía, es óptimo para usarse con pilas, un alcance de distancia efectivo apropiado para la aplicación y permite velocidades de transporte de información digital suficientes. Es además bastante inmune a interferencias y al ruido, y existe hardware estándar, ya que los controles remotos comerciales son hoy muy comunes.

1 Ángulo, 1997, pág. 1. La meta que persigue está tesis es precisamente facilitar el manejo del computador personal, convirtiéndolo en un equipo que pueda operarse de forma remota de manera natural, siendo transparente, incluso en su instalación a cualquier usuario. El equipo a diseñarse será un "Control Remoto de PC" y cumplirá con las siguientes características: Ser totalmente amigable, para que pueda ser usado por cualquier usuario. Ser manejado de forma remota desde su encendido hasta su apagado cerrando los programas de software apropiadamente. El control remoto debe tener una distancia razonable de operación (usando luz infrarroja). El equipo remoto será estándar, fácil de instalar y compatible con los sistemas de controles remotos universales. Permitir conectarse al Internet usando un módem telefónico. Tener dimensiones adecuadas para poder ser colocado en cualquier lugar cercano al computador. Aprovechar todas las facultades actuales del PC y del Internet

En la presente tesis se diseña un prototipo práctico, fácil de implementar y operar, que siga las tendencias actuales como son: el bajo consumo de energía, usar equipo con la máxima integración posible, y bajo costo. Se espera también colaborar con futuras tesis, pues las aplicaciones que pueden tener los sistemas de control remoto son infinitas y únicamente limitadas por la imaginación. Los tres primeros capítulos examinan todo lo necesario para comprender el funcionamiento normal de los sistemas de control remoto, el interfaz de teclado y el interfaz jde ratón. El cuarto capitulo explica el diseño del equipo. Finalmente, en la realización de esta tesis se ha buscado una relación entre el rendimiento técnico del equipo y su costo. Es misión de la Universidad colaborar con el país desarrollando equipos localmente; el Ecuador debe necesariamente realizar adaptaciones tecnológicas, usando equipo de punta, persiguiendo las tendencias y creando prototipos que se puedan implementar de acuerdo a nuestra realidad. Caminando con pasos pequeños pero seguros se puede llegar muy lejos; la meta del ingeniero es ser imaginativo en la creación de dispositivos que faciliten las labores cotidianas de todo ser humano. La presente tesis, espera fervorosamente cumplir estas expectativas. Adicionalmente, el equipo diseñado será utilizado, por una tesista en la Facultad de

Ingeniería de Sistemas, para la elaboración de un t£Navegador dedicado al Internet ". Este es un equipo de uso especifico, similar a un VHS operado por control remoto, permitirá al usuario conectarse al Internet mediante i:n módem, aprovechando todos sus recursos y usando un monitor de televisión común. Esto requerirá en esencia la creación de una plataforma de software especial, sumamente fácil de operar, que emplee un navegador de Internet comercial y un procesador con los puertos y dispositivos de entrada y salida necesarios. CAPITULO I. COMUNICACIONES INFRARROJAS DE BAJA VELOCIDAD

Desde hace aproximadamente dos décadas es común tener equipos domésticos muy comerciales, operados por control remoto. Este tipo de control facilita su operación, mejora la calidad del sistema y da mayor comodidad a su manejo. La presente tesis persigue implemento un sistema de control remoto con similares características, por esto el presente capitulo explica los conceptos básicos necesarios para poder diseñar un sistema de comunicaciones infrarrojas de baja velocidad.

1.1 LAS COMUNICACIONES ÓPTICAS

La comunicación es la transferencia de información desde un punto en espacio y tiempo a otro punto en espacio y tiempo. Todo sistema de comunicación comprende tres aspectos: Transmisión Recepción Procesamiento de la Información. La información puede ser analógica o digital. Esta información debe convertirse en una forma de energía electromagnética antes de poder propagarse en un sistema de comunicaciones. La Figura 1.1 representa una forma de comunicación unidireccional (comunicación simplex). Si la comunicación es en los dos sentidos se requiere duplicar los equipos a cada lado.

Sistema de comunicaciones unidireccional

Información de la Fuente Destino

Estación A Estación B

Medio de Transmisión

Fig, 1.1

En el caso de la comunicación óptica la información viajará en forma de una señal luminosa, a través del medio de comunicación. Todo medio de comunicación tiene efectos indeseables como la atenuación, interferencia y mido; por esto, muchos procesos de comunicación requieren algún tipo de modulación para facilitar la transmisión, reducir el ruido y la interferencia. La idea de transmitir información por medio de la luz es posible gracias a la producción de radiaciones electromagnéticas controladas en las longitudes de ondas del espectro visible, infrarrojo, ultravioleta, etc. La necesidad de nuevos planteamientos en comunicaciones de corta y larga distancia, con bajos niveles de energía y mayor capacidad, exige soluciones óptimas, ya que Jos radioenlaces requieren cada vez frecuencias más altas y se tiene el agravante de la saturación del espectro. En las comunicaciones de larga y mediana distancia en cambio la atenuación de la luz íue el problema principal, lo que ahora está completamente superado gracias a -medios de transmisión que guían la luz infrarroja por fibra óptica. Para muy cortas distancias, en las unidades de metros, el uso de radioenlaces significa desperdiciar una banda de frecuencia y crear fuentes abundantes de ruido e interferencia sobre otros sistemas en el mismo rango, o en rangos cercanos del espectro electromagnético. En este tipo de sistemas conviene transmitir la información por medios que tengan el alcance indispensable para la aplicación y no más, para así evitar crear interferencia sobre otros sistemas. La luz reúne estas propiedades y además tiene un consumo de energía mínimo. La luz tiene una longitud de onda muy reducida, por lo que se puede manejar con facilidad sistemas con técnicas de modulación en frecuencias muy altas, como las portadoras usadas en fibra óptica, pero también puede transmitir con facilidad transportar en frecuencias más bajas.

1.1. a El medio de propagación

Se podría decir que la comunicación implica un intercambio de energía, pero la información en su viaje pierde energía y diversos experimentos sobre transmisión de luz por la atmósfera han puesto de manifiesto diversos obstáculos(Rubios 1995, pag. 23): Escasa fíabilidad en comunicaciones de larga distancia por precipitaciones atmosféricas, contaminación, turbulencia, etc. Los valores de atenuación de las señales en la atmósfera húmeda oscilan entre 1 y 100 dB/Km, dependiendo de la frecuencia de la señal y el ambiente. Dificultad para atravesar objetos sólidos y, cuando choca contra estos puede existir reflexiones. Existen fuentes naturales que generan radiaciones infrarrojas; así, todo cuerpo que se calienta irradia ondas en esas longitudes de onda. Usando la atmósfera como medio de transmisión usualmente solo se puede tener enlaces rígidos entre equipos transmisores o receptores, con longitudes máximas de algunas decenas de metros. Estas dificultades no son necesariamente un problema para sistemas de comunicación y control que usan luz en el rango infrarrojo para comunicaciones en distancias cortas. Algunas de estas desventajas podrían verse como ventajas; de hecho, unas pocas áreas de aplicación para estos dispositivos comprenden la lectura de tarjetas y cintas perforadas, codificadores de ejes, sistemas de transmisión de datos y alarmas. En sistemas de control remoto es normal usar la luz infrarroja para transportar la información en distancias cortas, pues usan transmisión de datos a bajas velocidades y frecuencias relativamente bajas.

1.1. b El espectro de luz y el espectro infrarrojo

El espectro, está distribuido a nivel mundial por organismos reguladores como la CCIR, CCITT, y otros. La Figura 1.2, indica la distribución general del mismo:

DISTRIBUCIÓN DEL ESPECTRO Banda de Audio Banda de Radiofrecuencia

I

1 ¡u 69 •*— ' í O O CD _D C~ TO 00 (" S ^ C CJ tu '£ O X t i- Satelital "o^ -í? i S -O 5 o co CQ w i— o O O i f~\ 03 jo Radar 00 i— TO ^ ! "1 TV «^- o: ro o ~5 5p J ¡ S CK ro i cr Atvl Ffvl LJ

¡

FRECUENCIA ( Hz) Fí.q. 1.2 Una vista más cercana del espectro infrarrojo se aprecia en la Figura 1.3 (National Telecommunications and Information Ádministration"., 1996).

Detalle del espectro de luz :

.OOGhz 1013 Hz 1015 Hz

i i l INIMFI KAO rtH'Or"^! 1 o sub-rnilirnetrica ' £" M i i =J i i _l

T ' 300 0.72 0.4 Longitud de Onda ( (¿m)

Fig. 1.3 6 Las principales propiedades de los sistemas de comunicación por ondas infrarrojas son: Se usan ampliamente en comunicaciones de corta distancia, como controles remotos de TV, puertas electrónicas, redes LAN, computadores sin conexión física a la red, etc. Son direccionales, pero no atraviesan objetos sólidos. Esto puede verse como una ventaja desde el punto de vista de no-interferencia. - Existe gran cantidad de equipo, emisores y receptores baratos, fáciles de implementar. Tienen gran ancho de banda.

1.2 ELEMENTOS DEL. SISTEMA DE COMUNICACIÓN EN CONTROLES REMOTOS DE BAJA VELOCIDAD.

Un sistema de comunicación en controles remotos infrarrojos de baja velocidad es en la mayoría de casos unidireccional y se compone además de uno o varios emisores en un extremo, mientras que en el otro extremo existe un detector. El transmisor lo constituye un LED o convertidor electro-óptico (E/O); su misión es suministrar la onda portadora luminosa que transporta la información, previamente codificada y modulada, hacia el detector. La selección del emisor se hace en función de la potencia de salida y la velocidad de comunicación requerida. En forma paralela, en el otro extremo del sistema está el receptor, el cual es un dispositivo que realiza la operación inversa: convierte la energía luminosa en señales eléctricas aptas para ser procesadas. Este dispositivo es un fotodiodo, que es un convertidor optoeléctríco que recibe una señal debilitada por lo que es indispensable tener a continuación una sección de amplificación, para llevar la señal al nivel adecuado para su tratamiento por un host inteligente. La adecuación de la señal luminosa al medio de transmisión, que es el espacio, exige darle determinada forma, lo que se consigue mediante los llamados códigos de línea y el uso de subportadoras, siguiendo algún estándar existente. Ambos pasos permiten reducir el BER (bits error rate). Tanto el emisor como el receptor suelen consumir bajos niveles de potencia, por lo cual es usual su implementación en sistemas fáciles de transportar y manejados con baterías. 1.2.a Características de los emisores

Las fuentes emisoras de ondas infrarrojas usadas por controles remotos de baja velocidad son niayoritariamente diodos electroluminiscentes (LED). El espectro de emisión y las características típicas de mi LED infrarrojo de alta salida, usado en controles remotos de baja velocidad, se presenta a continuación: CARACTERÍSTICA LED Longitud de onda (nm) 940 Corriente de excitación (mA) 20-100 Potencia media de salida (mVY) 16 Voltaje reverso (V) 1.2 Temperatura máxima admisible 60° Máximo Ángulo para media Intensidad 45°

Vida media (horas) 107

El alcance efectivo de la señal infrarroja enviada depende en gran medida de la intensidad luminosa axial y el ángulo máximo para puntos de media intensidad. La Figura 1.4 derecha, revela que la intensidad es mayor a O grados (sobre la cabeza) y la mínima a 90 grados (cuando se mira el dispositivo por un lado).

Potencia relativa de salida Intensidad luminosa relativa vrs desplazamiento angular

100%

ÍQ"01i.t]

50%

40* $0!" SO* 100E

800 900 1000 Longitud de onda Fíg. 1.4 Para futuras referencias., es importante definir los siguientes ángulos (Especificación de control de la IrDA,1998, pag. 16) en la Figura 1.5:

Ángulo Horizontal $tti Ángulo Vertical -U Ángulo Horizontal (periférico^ ¡ft, ; Ángulo Vertical (periférica)

Ángulos entre host y periféricos

periférico

vista superior vista lateral

Fig. 1.5 1.2. b Características de los Receptores:

El receptor posee un detector (fotodiodo), el mismo que detecta la señal óptica procedente del emisor y la convierte en señal eléctrica como primera parte del proceso de recepción. A continuación la señal se regenera y adapta, El detector se limita a obtener una fotocorriente a partir de la luz modulada incidente, por lo que esta corriente será proporcional a la potencia recibida, y corresponderá a la forma de onda de la moduladora. Una vez detectada la portadora luminosa infrarroja y convertida en señal eléctrica, es necesario eliminar el ruido introducido sobre la misma en su viaje por el espacio. El ruido introducido por otras fuentes de luz puede deberse a causas naturales, como por ejemplo cuerpos calientes, o por otros equipos electrónicos como lamparas y distintos equipos de vídeo; también superficies reflectantes iibicadas cerca del emisor o detector infrarrojo deterioran tremendamente la forma original de la señal luminosa enviada. Los fotodiodos son un filtro óptico y son sensibles en recepción a longitudes de onda de luz correspondientes al rango de los infrarrojos, bloqueando la luz visible cuando se usan como detectores, para eliminar también el ruido introducido por otras fuentes de luz en el rango de los infrarrojos, se suele enviar la señal modulada con una sub-poríadora y así es posible diferir entre la señal y el ruido. Además se requiere un detector muy sensible que reconozca cuando comenzó la oscilación y también es necesario que exista un control automático de ganancia (ACG) para proteger al amplificador de saturación cuando el emisor está muy cerca o se encuentra a una distancia limite para la detección. Posteriormente la señal pasa a través de un filtro sintonizado a la frecuencia de sub- portadora y es amplificado, la señal amplificada es demodulada de forma similar a como se demodula mía señal AM en un radio receptor. Existen receptores integrados sensibles en el rango infrarrojo que tienen incluido un filtro pasabanda sintonizado a la frecuencia de 38 Khz, con control automático de ganancia (ACG), y que adapta la señal a niveles TTL. Esta clase de equipo es actualmente de uso comercial muy extendido.

10 El diagrama de bloques de un receptor usado en sistemas de control remoto de baja velocidad se muestra en la Figura 1.6 (Diagrama de bloques del receptor modular GP1U52X de Radio Shack).

Diagrama de bloques del receptor infarrojo GP1U52X

IHTEGÍ1ATGP. C AXíP

Fig. 1.6 Las "especificaciones del receptor GPlU52x son las siguientes: Voltaje de operación 5 voltios ± 0.5 (6.3 V rnax) Disipación de corriente 5mA Frecuencia central 40Kliz Filtro pasabanda de 3db ±4Khz Pasabanda infrarroja 940nm±50nm

Algunos emisores no modulan sus señales con sub-portadora, enviando pulsos sin modular, esto prolonga la vida de las baterías y reduce costos en el sistema. Existen detectores modulares para ambos formatos de envío de señal infrarroja. El elemento LT-1060 de LiteOn o el GP1U52X de Radio Shack son detectores completos, para convertir señales moduladas con sub-portadora de 40 khz a lógica TTL o CMOS. Quality Technologies produce el receptor para señal no modulada con sub-poríadora número: QSE157QT.

11 1.3 CONTROLES REMOTOS INFRARROJOS

Un sistema de control remoto posee al menos dos dispositivos (Figura 1.7) que permiten operar a distancia un equipo terminal, mediante la transferencia de comandos por algún medio de transmisión. Son ampliamente utilizados en comunicaciones de corta distancia, como por ejemplo controles remotos de TV, equipos de sonido, puertas electrónicas, etc. El equipo terminal es el que realiza las acciones que el operador remoto necesita, portante el medio de transmisión es usado por lo general de manera unidireccional. Para algunas aplicaciones, dada la gran cantidad de procesamiento que existe en los sistemas digitales, la tendencia actual es descargar cierta parte del procesamiento en el equipo remoto, requiriéndose por tanto que el medio sea bidireccional, para que el equipo remoto procese y reciba también cierta cantidad de información sobre el estado del equipo terminal. De lo anterior se deduce que se puede dividir al sistema en dos partes: Equipo remoto; y, Equipo terminal.

Componentes del sistema cíe control remoto

Equipo terminal Equipo remoto Fig. 1.7 Las características del equipo remoto de corta distancia, normalmente mencionado "control remoto", son las siguientes: Ligero, compacto y fácil de transportar. Bajo consumo de energía. Matriz de pulsantes. Sistema inteligente que procese y envíe la información. Emisor de señales. La matriz de pulsantes es similar a la matriz que se usa para los teclados. El sistema inteligente usualmente se diseña con un solo microcontrolador de uso especifico, el cual detecta el botón pulsado y lo asocia a-un comando, después genera una trama de bits que se transmite, debidamente codificada y modulada a través del emisor de señales. El equipo remoto realiza el procesamiento solo al detectar la presión de un botón; puede por tanto estar en reposo, operando con baterías con bajo consumo de energía, durante

12 prolongados periodos de tiempo. Puede enviar señales en cualquier instante; por tanto, el receptor en el equipo terminal siempre debe estar siempre esperando sus señales. El emisor es un convertidor electro-óptico de luz infrarroja, suele ser un diodo LED, de alto poder de radiación en el rango de la luz infrarroja. El equipo terminal se compone de: Receptor Host inteligente El receptor debe ser optimizado para bajo consumo de corriente, su función es la conversión opto-eléctrica hasta niveles de señal adecuados. El host inteligente debe procesar la información para a continuación efectuar alguna acción en el equipo que nos interesa controlar; debe controlar el acceso de múltiples servicios y, si es del caso, también seleccionar el puerto por el cual se envía la información. Pueden existir varios equipos remotos así como mío o varios equipos terminales. No es conveniente que varios periféricos actúen simultáneamente sobre el mismo host, (Figura 1.8) esto perjudicaría a ambas señales pues se interfieren mutuamente. Esta posibilidad se debe considerar ea el momento que el host procesa la información, con el fín de evitar errores y posibles comandos erróneos.

Múltiples periféricos sobre un host

periféricos

Fig.1.8 distancia de alcance

Los controles remotos infrarrojos de baja o alta velocidad, deben tener al menos 5 metros de alcance efectivo en línea de vista. El estándar de la IrDA, define distancias menores de 1.5 metros o hasta 20 cm en algunos equipos especiales operados por control remoto.

13 1.4 ESTÁNDARES USADOS POR CONTROLES: REMOTOS INFRARROJOS; DE BAJA VELOCIDAD

Todos los controles remotos que utilizan luz infrarroja para transmitir información usan similar tipo de codificación para enviar las señales. Existen al menos dos estándares internacionales bien establecidos que son usados por los controles remotos, para codificar los comandos: el RC5 yelRECSO La IrDA (Infrared Data Association) es la organización que intenta regular de manera oficial el formato de las comunicaciones infrarrojas para nuevas aplicaciones. Publicó su primer estándar para el control de acceso de "controles remotos" en junio de 1998, el protocolo que usa trata de evitar la interferencia mutua entre los controles remotos antiguos de baja velocidad, con los nuevos protocolos. Su reciente estándar: "IrDA Control Specifícation (Formerly IrBus)", completo y con correcciones se halla en la dirección Internet: http://www.irda.org/ Los controles remotos son producto del desarrollo de la era digital. Los diferentes estándares usan diferentes códigos de línea con el fin de adaptar la señal, logrando que esta sea más resistente a otras fuentes de ruido infrarrojo. En vez de introducir la señal codificada directamente en el transmisor infrarrojo, la mayoría de los controles remotos infrarrojos se comunican usando una sub-portadora que oscila entre 30 y 40 Khz. Algunos remotos infrarrojos no usan sub-portadora, ni modulan sus salidas y envían los pulsos sin modular. Esto extiende la vida de la batería en el control y reduce el costo del sistema de control remoto; pero los hace más susceptibles a recibir interferencia, diminuye la velocidad limite a la cual se pueden transmitir datos y reduce su alcance efectivo.

14 1.4.a Comparación entre los diferentes estándares

La siguiente tabla muestra las características de los estándares que más nos interesan:

Estándar Codificación Frecuencia de Velocidad de Tx y Sub-portadora forma de trama Usa modulación de ancho de pulso. Cada bit que es transmitido es Max 1 Kbps codificado por un nivel alto de duración 30-4QKhz T seguido por un nivel bajo de duración Duty Gycle 50% Tramas de 12,16,20, 48 o REC80 2T, representando un 0 lógico o 3T para más bits. representar un 1 lógico, existen sin embargo al menos tres variantes de Una trama lleva un este esquema. comando. Nótese que el 1 lógico toma más üempo para ser transmitido que el 0 lógico. Tiene una duración uniforme de todos los bus en su protocolo de capa física. Max 1 Kbps RC5 Una transición en la mitad de intervalo 36-3SKhz asignado a cada bu, codifica el valor Duty Gycle 50% Tramas de 14o 13 bits lógico. Un 0 lógico es codificado por una transición de alta a baja (flanco Una trama lleva un negativo) y el 1 lógico es codificado por comando. una transición de baja a alta (flanco positivo) Los datos transmitidos son codificados IrDA por un esquema 16-PSM (Pulse 75 Kbps Sequence Modulatlon), con duración 1.5Mhz Tramas complejas, varias uniforme de bits. Duty Cycle 50% tramas forman un comando.

El protocolo de la IrDA, usado en aplicaciones de mayor velocidad, es ciertamente mucho más complejo que los anteriores y su uso requiere de equipo modular más sofisticado y mayores exigencias del host inteligente. Estas razones, unidas a su reciente aparición no lo hacen el candil dato más adecuado. En el caso particular de está tesis no presenta la mejor relación rendimiento técnico vs costo. Los estándares de controles remotos de baja velocidad RECSO y RC5 tienen mucho tiempo de ser usados, el RECSO es más antiguo y ha sufrido muchas variaciones por los fabricantes de equipo electrónico. Su duración de bit no es uniforme. Para el desarrollo del "Control remoto de PC" se selecciona el estándar RC5. Su velocidad es adecuada en está aplicación y el equipo necesario para su implementación se puede conseguir localmente. El RC5 permite un mejor control de errores sobre los datos enviados, además la distribución de direcciones para equipos terminales y comandos en el

15 estándar RC5 tuvo mejor previsión y permite el desarrollo de prototipos experimentales de tal forma que no interfieran ni reciban interferencia de otros equipos que usan el mismo estándar. Existen otras clases de controles remotos que alternan los códigos entre transmisión. Se usan en aplicaciones que requieren mayor grado de seguridad contra violaciones del código, como puertas electrónicas y aparatos que operen con claves electrónicas.

1.4. & Estándar RC5

El código RC5 tiene una duración uniforme de todos los bits en su protocolo de capa física. Una transición en la mitad de intervalo asignado a cada bit, codifica el valor lógico (Figura 1.9), Un O lógico es codificado por una transición de alta a baja (flanco negativo) y el 1 lógico es codificado por una transición de baja a alta (flanco positivo). Se necesitan transiciones adicionales para las transiciones al inicio de cada bit para ubicar correctamente el inicio del mismo, en caso de que seríes iguales de bits sean enviadas, no se necesita una transición adicional si el siguiente bit tiene un valor diferente. Este código se llama también bifase y fue desarrollado inicialmente por Phillips.

Código bifase t -1. b'rt 2-bH. 4.bH.

T=1.778ms

T Fig.1.9

La duración del bit es constante e igual a 1.778 ms, es decir medio bit (un estado) dura 889 microsegundos. Esta señal no se introduce directamente en el transmisor infrarrojo, ya que se usa en principio una sub-portadora de 36 Kliz. Por tanto, un estado lógico de alta es representado por un tren de oscilaciones (Figura 1.10). El Duty Cycle inicial fue de 25 %. Cuando se envía una señal en alta, realmente se envían 32 períodos de sub-portadora = 889 microsegundos * 36 Khz.

16 Señal enviada en el formato RC5

-LbrL 2.brt S.biL I 4.brt I

6.944 microsegundos Duty Cycle 25 %

Frec= 36 Khz """^ 20.8332 microsegundos Fig.1.10 El código original desarrollado por Phillips, ha sufrido modificaciones menores por su propio creador y por otros fabricantes que han optado por este código. Se usan siempre bits de inicio. Estos bits se transmiten antes del código actual y se usan para activar al receptor y sincronizarlo, esto es necesario puesto que los receptores tienen un control automático de ganancia (AGC) que se debe ajustar al inicio de la transmisión. La onda cuadrada de 36Khz, es controlada por una señal lógica no mayor a 1 Kbps y la señal resultante es enviada por uno o mas emisores LED infrarrojos hacia el receptor. La cabecera y el código son transmitidos mientras se tiene pulsado un botón, con un intervalo de repetición de 64 períodos de bit (113.778 ms).

Formato de trama enviada: Para el control lógico del enlace, se genera una trama compuesta por 14 bits. La trama original de Phillips se indica a continuación: Bits de inicio (I), - Bit de Control (T), Bits de Dirección (D), y; Bíts de Comando (C).

I I T D D D D D C C C C C C 1,. 1,. X X X X X X X X X X X X msb Isí)

Debido a las variaciones que ha sufrido la trama, actualmente en algunas referencias se le conoce como trama normal.

17 La trama completa usa 14 bits, y dura 24,889 ms. Los bits de inicio ajustan el control automático de ganancia del receptor. Se usan dos bits, ambos bits de inicio son 1 lógicos. El bit de control (T=toggle) alterna su estado lógico, siempre que existe una nueva pulsación sobre un botón del control remoto. Los bits de dirección especifican un equipo terminal y permiten diferenciar entre distintos equipos del mismo fabricante; por ejemplo, un televisor y un VHS del mismo fabricante tienen el mismo comando para encendido pero diferente dirección, así se previene interferencias entre equipos. Se usan 5 bits en el campo de dirección y permiten operar hasta 25—32 diferentes equipos. Los bits de comando, forman un código que indica al equipo terminal la acción que debe ejecutar. Esta trama usa 6 bits en 'el campo de bits de comando, en consecuencia se pueden transmitir hasta 64 diferentes comandos. Un punto muy importante a destacar en este protocolo es que los comandos mantienen su valor en todos los equipos, pero solo procesa el comando el equipo con la dirección correcta. Por ejemplo, el comando Master Volume es siempre equivalente al código decimal 16. Usada esta información en forma adecuada, cualquier control remoto que implementa el estándar RC5 puede ser usado para otras funciones distintas a las que fue creado. Las variaciones del estándar RC5 mantienen el valor de los comandos. Una segunda observación importante es que este protocolo desde su creación dejó 2 de las 32 direcciones que puede manejar para desarrollos experimentales con este protocolo. Aspecto importante para no generar y recibir interferencia en el desarrollo de nuevos equipos. Finalmente, la información proporcionada por la propia Phillips es más fácil de conseguir, permitiendo desarrollar nuevos equipos que operen por control remoto; esto ha evitado que se altere drásticamente el protocolo. Se presentan algunas direcciones y comandos importantes:

Dirección del Sistema Equipo (decimal) 0 Televisor 2 Teietexto 5 Grabadora de Vídeo (VHS) 7 Experimental 16 Pre-amplificador 17 Radio 18 Reproductor de cintas de audio 19 Experimental

18 Código de comando (decimal) Función 0-9 0....9 (seleccionar canal) 12 Stand by 16 MasterVo!ume + 17 Master Volume - 18 Brillo + 19 Brillo - 50 Retorno rápido de cinta 52 Avance Rápido de cinta 53 Play 54 Stop 55 Grabar

La Phillips introdujo posteriormente tres variaciones a su protocolo. La primera variación se llama trama "extendida" del estándar RC5, y se compone de: Bits de inicio (I), - Bit de Control (T), Bits de Dirección (D), y; Bits de Comando (C).

I C T D D D D D C C C C C C IL X X X X X X X X X X X X X nisb Ish

Básicamente la variación en esta trama está en el segundo bit, que ya no se usa como bit de inicio sino más bien como séptimo bit de comandos; así se piieden enviar hasta 128 comandos. La trama completa sigue usando 14 bits y dura 24.889 ms. La segunda variación del estándar RC5 elimina el bit de control T obteniendo una trama que dura 23.11 ms y es de solo 13 bits como se indica a continuación:

I I D D D D D C C C C C C 1L 1L X X X X X X X X X X X nisb Isb

19 La tercera variación del estándar RC5 elimina el segundo bit de inicio, aumentando el número de comandos que se pueden enviar. Se obtiene una traína de solo 13 bits, que dura 23.11 rns como se indica a continuación:

I C D D D D D C C C C C C IL X X X X X X X X X X X X msb Isb

La tendencia actual es tener mayor longitud de la trama, aumentando el número de bits para poder tener mayor número de comandos, principalmente por el aumento de la automatización de los procesos que pueden operarse en forma remota en todos los equipos de uso cotidiano. Este estándar alcanza distancias mínimas efectivas en sus controles remotos de al menos 5 metros en línea de vista. Entre los fabricantes que usan el estándar RC5 en algunos de sus equipos tenemos a Phillips, Pioneer, Canon, Curtís Mathis, Daewoo, General Electric, Instant Replay, Je Penney, Magnavox, Memorex, Olympic, Panasonic, RCA/PROSCAN y Sylvania. En el diseño del "Control remoto para PC" se usa la trama normal, pues al tener 2 bits de inicio se sincroniza de mejor forma el receptor y disminuye el número de tramas perdidas. Para tener mas información sobre el estándar RC5 se recomienda revisar el Anexo B y visitar las paginas en Internet: hrtp://www.kouvola.ksaok.fí/—aylatalo/IR/ y hr^://godot.tm:iv.szczecin.pl/~mjaskula/tomi/opto.html

20 CAPITULO II II. SUBSISTEMA DE INTERFAZ DE TECLADO DEL COMPUTADOR PERSONAL

Desde la aparición comercial de los computadores personales el teclado fue la entrada de datos primaria hacia el procesador del computador; sin embargo, en anos recientes los ingenieros han trabajado con el hardware del PC diseñando equipos periféricos que puedan reemplazar sus funciones y coexistir con el teclado. El presente capítulo analiza el funcionamiento de un subsistema del computador personal: el interfaz de teclado. Este análisis nos permitirá comprender su funcionamiento y posteriormente llevar a cabo el propósito de diseñar un nuevo interfaz infrarrojo que coexista con el interfaz estándar actual. Desde su creación, por parte de IBM, esta plataforma ha soportado tres tipos de teclados. El teclado XT, el teclado AT y los teclados de Multiftmción H Las primeras plataformas de PC, como el IBM XT., soportaban el teclado XT. Sin embargo, ya no son más compatibles con las nuevas como la AT y PS/2. Con el advenimiento de la plataforma ÁT se diseñó un nuevo teclado para soportarla; su diseño dio más control al computador sobre la operación del teclado que el que se tenía con su predecesor XT. El teclado AT se usa también en la plataforma PS/2; sin embargo, los dos teclados usan diferente conector físico y set de códigos. La tercera clase de teclados, el Multiñmción II (MF U), fue desarrollado a partir del teclado AT. El MF U tiene mejoras, su set es el estándar más usado en los sistemas de PC hoy día. El MF TI usa el mismo interfaz que el AT, pero tienen gran número de mejoras como los LEDs de estado y 18 o 19 teclas adicionales. Es común encontrarlo a nivel mundial en su versión de 101 teclas en la versión U.S. o 102 teclas en la versión Europea, Plataformas de software corno Windows, incluyen nuevas teclas, con nuevas funciones, automatizando más el manejo del PC. Por ejemplo, los teclados de uso especial de la plataforma Windows 98 poseen 107 teclas. Las nuevas funciones, permiten poner en reposo al computador, consumiendo solo el 50% de energía y apagando el monitor.

Pueden identificarse dos partes que constituyen el subsistema: 1. El teclado, 2. Interfaz de teclado o puerto, propiamente dicho.

21 2.1 EL TECLADO

Se utiliza para dar comandos y controlar la operación del PC. Consiste de una serie de interruptores activados por teclas, ubicados en un arreglo matricial para disminuir el número de líneas necesarias. Los nuevos teclados tienen teclas que actúan sobre membranas táctiles para darle más suavidad a su manejo. El teclado realiza las siguientes funciones: Adquirir las teclas oprimidas en la matriz, Codificar éstas en "códigos de rastreo", Transmitir los códigos, a través del cable, al interfaz de teclado en el computador; y, Recibir los códigos enviados por el computador.

2.1.a Adquisición de las teclas pulsadas

Inicialmente los teclados disponían del hardware necesario para detectar la presión de una tecla, y mantener este dato hasta que una nueva tecla sea pulsada. Circuitos integrados como el Intel 8279 realizaban estas funciones. El circuito lee secuencialmente la matriz del teclado y cuando identifica una tecla pulsada genera una salida binaria de 8 bits, la que contiene información con respecto a cuál de las teclas flie presionada. La forma más sencilla para decodificar la pulsación de una tecla por hardware es usar un guipo de multíplexers y demultiplexers trabajando en armonía. Siempre debe haber una exploración constante de las líneas para determinar cuándo y cuál tecla se presiona; y, para eliminar los rebotes se genera un retardo cuando se detecta una tecla presionada; el retardo deber ser un poco más largo de lo que se calcula dura cualquier rebote. Este esquema básico no es adecuado, la mayor parte del problema ahora es resuelto por un solo circuito integrado. Los mayores problemas asociados a los teclados son dos: Múltiples presiones de teclas al mismo tiempo, en cuyo caso la solución es aceptar la primera o la última tecla presionada, o ignorar a todas las teclas pulsadas a la vez. Los rebotes producidos por los contactos mecánicos de las teclas de duración considerable en sistemas electrónicos y que podrían simular varias presiones de la misma tecla, cuando ha sido presionada una sola vez. Para solucionar este problema se necesitan generar ciertos retardos para estabilizar el sistema y se recomienda que sean de al menos 20 ms. Finalmente, algunas aplicaciones requieren determinar combinaciones especiales de teclas.

22 Ü Para resolver estos problemas e implementar nuevas funciones, se diseño el teclado AT con un microcontrolador (MCU). Los teclados XT se implementaron con el microcontrolador Litel 8048 y los teclados AT y MFH se han diseñado con variedad de niicrocontroladores. El teclado matricial de 16 teclas (Ángulo, 1997, pag 68) de la Figura 2.1, usa ocho líneas de un microcontrolador P1Q para su gestión. Las cuatro líneas de menos peso (RBO-RB3) actúan como salidas, y aplican un estado lógico a las cuatro columnas del teclado. En cambio las cuatro líneas de más peso(RB4-KB7) están configuradas como entradas y reciben los niveles lógicos sobre las filas del teclado. Mediante software, secuencialmente se pone a cero lógico una de las salidas, que se aplica a las columnas, y se lee el nivel lógico en las entradas (filas). Si ninguna tecla en esa columna esta pulsada, se debe leer un estado de alta en todas las entradas, y se pasa a activar la siguiente columna, en caso contrario, mía lectura de O lógico en cualquier entrada indica la pulsación de una tecla en la columna activada y fila correspondiente a la entrada en cero lógico. Así se determina la tecla pulsada. A cada tecla se le asigna un código que corresponde al valor actual de los pines que trabajan como filas y columnas. El programa que opera el microcontrolador se encarga de explorar continuamente la matriz de teclado; pero también es el llamado a eliminar los rebotes, detectar presiones simultaneas de varias teclas, trasmitir los códigos, repetir los códigos sí continua presionada una tecla, etc.

Matriz de teclado

RB%

• Vcc X2 Xü

> g_fl 0 RB4j 1 f

• Vcc xs xa X? xa 1 RB^ i F" "~ • VCC X9 X10 X1 1 X12

RB6 f r "~ r"1"0- r"1""- X1S .Vcc X1° xu X1Q

>1CC- -í „— o o RB7 r' r L r r Fig. 2.1 2.1.& Codificación de las teclas

Durante la operación normal el microcontrolador del teclado continuamente verifica el estado de su matriz de teclas esperando por un evento como el presionar o soltar una tecla por parte del usuario. Cuando un evento ocurre, el microcontrolador descifra qué tecla fue pulsada, determina su posición dentro de la matriz y le asigna un único byte o secuencia de bytes llamada "Código de rastreo" mediante una tabla interna. El teclado entonces intenta transmitir el código de rastreo al interfaz de teclado. Cuando se oprime una tecla, el teclado envía un "código de rastreo" de presión y cuando se libera la tecla, se envía un código de liberación de la tecla, otro "código de rastreo". Si se oprime una tecla y luego otra es pulsada, el computador recibe el código de rastreo de presión de la primera tecla oprimida, a continuación el código de rastreo de la segunda tecla, primero su código de presión y después el código de liberalización de la tecla pulsada. Finalmente el código de rastreo de liberación de la primera tecla oprimida, de está forma el computador puede manejar las teclas SHIFT, ALT y Control. Los códigos que asigna el teclado no son similares a los AS Cu o algún otro set similar de códigos usados comúnmente en otros procesos en los computadores. Los códigos de rastreo son convertidos a códigos más comunes en un procesamiento interno del computador, después de haber pasado el procesamiento del interfaz de teclado. Un típico teclado AT es como el de la Figura 2.2, en el que se presentan también los códigos de rastreo de cada tecla en hexadecimal:

Teclado AT

'ESCl f Fl V F2UF3 V F4 ^ (JT) (TíTi fFsTi fpw] fFTn f¥u] L7B US Jl 06 II 04 Jl 00, OA ^01 J (^09) ^78 J [_ 07 J

F¡g. 2.2

Los teclados AT y MFII difieren únicamente en el superior número de teclas del MFU, problema resuelto por el MCU en. el teclado.

24 Por ejemplo en la plataforma AT, la tecla 'A1 tiene el código de rastreo 41C'

(hexadecimal). Cuando se presiona la tecla £A3, el teclado envía £1CJ a través del interfaz del teclado y si se mantiene presionada la tecla CA' suficiente tiempo, otro C1C' es enviado. Esto sigue ocurriendo hasta que otra tecla se presiona o la tecla t AJ se suelta. Al liberarse la tecla 'A', se envía el código de rastreo de liberación TO^exadecimal), para indicar que se soltó una tecla, y a continuación se envía el código de la tecla liberada que en este ejemplo es C1C5. El có.digo de cada tecla no cambia, aunque se presionen teclas como SHIFT, o ALT, etc; es el BIOS del computador quien determina las acciones necesarias. El teclado no procesa las teclas de Mayúsculas (CAPS), Bloque Numérico (NUM Lock) y Bloque de desplazamiento (Scroll Lock); cuando alguna de estas teclas se presiona se envía el código de rastreo correspondiente, entonces el BIOS del computador retorna un comando al teclado para encender el LED correspondiente. Esta es una de las razones de la comunicación bidireccional entre teclado e interfaz de teclado. El teclado XT tuvo solamente 83 teclas como consecuencia de una mala previsión; ésto provocó que el teclado numérico realizara dos acciones. Así los números compartían teclas de inicio, fín, flechas, Lis, Supr, RePág} etc, con la tecla Bloque Numérico para conmutar entre ellas (Abel, 1996, pag. 183). Para resolver este problema introdujeron el teclado extendido (AT), con 101 teclas; de las 18 teclas nuevas, solo dos, FU y F12, proporcionan una función nueva; el resto duplican la función de teclas en el teclado original. Plataformas de software recientes han aumentado el numero de teclas por supuesto usando teclados MFH. El teclado extendido y el numérico se presentan a continuación en la Figura 2.3:

Teclado Extendido

E012E07C El 1477E1F014F077

[¿rJUEjuWI

f Ins } ÍHome] ÍPUpl IE070J lEOecI l_E07Dj

Del End P Dn IE07-1J [E069J 1E07AJ

EOBBj IE072J IE074.

Fig. 2.3

Entonces, si bien existen actualmente al menos 101 teclas codificadas con 8 bits, esto hace posible 256 diferentes combinaciones, pero desafortunadamente el teclado extendido (AT) codifica algunas de sus teclas con dos códigos de rastreo, estas teclas son precedidas por EO

25 (hexadecimal). Inclusive algunas teclas como Pausa tienen 5 códigos de rastreo: #E1 #14 #77 #E1 #FO #14 #77, que representan una sola pulsación de la tecla. Imprimir Pantalla (Print Screen) tiene 4 códigos de rastreo para su presión y 5 para su liberación. Cuando una tecla en el teclado extendido se libera no se envía primero FO, como se esperaría, sino que se envía primero EO, después FO y finalmente el código de rastreo de la tecla liberada en esta sección del teclado. Por todas estas razones actualmente la mayoría de teclados comerciales soportan tres modos de operación y la elección de cualquier modo depende de la asignación de códigos de rastreo que se desea. Algunos teclados tienen un interruptor en su parte inferior para conmutar su modo de operación. En el modo 1 el teclado genera los códigos de rastreo de la plataforma XT. En el modo 2 trabaja añadiendo el prefijo EO en las teclas extendidas, y el prefijo FO se añade cuando se libera una tecla. En el modo 3 cada tecla tiene un único código de rastreo y cuando se libera una tecla se añade el prefijo FO. En el Anexo C se presenta los Códigos de rastreo estándar para un teclado MF u trabajando en el modo 2.

2,2 INTERFAZ DEL TECLADO

El segundo componente de este subsistema une el teclado al computador. El interfaz tiene esencialmente 5 funciones: Alimentar de energía eléctrica al teclado. Transmitir los comandos del computador al teclado. Recibir las respuestas a los comandos del computador. Recibir los códigos de rastreo del teclado. Proveer un interfaz al sistema de bus de datos del computador.

Todas estas funciones están integradas en un solo chip, que sirve como controlador del interfaz. Los primeros teclados AT, fueron diseñados con el Microcontrolador Intel 8042, en los nuevos AT, y PS/2, el Intel 8741 y el Intel 8742 son comúnmente usados.

26 El interfaz de teclado es de tipo serial, puede dividirse en dos partes (Motorola, 1995, pag. 7) como muestra la Figura 2.4: 1. Enlace de comunicaciones del teclado 2. Interfaz al sistema de bus del PC.

Interfaz de Teclado

r n KEYBOARD CONTROLLER p I I OXGOWRTTE I ttiPUT r ~ ~c- - I c 1 * BUFFEft I K o ¡

1 I £ M s 1 I I y M 0X60 READ [ OUÍPÜT y I B u t ¡ BUFFER * i I TO KEYBOARD s lo"' 1 T I A I N 1 | R C K I E, COfJTROL CXSiWíílTE [ I REGÍSTER U I 0 * I T I I ' I B 1 I OXe^READ | STATUS í ° U I RE&STER | 1 I N S s 1 KM2Jfl74líB742 WCROCOWTROLLER I i p Fig. 2.4

El enlace de comunicaciones no solo recibe y transmite datos del teclado, sino que también chequea errores y controla el flujo de los datos del teclado al computador. El interfaz al bus de datos del PC es un punto en el cual el PC interactúa con el teclado. El computador configura y monitorea el teclado mediante el interfaz, enviando comandos directamente al teclado o escribiendo comandos en el controlador del control de el interfaz. El interfaz de teclado consiste en un buffet de entrada, un buffer de salida y un controlador de teclado con registros de control y estado. Los registros de entrada y salida están en las direcciones 0x60 en el espacio del PC para entrada/salida(I/0). El buffer de entrada es accedido escribiendo en la dirección 0x60 mientras la lectura de la dirección 0x60 accede al buffer de salida. El computador lee la respuesta del teclado a comandos y los códigos de rastreo del buffer de salida. Los registros de control y estado del control del teclado están ubicados en la dirección 0x64 del PC, espacio asignado de entradas y salidas (I/O). El registro de estado del teclado se accesa en la lectura de la dirección 0x64, mientras que se accesa al registro de control en su escritura. El computador, envía los comandos al teclado escribiendo en el registro de control. Para los comandos de control, en que se requiere datos en adición al byte de comando, el computador escribe los datos requeridos en el bufifer de entrada. El computador

27 monitorea el interfaz de teclado, transmisión y recepción de datos mediante la lectura del registro de control de estado. Al recibir un código de rastreo valido, la circuitería del interfaz de teclado genera una interrupción al procesador del computador, el cual da atención a la rutina de interrupción, que reside en el ROM BIOS del sistema; la rutina del BIOS lee el código de rastreo y lo compara con una tabla de códigos de rastreo para el carácter ASCII asociado. Tanto el ASCH como el código de rastreo original, van a un buffer hasta que el programa en uso solicite su entrada. El interfaz de teclado recibe cada código de rastreo y, después de chequear la paridad de la transmisión, puede pedir retransmisión en caso de falla o pasa el código de rastreo al procesador del PC. Si el procesador está ocupado cuando el código de rastreo es generado, el interfaz de teclado señala al teclado que el procesador está ocupado, entonces el teclado retiene la transmisión de más códigos de rastreo hasta que el interfaz señale que el procesador puede atenderlos. Mientras el procesador está ocupado, códigos de rastreo adicionales pueden ser generados si el usuario continuo oprimiendo teclas y estos son guardados en un buffer interno del teclado. El BIOS tiene registros de estado especiales, para dar un tratamiento diferente a las teclas ALT, SHEFT y CTRL, que funcionan en conjunción con otras teclas, actualizando siempre su estado. El BIOS no las envía como caracteres ASCII hacia el programa usado.

2.2.a Transmisión de los códigos

El teclado y el interfaz de teclado están físicamente conectados mediante el cable de teclado, éste cable está alambrado con 5 conductores que tienen 5 o 6 pines en un DIN circular, al final de un extremo, el otro final del cable está directamente conectado a la circuiteria interna del teclado. Existen dos clases de conectores en uso: el mini - DIN de 6 pines que usa el estándar PS/2 (Figura 2.5), y; el circular de 5 pines (Figura 2.6)usado en la plataforma AT.

Conectar PS/2

clock /' B ^ \C ground VC

data , A A / NC

Fig. 2.5 28 TECLADO AT

(Hacia el Computador)

5 PUSTDIN 180° (DIN41524) hembra en el computador.

Pin; HOMBRE Í DESCRIPCIÓN INFORMACIÓN :

í1 : CLK ! Glock CLK/CTS, Open-collector ¡ 2 i DATA ; Data ¡RxD/TxD/KTS, Open-collector j llJ n/c i[Sin conexión [Reset en algunos teclados muy viejos. j 4 í GMD j Tierra 5 i VCC j +5VDC Fuente de alimentación 1

Fig. 2.6

Como se muestra en las figuras, cada conector tiene un pin VCC de 5 voltios y uno de tierra, el interfaz de teclado alimenta al teclado por estos dos pines. La cantidad de energía que el interfaz de teclado es capaz de entregar puede variar de un productor de PCs a otros. Algunas motherboard se diseñan con fusibles en el interfaz de teclado para prevenir un mal funcionamiento que afecte la fuente del PC. La mayoría de teclados antiguos están diseñados para consumir un máximo de 300 a 350 mA, lo que debe ser considerado al momento de dar energía a este servicio. El teclado y el interfaz de teclado se comunican por medio de los 2 restantes pines, el pin de reloj (CLK) y el pin de datos (DATA) usando un enlace serial sincrónico. Los pines de CLK y DATA son bidireccionales de colector abierto que se colocan a 5 V mediante resistencias de pull-up, lo cual permite que estas líneas puedan ser puestas en baja por el teclado o por el interfaz en cualquier instante. La línea de datos actúa en transmisión (TX), recepción (R5Q y como señal RTS (ready to send). La línea de reloj actúa también como señal de CTS (Clearto send). El primerteclado diseñado por IBM, el XT solo usaba comunicación unidireccional de los códigos de rastreo del teclado al computador. El computador tenía control mínimo sobre el teclado ya que solo una señal de reset era parte del interfaz del teclado. Las mejoras en los teclados AT y MF u requieren que el computador tenga control sobre la configuración y operación del teclado. Los LEDs que tienen hicieron necesario rediseñar el interfaz de teclado y el diseño de un protocolo que gobierne el enlace computador teclado.

29 El protocolo define formatos y un set de especificaciones diferentes para las señales de reloj y datos en la transferencia del teclado al computador y otro para la transferencia de datos del computador al teclado; además, el protocolo define un set de comandos que el computador envía al teclado para monitorear su estado o cambiar su configuración. El set de comandos permite inicializar, activar o inhabilitar el teclado. El protocolo también define un set de códigos que el teclado puede transmitir al computador en repuesta a sus comandos y da prioridad a la comunicación del computador al teclado; entonces, si el teclado está en proceso de transmitir datos o responder a un comando y el computador quiere enviar comandos, el teclado pierde el control de la línea de datos y reloj; en este momento el computador envía el comando, después el teclado responde al reciente comando, y finalmente el teclado retransmite el dato que enviaba antes de ser interrumpido por el computador. La transferencia de códigos y datos entre computador y teclado son similares y tienen el siguiente formato: un bit de inicio, 8 bits de datos, un bit de paridad y un bit de parada. Normalmente las líneas de datos y de reloj están en alta. La Figura 2.7 ilustra el protocolo del computador al teclado usado para enviar comandos al teclado.

TRANSFERENCIA DE DATOS DEL PC AL TECLADO

/ DATAD X, \-

35 us in

•?[] 125 .us ^ 50 Ms k Fíg. 2.7 La transferencia de datos del computador al teclado se lleva a cabo siguiendo los siguientes pasos: 1. El computador inicia la transferencia colocando la línea de reloj (CLK) en baja. Aproximadamente 35 ¡oseg después el computador pone la línea de datos en baja. Esta secuencia de eventos señala al teclado que el computador va a transmitir un comando. La señal de reloj es puesta en alta por el teclado aproximadamente 125 ¡aseg después del flanco negativo de la señal de datos. 2. La transferencia de datos comienza aproximadamente 1 milisegundo después del flanco positivo de la señal de reloj y durante este tiempo la línea de datos se mantiene en baja, la transferencia entonces empieza cuando el teclado pone la línea de reloj en baja manteniendo la línea de datos en baja. Esto sirve como el bit de inicio de transferencia.

30 3. El reloj del teclado sincroniza los 8 datos del computador; el reloj tiene un duty cycle de 50% y tiene un tiempo entre baja y alta entre 30 y 50 u,seg y el computador cambia de datos durante el período bajo de cada ciclo. Los datos del computador son tomados por el teclado entre 5 y 25 [iseg después del flanco positivo del reloj. 4. Los bits de datos son seguidos del bit de paridad. El protocolo usa paridad impar. 5. El teclado sincroniza el bit de parada y termina la transferencia. 6. Si el teclado lee el bit de parada en alta, pone la línea de datos en baja en el siguiente período de baja después del flanco negativo del reloj que es usado para el bit de parada. Esto sirve al computador como señal de ACK (acknowledgement) por parte del teclado. El teclado pone la línea de datos en alta después de que el reloj esta en alta. 7. Después de recibir un byte, el teclado chequea la paridad del dato recibido, sí existe error el dato no es valido y el teclado pide retransmisión del byte enviando #FE al computador.

El protocolo del teclado al computador es usado para enviar respuestas y códigos de rastreo al computador como se ilustra la Figura 2.8.

TRANSFERENCIA DELTECLADO AL PC

DATA

_^_^

CLOGK

.)W-3v JJ.5

La transferencia se realiza siguiendo estos pasos: 1. El teclado inicia la transferencia al computador verificando que la línea de reloj y datos están en alta. El teclado pone después la línea de datos en baja. Entre 5 a 25 jiseg después el teclado pone la línea de reloj en baja. El naneo negativo de la línea de reloj regula la transferencia del bit de inicio. 2. El teclado regula la señal de reloj para transmitir sus 8 bits al computador. El reloj tiene un Duty cycle de 50% y los tiempos de baja y alta están entre 30 y 50 useg. El teclado cambia los datos durante el período de alta de cada ciclo del reloj, el cambio puede ocurrir entre 5 j-iseg después del flanco positivo del reloj y 5 (iseg antes del flanco negativo, los datos del teclado entran al lacth del computador en el flanco negativo del reloj.

31 3. Los bits de datos son seguidos del bit de paridad, nótese que el bit menos significativo es el primero en transmitirse. 4. El teclado entonces sincroniza el bit de parada terminando la transferencia y el computador entonces pone la señal de reloj en baja de O a 50 |¿seg después del flanco negativo del reloj que se da en el bit de parada, ésta es una señal para el teclado de que el host está ocupado y no es capaz de recibir otra transferencia del teclado, entonces el computador deja la línea del reloj después de haber procesado la transferencia y está listo para aceptar otra transmisión. 5. En cualquier momento durante la transmisión del teclado al computador, este ultimo puede interrumpir la transferencia y transmitir un comando al teclado. El computador señala su intención colocando la línea de datos en baja cuando está eu alta, o poniendo la línea del reloj en baja durante el periodo de alta de su señal. Entonces el teclado debe dejar la línea de datos mientras el reloj está en su periodo de baja aunque tenga un bit en alta eu la línea de datos. El teclado siempre da la señal de reloj, pero debe además leer esta línea cuando su salida esté en el flanco positivo del reloj; si la señal de datos o reloj están en baja por una de estas dos condiciones el teclado debe dejar el control de las líneas. Esto lo logra dejándolas en alta para permitir el modo de transmisión del computador al teclado. La paridad es necesaria porque pese a ser un cable de no más de metro y medio, pueden ocurrir colisiones si las líneas son tomadas arbitrariamente en un mal momento por el computador., o no se detectó por cualquiera de las dos partes el intento por ganar el medio de enlace. La paridad provee el medio para detectar estas colisiones. Los siguientes son los comandos que envía el Computador al teclado:

COMANDO FUNCIÓN ED Enciende un led según el byíe Bit 0 es para la tecla Scroll lock Bit 1 es para la tecla Num lock Bit 2 es para la tecla Caps lock (el resto de bits no sirven) EE Echo, al enviarlo se recibe EE también FO Selección del modo de operación 1, 2 o 3 F2 Enviar el I. D. del teclado F3 Pone el tiempo de repetición y velocidad El byte es: Oddbbaaa tiempo de repetición es (dd+1)*250 miliseg la velocidad es (8+aaa)*2Abb*4 miliseg F4 Borrar el buffer de salida F5 Reset del teclado a su estado por defecto, este retorna un ACK y lo deshabilita. F6 Reset del teclado a su estado por defecto FA Acknowledge FE Error- pide retransmisión FF Reset del teclado

32 Las siguientes son las respuestas del teclado al computador, los códigos de rastreo de las teclas están en el Anexo C.

COMANDO FUNCIÓN 00 Error o sobrecarga del Buffer AA Test de encendido correcto FO Código de liberación de una tecla FA Acknowledge del último comando FD Error en el test FC Error en el test FE Retransmisión del último comando EE Respuesta al comando EE EO Teclas extendidas en modo 2

Es el computador quien ordena encender los LEDs en el teclado; por ejemplo, si se oprime la tecla MAYÚSCULAS, el computador devuelve el comando ED, el teclado responde FA y espera por un byte proveniente del computador que le indica el estado en que debe colocar los LEDs de señalización en el teclado. Cuando el computador envía el comando FO, el teclado responde con FA y espera por otro byte que le indica en que modo operar. Si recibe el byte 00, entonces el teclado devuelve el modo en que está operando.

El teclado responde a un comando del computador en la mayoría de casos con FAS o FE en caso de error. Al polarizar el teclado este tiene un reset y envía el comando AA hacia el computador ó FD en caso de falla. Al encender el computador el BIOS detecta la presencia del teclado, porque el teclado envía AA en su primer reset con la paridad incorrecta. Entonces el computador pide retransmisión mediante el envío del comando FE, para así indicar que existe un error de paridad, en este momento el teclado envía el comando FA seguido de AA con la paridad correcta. Si el BIOS detecta todos estos eventos, el sistema arranca normalmente con el teclado detectado. CAPITULO III III. INTERFAZ DE RATÓN DEL COMPUTADOR.

La mayoría de programas necesitan o aceptan entradas desde un teclado, disco o ratón. El ratón es un componente básico para el manejo del computador personal y existen varios tipos de ratón: ópticos, opto-mecánicos, de proximidad, etc. Este capitulo explica el funcionamiento del interfaz de ratón del computador. Un típico sistema de control de ratón tiene las siguientes partes: Sensores, Controlador de ratón, Enlace de comunicaciones, Interfaz de datos; y, Manejador o driver. Los sensores detectan el movimiento y/o la presión de los botones del ratón, el mismo que tiene dos o tres botones. Su presión o depresión la detecta el controlador de ratón y esta información es enviada al computador. En un ratón opto-mecánico, los .más comunes, los sensores detectan el movimiento del ratón mediante dos ruedas dentro del ratón, las cuales son de plástico y tienen perforaciones rectangulares. Existen dos LEDs en el un lado de la rueda y dos fototransistores en el otro que sirven para medir los movimientos en X y en Y mediante los pulsos que se generan por el par LED - fototransistor. Los dos emisores LED, están distanciados de tal forma que cuando el un fototransistor ve a su LED par, el otro transistor no pueda ver a su LED par (ver Figura 3.1).

Rueda de ratón

Fig. 3.1

De esta manera al rotar la rueda debido al movimiento del ratón, ambos fototransistores en una rueda generan pulsos en diferentes tiempos.

34 La gráfica 3.2 clarífica esta rotación, que ocurre en sentido horario, en el orden A-B-C-D-E.

A

Fig. 3.2

Ahora, si la rotación íbera en el sentido contrarío, E-D-C-B-A, los intervalos en que cada led envía señal al fototransistor correspondiente cambiarían. A la señal de un par LED - fototransistor se le llama señal de reloj, mientras que el otro par de la misma rueda, genera la señal de datos. Siendo indistinto qué par genera cada señal mientras se mantenga la referencia. Una rueda detecta el movimiento en X generando la señal de reloj y de datos en X, mientras la otra rueda detecta los movimientos en Y, generando una señal de reloj y otra de datos en Y, la gráfica 3.3 clarifica lo explicado.

Señales generadas en las Ruedas del ratón

xaocK ÍXO

XDAtÍXD*A r Movimiento Derecho Movimiento Izquierdo

YCLOCK ÍYQ

YDATA

Hacia Arriba Hacía Abajo

Fig. 3.3

El controlador de ratón, que es normalmente un microcontrolador de uso especifico, usa el número de pulsos de los fototransistores, y su orden, como información para determinar la rapidez y sentido de giro de las ruedas, consecuentemente el movimiento del ratón. Hay variedad de estos mícrocontroladores, así IBM usa el microcontrolador EC3568A1, Logitech tiene su propio microcontrolador, el HLKC9202; otros microcontroladores como el HM8350A también realizan las funciones antes descritas. El microcontrolador se encarga de generar la trama de información sobre el movimiento y estado de los botones del ratón. El driver del ratón recibe los paquetes de datos generados por el microcontrolador del ratón que han sido trasmitidos por el enlace de comunicaciones al interfaz de datos; el driver

35 está implementado por software y sus funciones son recibir y decodifícar está información; debe tener la condición actual del ratón (posición y estado de botones) y dársela a la aplicación o sistema operativo cuando este le pregunte. Lo normal es que cada fabricante de ratones, cree también su driver, o su ratón pueda ser manejado por un driver estándar de alguna plataforma como por ejemplo DOS o Windows. Existen ai menos dos populares interfaces de Ratón que se tratan a continuación.

3,1 MOUSE SERIAL Y MICROSOFT SERIAL MOUSE.

Serial Mouse s \0 Ratón de 2 botones

Fig. 3.4

Ambos tipos de ratones usan el puerto serial RS-232C para enviar sus datos. Por el bajo nivel de corriente que los elementos ópticos usan, el circuito del ratón se polariza directamente con una de las líneas del puerto serial.

36 Usan la línea RTS o DTR para polarizarse y generar +5 voltios para su circuitería, consumiendo aproximadamente 10 mA. El diagrama de bloques funcionales de estos ratones se muestra en la Figura 3.5:

Diagrama de Bloques del ratón

2 /I RS-232 Míc*owntrQller

Circuito de +SV DO conversión de Poder OC

Fig. 3.5

El Mouse Serial tiene tres botones mientras el Microsoft Serial Mouse (Figura 3.4), que es el más popular, tiene solo dos botones y es reconocido por casi todos los sistemas operativos. La velocidad asincrónica, a la que transmiten los datos ambos tipos de ratón es 1200 bps y el protocolo que-usan para transmitir los datos se muestra en la Tabla 3.1;

Protocolos que usan los ratones

Mouge System Formal1- Microsoft Fapmat*

Posición 7 S 5- A D 2 1 0 7 S 5 '1 3 1 Q del BIT 2 Byto i 1 0000 L M. R 1 í L R Y7 Ye X7 xe Byte2 X7 X6 X5 X4 X3 X2 XI XO 0 0 X5 X4 X3 X2 X1 xo Byte3 Y7 Y6 YS Y4 Y3 Y2 Yl YO 0 0 Y5 V4 Y3 Y2 Yl YO Byíe a X7 X6 Xo XA X3 X2 XI XO Byte5 Y7 Y6 Y5 Y4 Y3 Y2 Y1 YO

L = Estado del botón izquierdo 1 = presionado X7 - XO =Dato del mouímíento en X M = Estado del botón medio 0 = liberado Y7-YO = Dato del mowímienío en Y R = Estado del botón derecho

Tabla 3.1

El byte 1 es el primero en transmitirse. En el paquete de datos con signo X7-XQ, el bit mas significativo (MSB) indica la dirección de movimiento (izquierda ó derecha), el cero es positivo y el 1 es negativo; siendo similar para el paquete con signo en Y, Estos bytes se envían continuamente al computador tanto cuando se presiona, se suelta un botón o se mueve el ratón.

37 El protocolo de Mouse serial tiene dos bytes adicionales; en su byte 4 y 5 envía el movimiento en X(dx) y Y(dy), que ocurrió desde que los paquetes con signo de los byte 2 y 3 fueron enviados. La sensibilidad del ratón, en el Microsoft serial Mouse se calcula de la siguiente manera. A 1200bps, si se transmiten tres bytes, se puede tener como máximo 40 reportes por segundo. En el paquete con signo se tienen 8 bits y el MSB se usa para indicar la dirección., se pueden entonces contar 127 pulsos como máximo y por tanto, se tienen máximo 40 * 127 = 5080 pulsos por segundo, lo cual no es suficiente para que el ratón se maneje con adecuada precisión; por ello, actualmente el driver de ratón, en casi todas las plataformas, permite configurar ciertas opciones del ratón, corno ajustar la sensibilidad de su movimiento y velocidad de doble pulsación en alguno de sus botones, entre otras. La conexión de pines del puerto serial RS232 al ratón es la siguiente:

DBS DB25 NOMBRE DE LA COMENTARIOS LÍNEA Shell 1 Tierra de protección

3 2 TX Datos del computador al ratón, (solo en el encendido) 2 3 RX Datos seriales de ratón al computador 7 4 RTS Voltaje positivo y / o reseí del ratón. 8 5 CTS 6 6 DSR 5 7 Tierra de señal 4 20 DTR Voltaje positivo y / o reseí del ratón.

Para que el sistema funcione correctamente RTS y DTR deben ser positivas. En el arranque o reset del computador, RTS tiene un voltaje negativo y cuando se pone a positivo esta línea puede ser considerado como un reset para el ratón. Después de cada reset del ratón, mediante un pulso en la línea DTR o RTS, se transmite un identifícador de ratón. Plataformas como Windows 98 usan este identifícador para verificar la presencia del ratón en el arranque del sistema, reconocer la conexión de un nuevo hardware e instalar el driver más adecuado. En un ratón, acorde al protocolo Microsoft serial Mouse, se determino la siguiente secuencia de inicialización:

CD 88 81 A4 A8 B4 AB 96 95 91 Al BC BC AD AF B5 B3 A5 BC BO AE BO 90 A6 90 A3 Al A5 89

38 Los 29 datos están en formato hexadeclmal y se transmiten uno tras otro en cada reset del ratón. Algunas empresas, como la Logitech, modificaron el sistema de Microsoft Serial Mouse añadiendo un byte mas para llevar información sobre el botón del medio.

3.2 SISTEMA PS/2 MOUSE.

Ratón PS/2 Ratón de 7. botones versión PS/2

Este sistema (Figura 3.6), se conecta a la tarjeta madre del computador usando el mismo conector PS/2 usado en los teclados. Los datos se envían usando comunicación serial sincrónica, similar al protocolo usado por el teclado PS/2, por lo tanto los datos manejados por el .mismo controlador del teclado tienen el mismo tipo de interfaz. El PS/2 se usa mucho en

39 computadores fabricados por empresas de computadores personales, porque el puerto del ratón se puede integrar en la tarjeta madre del computador, liberando así un puerto RS232 del computador. El microcontrolador Intel 8042 soporta dos canales, uno para el teclado y otro para un servicio auxiliar como el ratón. El interfaz mecánico., visto en el computador es (Figura 3.7) :

Fig. 3.7 PS/2 Donde las líneas son: 1. Data (Datos) 2. Sin conexión 3. Tierra 4. Vcc(+5v) 5. CLK (reloj) 6. Sin conexión. La velocidad de transmisión de datos depende de la frecuencia de señal de reloj generada por el circuito del ratón. El protocolo que usa para transmitir los datos se muestra en la Tabla 3.2:

Formato del sistema PS/2

Posición del BIT 7 6 5 4 3 2 t O YV XV YS XS 1 O R L

X7 X6 X5 Xa XS X2 XI XO Y7 YG Y5 V4 Y3 V2 Yt YO

L = estado del botón izquierdo R = estado del botón derecho XQ-X7 = Movimiento en la dirección X YO-Y7 = Movimiento en la dirección Y XS,YS = Dato del signo de movimiento (1 = negativo) XV,YV = Dato de desbordamiento de bits (1 = ocurrió un desbordamiento )

Tabla 3.2 La comunicación bi-direccional se controla por la linea de Datos (data) y reloj(CLK). Ambas líneas son de colector abierto y en ausencia de eventos que reportar del ratón, ambas están en alta. Si el procesador está ocupado en otros procesos y no puede atender la interrupción y recibir datos, a través del interfaz de ratón coloca la línea de reloj en baja, para indicar al ratón esta condición y este debe a su vez retener el dato hasta que pueda enviarlo.

40 Tal como se explicó para la comunicación del teclado con el interfaz de teclado, el byte transmitido es acompañado por un bit de inicio, al comienzo; y se le añade también un bit de paridad y otro de parada. El reloj dura en cada estado entre 30 y 50 microsegundos. La sensibilidad de este ratón es mejor, puesto que usa 8 bits para determinar el número de pulsos (hasta 255), un bit adicional para determinar la dirección del movimiento (signo) y otro bit para saber si hubo desbordamiento en la cuenta de los pulsos. El máximo número de reportes del ratón por segundo es de 40 (tomado de http://wwwJaut.fí/Misc/Elertronics/pc/mterface;html^ouse). El driver de este tipo de ratón también permite ajustar mediante software la sensibilidad del mismo. Empresas como la Logitech extendieron este protocolo para manejar tres botones, y diseñaron su propio driver.

41 CAPITULO IV IV. DISEÑO DEL EQUIPO.

La operación en fonna remota del computador necesita la separación física del teclado y el ratón, para convertirlos en dispositivos remotos mediante la creación de un sistema de comunicaciones de control remoto. Se diseñan tres equipos (Figura 4.1): 1. Control remot9 de teclado (equipo remoto), 2. Control remoto de ratón (equipo remoto); y 3. Equipo terminal (receptor).

Componentes del Control Remoto de PC

HATO»

TECLADO Fig. 4.1 El sistema de control remoto que se implementa es unidireccional. El teclado opera normalmente con comunicación bidireccional y el diseño simula en ambos extremos: el emisor y receptor la comunicación bidireccional, pero el medio de comunicación infrarrojo es siempre unidireccional. Esto se debe a que la velocidad de transmisión de datos que usan los controles remotos de baja velocidad (aprox. 1 Kbps) y duración de su trama (> 15ms), son lentas en comparación con la velocidad de transmisión del teclado (aprox. 10 Kbps) y duración de su trama (< 1 ms); por tanto, si se usa un sistema de control remoto bidireccional se reduciría la velocidad efectiva del sistema de comunicaciones y en consecuencia podría saturarse el buffer interno del teclado perdiéndose datos de nuevos eventos. Además, implementar un sistema de comunicaciones infrarrojo bidireccional haría más complejo y costoso al equipo final.

42 4,1 DISEÑO DEL CONTROL REMOTO DE TECLADO.

El usuario del teclado infrarrojo debe acceder remotamente a todos los servicios de su PC3 incluso su encendido y apagado. Operar el teclado en forma remota requiere el diseño de un hardware que realice las siguientes funciones: Polarizar el teclado, Adquirir las tramas producidas por el teclado. Verificar la integridad de la tramas. Simular la conversación bidireccional teclado - host inteligente. Tomar las decisiones adecuadas en función de los eventos realizados. Generar tramas de información infrarroja y enviarlas hacia el receptor. Llevar un control de errores. El teclado debe adicionalmente poder simular al ratón-, de manera remota, para dar mayor control y comodidad al usuario. El diseño se ha realizado con un microcontrolador que lleva a cabo estas tareas y simplifica al máximo posible el hardware. Debido a que la tecla bloque de desplazamiento (Scroll Lock) no es muy utilizada, se puede sacrificar esta sola tecla para- conmutar entre la operación normal de teclado y la operación del teclado como ratón remoto. La Figura 4.2 clarifica lo expuesto.

Teclado utilizado como ratón remoto

Scrol! Scroll Teclado con lirterfaz TECLADO NORMAL Lock

Fig. 4.2 Las restantes teclas en el teclado numérico se asignan a movimientos en diagonal y la tecla del centro se utiliza para calibrar la sensibilidad del ratón. La Figura 4.3 en la siguiente pagina contiene el circuito usado.

43 CONTROL REMOTO DE TECLADO

Vcc •Vises- VLEDIR 4 baterías alkalinas R1 220Kohms C2 C1 33pF 33pf: Enc/Apg O- — i 15 ohms RP _ 1K LED ROJO XT4MEG - —1X1 1 R3 — lopqhms Q1 • —- -A/W: - 2N2222A « 1- 5.

TJ ?. 3 T) "O .TJ . TJ Hacia el conector de 5' S 3 = a 1 a' 3' — MU j, w m -j R6 teclado AT 2.7Kohms AAV _> Líne. a de Vcc R9 •> Línea de-Datos lOKohms > -£• Línea de Reloj Tierra

VCG Fig.4.? 4.1.a Descii-pción del circuito de control.

Se identifican en el circuito resistencias, transistores NPN, LEDs, mi pulsante y un conector de teclado AT. Por ser la ¡más común, se selecciona la plataforma de teclado AT, y no la PS/2, Su diferencia es únicamente el interfaz mecánico. Si se desea usar este equipo en la plataforma ! PS/2 solo es necesario cambiar el conector AT en el circuito por un PS/2, o colocar un adaptador mecánico de uso externo. La plataforma AT seleccionada es la del modo dos por las siguientes razones; Muchos programas antiguos solo soportan hasta ese modo de operación, i Plataformas como Windows 95 y 98 utilizan este modo de operación; y El protocolo de comunicaciones da la oportunidad al BIOS de preguntar al teclado en qué modo opera (yer paginas 32-32). El circuito simula un interfaz de teclado para manejar las líneas de Datos y Reloj. Se compone i de un transistor fjíPN y una resistencia de pull-up. La Figura 4.4 facilita la comprensión del mismo;

! Circuito para controlar la línea de reloj (CLK)

Línea de reloj del teclado Estado: Clkin Línea de CLK

Clkouí 1L (5v) OL OL

Fia. 4.4 Clkout OL (Ov) 1 L 1 L

Las líneas de Reloj de entrada(clkin) y salida(clkout) se manejan mediante un microcontrolador. En la línea de datos el circuito es idéntico. Podría usarse un solo pin del microcontrolador, t | / conmutándolo corno entrada y salida, según el estado de la comunicación; sin embargo, esto requiere un micrc-controlador más veloz. El microcontrolador usa un cristal de cuarzo de 4 i Miz. ! Existe en el Circuito un LED infrarrojo, de los usados normalmente en sistemas de control remoto de baja velocidad (pagina 8); que es el encargado de enviar las tramas de información producidas utilizando una sub-portadora próxima a 38 Khz. La frecuencia de sub-portadora se i selecciona en basé al receptor modular, el que se presentará más tarde. El LED infrarrojo se opera a través dejun transistor NPN en corte o saturación, cuya base es controlada por el microcontrolador.

45 Se podríanj usar dos emisores LED en serie, aumentando la distancia de alcance efectivo de la señal; sin embargo esto aumentaría también el consumo de energía del sistema. El otro LED de luz roja visible en el sistema solo se usa con fines de señalización. Finalmente en el circuito existe un pulsante, el que al ser presionado genera la trama de información necesaria para encender o apagar el equipo terminal.

4.1.b Formato de trama usado.

Existen dos tipos de tramas de información infrarroja enviadas por este hardware hacia el receptor: Fig. 4.5 ! Trama infrarroja de Teclado: I I T E E E E E D D D D D D D D SA EO FO P

11 11 01 11 01 01 11 11 X X X X X X X X X X X X

Longitud: 20 bits Duración : 35.56. ms (usando el estándar RC5)

Fig. 4.6 Trama infrarroja de Ratón:

I I T !E E E E E D D D D D D SA Bttizq Bttder P ii 01 01 11 01 11 X X X X X X X X X X 11 11 ¡i 01 Longitud; 18 bits Duración: 32.00¡ms (usando el estándar RC5)

Estas tramas de ¡información son muy similares a la trama normal del estándar R.C5; con el fin de permitir usar un control remoto universal comercial, con el estándar RC5, con la mayor cantidad de funciones básicas. Se usan enj ambas tramas dos bits de inicio, que permiten calibrar correctamente el control automático de ganancia en el receptor modular. i Se conserva el bit T, de la trama normal, pues así se mantiene compatibilidad con los controles remotos comerciales y adicionalmente posibilita una mejor sincronización. Los siguientes cinco bits marcados como E tienen la dirección del tipo de equipo; así, al teclado se le asigna la dirección 19 (10011) y al ratón la dirección (00101). La dirección 19 en el estándar R.C5 es para equipos experimentales, de esa manera no se creará ni se recibirá interferencia dej otros equipos comerciales operando con el mismo estándar. Mientras que el ratón usa la dirección asignada a equipos VHS, bien se podría tomar la otra dirección del estándar para equipos experimentales; sin embargo, los controles remotos comerciales no son

46 capaces de reproducir esa dirección al ser configurados, por tanto sí deseamos darle al menos un mínimo de control básico sobre el equipo a un usuario de control remoto comercial universal se debe necesariamente utilizar está dirección comercial. i Dado que muchos computadores modernos permiten usar un monitor de televisión, el usuario podría navegar en el Internet usando su monitor de televisión y operar el equipo cómodamente a distancia, lo que implicaría usar las entradas de vídeo en el televisor y dejar de utilizar el equipo! de vídeo del usuario. En iVltimo caso la modificación de esta dirección, bajo este diseño,j es fácii l de realizar.

La trama infrari'oia de teclado. i El campo de datos, marcado con bits D en ambas tramas, lleva la información necesaria que el receptor da al computador para que él la procese. El control remoto de teclado recibe datos desde el teclado cuando se presiona o suelta alguna tecla. El teclado envía al control remoto de teclado una trama compuesta de un bit de inicio, 8 bits de datos, uno de paridad impar y el bit de parada. Comprobada la integridad de la trama recibida desde el; teclado, el control remoto encapsula los 8 bits de datos recibidos en el campo de datos de la trama infrarroja de teclado. La trama infrarroja de teclado tiene 4 bits adicionales: 1. SA: solté anterior, ¡ 2. EO: se recibió el dato EO, 3. FO: se recibió el dato FO; y, 4. P : bit de paridad impar. Cuando se pulsan teclas en el teclado extendido se generan códigos EO, tanto en la presión como en la liberación. Muchas pulsaciones de una de estas teclas generan muchos códigos EO, la información (él dato) que aporta a la comunicación teclado - host, podría transportarse en el campo de datos1 de la trama infrarroja; sin embargo, se obtienen mejores resultados si se aumenta un bit ¡a la trama infrarroja de teclado. El estado de este bit indica si el dato enviado fue precedido de un código EO; además este bit disminuye el tiempo de comunicación y evita i que se sature el buffer interno del teclado cuando se generan en forma continua muchos códigos Í EO. Adicionalmente se reducen el número de tramas infrarrojas enviadas al receptor disminuyendo el consumo de energía. La trama usada tiene un bit EO que se coloca a 1 lógico para indicar que se recibió por parte del teclado el dato EO, señal de que el dato enviado pertenece a unai tecla del teclado extendido, bien sea de presión o liberación de una de estas teclas. Siempre que se libera una tecla el código de esa tecla es precedido por el código FO. Se adiciona el bit F,0 precisamente para indicar que el dato enviado en una trama infrarroja hacia el equipo terminal^ fue precedido por el código FO. Teclas como imprimir pantalla o pausa son i

47 precedidas también por el código FO. Si el bit FO se envía en 1 lógico entonces el dato enviado fue precedido del código FO. Los bits FO y EO, logran reducir el tiempo de comunicación entre equipos remotos con el equipo i terminal y reducir casi en 1/3 o más el consumo de energía. Mediante un bit de paridad impar P se hace el control de errores sobre la trama infrarroja. Para que elj receptor pueda regenerar tramas perdidas se adiciona el bit SA (solté anterior) debido a que la mayoría de operaciones realizadas sobre las teclas son de presión y a continuación liberacióni . La función del bit es indicar si la misma tecla pulsada anteriormente., cuya información fue enviada, es ahora liberada; así, el receptor podrá regenerar tramas perdidas. Se descarta usar el bit FO para el misino propósito que el bit SA pues en combinaciones dé teclas quedaría inutilizada su ayuda. Finalmente, teclas como SHEFT, ALT y CONTROL, que comúnmente se usan en combinación con otras teclas, se envían por duplicado, asegurándose su llegada hasta el receptor. Igual tratamiento se da a las teclas de Bloque Numérico y Bloque Mayúsculas. Los bits de control, forma e intervalos al enviar las tramas., son el resultado de considerar también las características del receptor modular, las que se analizan en el diseño del receptor.

La trama infrarroja de ratón.

El teclado simula el ratón según el estado de la tecla Bloque Desplazamiento (Scroll Lock)? indicado mediante su correspondiente LED. Cuando bloque desplazamiento está activado las tramas recibidas del teclado, se comparan con una tabla interna en la memoria del microcontrolador; si la trama recibida es de una tecla en el teclado numérico, los 8 bits de datos se pasan al formato usado por el estándar RC5 para identificar los comandos 1,2,3,4,5,6,7,8, 9,0 y STOP , que usan solo 6 bits, los marcados en la Figura 4.6 con D. La representación binaria de estos comandos y su función se presentan en la siguiente tabla.

48 Simulación de ratón a través del teclado: TABLA 4.1

Tecla pulsada Datos del teclado Datos de trama Simular avance del (8 bits) Infrarroja (6 bits) ratón en la dirección

1 H'69J=B'G110100T HT=B'OOQOQ1J izquierda y abajo 2 H72'=B'01110010' H'2'=B'Q00010' Abajo

3 H7a'=B'Ol1110lO' H'3'=B'000011' Derecha y abajo 4 H'6B'=B'01 101011' H'4'=B'000100' Izquierda

5 HVS^B'OIIIOOII1 H'5'=B'000101J Sensibilidad de ratón

6 H74'=B'01110100' H'6'^B'OOOIIO1 Derecha 7 H'6C'=B'01101100' H7'=B'0001ir Izquierda y arriba 8 H75'=B'01110101' H'S^B'OOIOOO' Arriba 9 H7D'=B'01111101' H'9'=B'001001' Derecha y arriba 0 / H70'=B'01110000' H'0'=B'000000' Presión y/o depresión del botón izquierdo

. (punto décima,!) H71'=B1011100011 H'36'=b'110110' Presión y/o depresión (comando STOP) del botón derecho

Muchos programas para PC trabajan en ambientes con alta resolución gráfica, y es muy normal arrastrar objetos utilizando el ratón. Se logra realizar arrastres de objetos usando el ratón simulado por el teclado tomando en cuenta la presión y liberación de teclas. Si se presiona el cero, correspondiente al botón izquierdo de ratón, se envía hacia el receptor el dato respectivo (b'OOOOOO' en la tabla 4.1) y se marca con 1 lógico el bit btt izq de la | trama infrarroja: de ratón. Pueden usarse entonces las otras teclas para desplazar el ratón, arrastrando el objeto seleccionado. En la liberación de la tecla 0; se envía la trama infrarroja de ratón con el dato! b'OOOOOO* y con el bit btt izq en cero lógico. i El campo de datos de la trama infrarroja de ratón le indica al receptor solo la dirección de movimiento y el estado de los botones del ratón. El receptor se encarga de la sensibilidad del movimiento y de enviar el estado de los botones del ratón al computador a través del interfaz de ratón. j El bit de paridad impar P lleva el control de errores y el bit SA de la trama infrarroja de ratón puede usarse en posteriores modificaciones, como por ejemplo mejorar la sensibilidad. En recepción hay que diferenciar entre la trama enviada por el control remoto de teclado de la enviada por un control remoto universal, para lo cual se utilizan los últimos 4 bits de la trama infrarroja ;de ratón que no forman parte de la trama del estándar RC5. Si no se reciben los últimos cuatro bits el receptor tiene una trama proveniente de un control remoto universal. Además, hay que tomar en cuenta que la distribución del teclado numérico en un control remoto

49 universal es inversa a la distribución física de los botones del teclado numérico en el teclado normal. j

4.I.C Microcontrolador y Programa Tisado.

Se usan los micrócontroladores de 8 bits PIC 16FS4 por las siguientes razones: Memoria no volátil tipo FLASH para contener el programa. Buen promedio de parámetros: velocidad, consumo, tamaño. Estado de reposo o bajo consumo. Protección ante fallos de la alimentación. Disminuye significativamente el espacio físico requerido para los circuitos y la alta capacidad de¡ corriente en sus pines E / S (hasta 25 / 20 mA) permite manejar directamente varios dispositivos, reduciendo el hardware y el costo total. Sencillez de manejo. Información detallada. i Bajo costo. ; Herramientas de desarrollo fáciles y baratas. Juego reducido de instrucciones. i Muchas herramientas de software se pueden encontrar libremente en el Internet. Desarrollo significativamente más veloz de prototipos. Los microcontrpladores PIC simplifican los procesos de escritura, borrado y reescritura de programas, necesarios en todo diseño. Como este; sistema trabaja con baterías, es muy importante un consumo moderado de energía. Normalmente el PIC consume 2mA y en reposo 14 uA. En estado de reposo, puede durar hasta dos anos con 4 baterías de 1.5 voltios. El modelo'usado requiere de 4 a 6 voltios en Vcc; sin embargo, existe el modelo especial i PIC 16LF84 qué opera en un rango extendido de hasta 2 voltios. Ambos modelos se pueden comprar en sus Versiones más baratas de memoria OTP. En Ecuador, el modelo PIC 16F84 es fácil de encontrar a buen precio, razón adicional para usar inicialmente estos integrados. La hoja de datos; reducida del PIC 16F84, junto con su juego de instrucciones se presenta en el Anexo D. Se recomieada visitar la pagina en Internet de Microchip http://www.microchip.com. El diseño usa un oscilador con cristal de cuarzo de 4 Mhz, suficiente para el sistema (un ! ciclo de maquina consume cuatro ciclos de oscilador). Se atiende; dos eventos: los generados en el teclado y los generados por el pulsante de encendido. El LED indicador rojo se enciende cuando se envían tramas infrarrojas, señal de que el control remoto de teclado opera bien.

50 Como el sistema trabaja con los flancos producidos en la línea de reloj generados por el teclado, no se puejde poner en reposo al control remoto de teclado., ya que cuando se despierta el microcontrolador¡ necesita 1024 períodos de oscilador para estabilizarse lo que, con un oscilador de 4 Mhz, tardaría 256 u. seg y produciría la perdida de al menos un dato. Las dimensiones del control remoto de teclado y su manejo se explican en el manual de usuario en el Anexo A. En lo que s,e refiere a la programación del microcontrolador; en el Anexo E se indica el código fílente eniforma detallada y se da en detalle la correspondencia de las etiquetas con los pines, registros y banderas usadas. Los siguientes flujogramas clarifican el funcionamiento del programa en memoria y la utilización de los recursos y registros del PIC16F84. La rutina que envía los datos infrarrojos es muy similar a la que se usa posteriormente en el control remoto! de ratón.

51 'i

Programa principal del control remoto de ! teclado

Llamara la rutina que Jamara Rutina Configura í envía trama por puerto TX \ 1 Infrarrojo

1r T

Retardo de tiempo, evita Llamara Rutina de TX ; ¡aturar el receptor(H ms Rutina que toma datos desde el teclado

Llamada desde el Programa principal de control remoto de teclado ftt

II Rutina de análisi sde datos recibidos i

Llamaca desde el Program aprincipa ldel contro lremoto de teclado

-. ..._ _._...... _ . __ . ___ . Xanaüsls de dato enV

V~T 4 ¿¿4,

•í buffer=h'EV ) i T í [ bit error=1 buffer=h7E' bufteFh'TE1 b'rt E1=1 j r | tecl BLOa Q DESPU BLOTeclQa NUMÉRICO ConffgurarTX Llamar Rutina infrarroja i í |.

i' ^^^_ ^ V <

buffe^h'EO1 í bUtfeFh'FO' bit E0=1 4H -> bit F0=1 1 r <2Eí^n 1 Rutina Prepara rRX <^>^ Rutina Prepara RrX | E£}=1 — =E 00 El = 1 ^pT" El = 0 j ,5 ir _L i E 1 * 1 1 * 1 P e ^**^^ FO ^-^^-^ FO ^^^_^^_^ n«« ^» ,^™^ I r-^Tbit = ?^^_, w« *- „ 1 «-^T bit = 7^^—, [| buffer=h'00' buffer=h'FC' is Llamar Rutin infrarroja ai ^*üf*tZ¿^-"'~ Llama Rutinr a Infrarroja -\f" Él bufferout=h'FF bufíerout=h'FP S F ^_1 F0=0 1 F0=1 =F 0 |¡ h -> .Borra rBandera2 I Rutina Configura rTX Rutina ConffgurarTX i " ~*" *"• ~ """ ll " fí ¡Ü™SSÍÍÍUÍÍÍ:Í:;ÍÍJÍÍ:.HÍÍÍSÍSSE Í Y 1 ' ^ ir n

buffer=h'FD' bufíer=h'FF' bufferoi]t=h'FF bufíerouí=h'FF Í Llam-rRüSa^parar Jí ^nar estad odel b.O e, | Rut ^epa^rRX Ü ^narestado de, bit 1 e, | ¡ registr kevleda s : t reaistr kevledo s i5 BoirarBandera2 -> Borra rBandera2 i r :: ; r ; ,| tütiüííiíiíiMiüiiíüviwü:;;;;:! Rutin aConifaurarT X : Rutin ConfkiurarTa X <í f Rutina Configura rTX Rutina ConfigurarTX «.«..^«««.w*.,..-*...... *,. ! 5 butfeFh'FE1 h but(er=h'EE' t bufferout=bufferout bufferout=h'Ee Borra rBandera.2 Configur arTX Rutina ConflgurarTX I ¡ fl i r ¡ buffer=h'M' '] II bi!fierout=h'FO ' \l| tí

Rutina ConflgurarTX 1

í. ,, r .... ,... t , r . M - SI bufíer no es Igual a las anteriores comparaciones, llamar rutina que envía trama Infrarroja

FO = 1

1r

bit FO = 0 i Llamar Rutina Preparar ; RX ; Configurar TX (transmisión)

Llamada desde el programa principal del control remoto de teclado, ó Llamada desde la Rutina de análisis de datos recibidos

Retomo a "Esperar^ por algún evento" G!E=1 Rutina de TX (transmisión)

Esta Rutina se emplea después de Co ifigurarlaTX.

jü*- C=1

1'

Dataout=0 Incremento paridad ]NTF = Q ÜB arara sa Kstías isa Prepara RX (recepción)

puede ser llamada desde: - El Programa principal de[ control remoto de teclado - La Rutina de TX - La Ruina de anal sis de datos recibidos - La Rutina que erMa trama Irrfrarroja

GIE = 0

1T

BitRX=1

1 "

Bit inicio = 0

1r

Bit para = 0

iT

Bit error = 0

J r

PinCLKout=o

lr

Pin DATAout=0

1r

Bit INTE =1 Bit INTF = 0

^JL Rutina que envía trama infrarroja

Llamada desde la Rutina de anáBsis de dalos recibidos Encero Registros preparo RX pin evento=0 Retomo a esperar por un evento ENVIA1IR (según estándar RC5)

LLamada desdesdei la Rutina que envía trama infrarroja

forma del bit! lógico

S88 mfcrosegundos en que se envfa subportadora de aprox 40 knz

c Retomo t

ENVIAOIR (según estándar RC5)

Llamada desde la Rutina que envia trama Infrarroja

888 mtcrosegundos en que se envia subportadora de aprox 40 kíiz;

Jornia del bit O lógico

NO 4,2 DISEÑO DEL CONTROL REMOTO DE RATÓN.

Su función principal es que los usuarios familiarizados con los controles remotos comerciales puedan acceder a los servicios del computador, reuniendo las características básicas de un equipo remoto (ver pagina 12). El control tiene bajo consumo y es fácil de transportar. Puede ser usado en usos más específicos, puesto que tiene una matriz con pulsantes, como la usada en los teclados, y a cada tecla se le puede asignar una función especifica que facilite por ejemplo el manejo de un software dedicado a cualquier labor y que pueda ser manejado con comodidad a cierta distancia. Las funciones básicas asignadas a este prototipo son: Detectar en su matriz la presión o liberación delas-teclas. Identificar la tecla que produce un evento. Reconocerla combinación de teclas simultaneas. Asignar el comando debido a cada evento. Generar la trama de información de teclado o ratón y enviarla al receptor. Control de errores. Facilitar el manejo de programas en el PC. Permanecer en estado de reposo o bajo consumo de potencia cuando no haya eventos. Este control remoto., a más de simular el ratón, permite ingresar datos que normalmente se los ingresaría al computador mediante el teclado, o combinaciones de teclas en el mismo, pues genera ambos tipos de tramas: trama de ratón y trama de teclado. La presión de un botón puede generar una secuencia de tramas de teclado que represente teclas de método abreviados por teclado; de esa manera pueden simplificarse comandos cotidianos en el PC, como por ejemplo cerrar la plataforma de software. Para lograr estos objetivo se usa un microcontrolador PIC16F84 La Figura 4.7 contiene el circuito usado.

4.2.a Desmpción del circuito de control.

La matriz de 16 pulsantes utiliza 8 líneas del PIC16F84, todo su puerto B y tres líneas del puerto A3 las que se utilizan para controlar el LED infrarrojo que envía las tramas hacia el receptor y los LEDs verde y amarillo que señalizan el estado de la comunicación. El microcontrolador usa un oscilador de 3.58 Mhz, con cristal de cuarzo. Se activan las resistencias de pull-up internas en el puerto B del microcontrolador y se utilizan adicionalmente las resistencias R1:R8 en la matriz de pulsantes para proteger al

63 "HKr LEDIr ir° °—w. acelerador Windows cerrar ESG

-o CH bttizq

arriba

<*-!

_L abajo

letra + avance

2nd fuñe

letra - ENTER

i—~O O—

RB4 Pin 9 RB5 Pm 8

_RB& Rio 7

^ Pin 6 C2 RBO «> Pin 5 jjpr O ^ Pm-1 XT 41- Vcc Pin 3' R9 lOKóhms Pin 2 Pinl ;R13: -1& ohms

R12 R1:R8 = 220 ohms 410. ohms I LED AMARILLO .LÉDRÓJO J_

4 Baterías AlkalinasA4 -i- 6v

Fig. 4.7

64 microcontrolador contra cargas estáticas. El circuito permite resolver por software los problemas asociados a matrices de teclados y enviar la información necesaria hacia el receptor. La presión normal de una tecla dura cuando menos 50 ms o hasta que el usuario la suelte; por tanto, se det>e atender en menos de 50 ms el cambio de estado en cualquiera de las líneas de entrada del microcontrolador para no perder ninguna pulsación. Todo el circuito se polariza con cuatro baterías AA que proveen 6 voltios.

4.2. b Programa utilizado.

El PIC16FS4, tiene una interrupción que alerta cualquier cambio de estado en los pines RB7:RB4; esta interrupción facilita colocar al PIC en estado de reposo. Al iniciar el programa se configuran los puertos y registros de control en el microcontrolador; en el puerto B se configuran los pines RB7:RB4 como entradas y RB3:RBO como salidas normalmente en alta. Luego el sistema queda en reposo esperando por una interrupción que Jo haga salir de ese estado. Al presionarse o liberarse una tecla cambia de estado la bandera de interrupción (RB3F) por cambio de estado en alguno de los pines RB7:RB4 y el programa empieza a reconocer la tecla pulsada y asociarla a un código de rastreo. Secuencialmente RB3:KBO son puestas en baja, mientras RB7:RB4 se revisan para saber en qué estado se hallan, así se detecta la fila y columna en la que se encuentra la tecla que genera el evento. Detectar combinaciones de teclas es posible sumando códigos de rastreo, la tabla 4.2 muestra la distribución matricial de-las teclas, función principal, secundaría y código de rastreo asociado: TABLA 4.2

Columnas^»- Filas! RB3 RB2 RB1 RBO 4- On/off Acelera ratón t RB4 abajo Sensibilidad arriba código: h'D' Código: hT código: h'2' código: h'3' Letra + Avance -> Windows -<- RB5 Símbolo + Retroceso Tabulación Izquierda Código: h'4' Código: h'5' código: h'6' Código: h'1B' Letra - BTT DER Cerrar -> RB6 Símbolo - Favoritos Derecha Código: h'8' Código: h'9' código: h'11' Código: h'B'

2nd fuñe Enter Escape Botón IZQ RB7 Mayúsculas Historial Windows izq código: h'C' Código: h'O' código: h'131 Código: h'F1

65 Si, por ejemplo, se hace un arrastre con el ratón, hacia la diagonal superior izquierda, se detectan tres códigos de rastreo: el botón izquierdo de ratón, el de movimiento superior ( í) , y el del movimiento hacia la izquierda(<—). Su suma genera un nuevo código de rastreo, que posteriormente se compara con otra tabla y se asigna un comando que se envía hacia el receptor mediante una rutina de envío de trama mfrarroja similar a la usada en el control remoto de teclado. Finalmente el sistema vuelve al estado de reposo, en espera de un nuevo evento. En total, con las combinaciones permitidas, se crearon 29 códigos de rastreo y con ayuda del receptor, se asignaron hasta 47 funciones o comandos que se pueden enviar. Se puede extender aún más el número de códigos de rastreo y funciones por asignar variando el software o usando los dos pines libres en el microcontrolador; sin embargo, seria un control remoto complejo de manejar. Los rebotes se eliminan generando retardos de al menos 25 ms, después de salir del estado de reposo, antes de identificar el código de rastreo. El LED verde indica cuando se está enviando una trama hacia el receptor, señal de que el sistema opera correctamente. El LED amarillo se enciende al presionar la tecla 2?dfimc, la que permite acceder al segundo sel defunciones de los botones en el control remoto; esto amplía las combinaciones y comandos posibles que se envían al detector. El manual de usuario, en el Anexo A, indica todos los servios asignados a los botones del control remoto y las combinaciones posibles diseñadas especialmente para iacilitar el uso del navegador de Internet: Microsoft Internet Explorer 5. Los siguientes flujogramas presentan el programa usado. Su detalle, registros y banderas auxiliares se presentan en el Anexo E.

66 Programa principal del control remoto de ratón

Encerar registros Configurar Puertas del PIC activar resistencias de pull-u RB7:RB4 entradas RB3;RBO salidas en O

Mientras no haya eventos está "congelado"

SI hay eventos

GIE=0,RBIF=1 Genero retardo de 29 ms Nuevatecla=h'0' Rutina Detecta tecla(s)

Llamada desde Programa principal del control remoto de ratón

Columna=b'1l10111' í]

< r. PortO=Columna 3 RBIF=0 •1

1r ^1 Roto registro columna •2

PortB=Columna 3 i

1r RBIF=0-> no pertenece a esta -*'^Xlsxs^ 0=1 ^s*^***^^ columna la tecla pulsada

RBIF=1 f

Asociación de códigos de rastreo a Funciones

Llamada desde e! Programa principal del control remoto de ratón

fNuevatecla=cód[gode rastreoy buscar función asociada /;;

V». del bit2nd func^ST" func = 0 ^X. -X^" 2nd func = ^víp5*"

1r 1 F

Función principal Función secundaria

f"^^^.^^^--:* i

^^^ teclado oratón ?^^rfk-i. trama de teclado ^<¿" 2^'- trama de

" 1r ,^

Marcarestado de b'rts Marcarestado de bits SA, EO . FO SA, btt der , btt Izq buffer=functón bufrer=comando 3

1r ir

Llamar rutina que envía Llamar rutina que envia trama Infrarroja trama infrarroja

r Jf ^ Generar retardo largo (al Regresara esperar por\ un evento (sleep) J menos 60ms)

tueí*,**,****»*»»*, —,,.i.^x^-— 4.3 DISEÑO DEL RECEPTOR.

El receptor obtiene las tramas enviadas por cualquier equipo remoto: control remoto de teclado, control remoto de ratón o control remoto universal,, las analiza y si en efecto son correctas y van dirigidas hacia él, examina el campo de dirección y envía por el interfaz de teclado o ratón los datos hacia el PC, ayudándose con los bits de control. Sus funciones principales son: Recibir tramas infrarrojas del estándar R.C5. Simular la conversación bidireccional con el interfaz de teclado. Arrancar correctamente el teclado en el encendido del PC. Enviar los datos de ratón por el interfaz de ratón. Arrancar el ratón en cualquier instante.

Informar el estado de Ja tecla 2ndfnnc en el control remoto de ratón. Vigilar el estado del PC (encendido o apagado). Encender o apagar el PC. Control de errores.

4.3.a Recepción de tramas infrairojas.

Como receptor se usa un elemento modular GP1U52X de Radio Shack: "IR detector module". Es sensible a luz infrarroja modulada con sub-portadora de 40 KHz y trabaja con lógica negada TTL o CMOS. El gráfico 4.8 indica las señales de entrada y salida.

Subportadora recibida

B/fo serial de salida

Fig. 4.8

70 La señal de salida del receptor se lleva hacia un pin de entrada del microcontrolador. Este elemento modular requiere operar con una fuente estable; un capacitor de 4.7 joF colocado cerca del mismo ayuda a mejorar su desempeño. En pruebas de laboratorio se llegó a concluir que se tienen menos errores con tramas de datos que dejan al menos un intervalo de 11 ms entre tramas, caso contrario se tienen muchas tramas perdidas por mala sincronización. Por está razón, es preferible aumentar el tiempo entre tramas, pero no se debe reducir mucho la velocidad efectiva de transmisión para evitar perder tramas. Obviamente afecta también la lejanía del emisor infrarrojo y la potencia de luz radiada. Conviene hacer un programa para el microcontrolador que trabaje por estados de la señal y no por flancos, pues se podrían generar flancos en falso por las características del elemento.

4.3. b Simulación de comunicación Mdireccional con el interfaz de teclado y airanque.

El equipo terminal atiende algunos eventos, las tramas infrarrojas recibidas por el receptor modular, el interfaz de teclado, el estado del computador (encendido o apagado) y el arranque del ratón. El equipo terminal actúa como teclado ante el computador y simula la conversación bidireccional con el interfaz de teclado en el PC. Cuando el computador se enciende detecta la presencia del teclado; ésto solo ocurre al encender el PC y por tanto es la primera labor que realiza el equipo terminal. A continuación el computador configura el teclado. Normalmente el BIOS de cada fabricante de motherboard tiene un modo de operación de teclado por defecto, que es el modo 2. En la plataforma de teclado AT o MFH el BIOS puede proponer o preguntar al teclado el modo en el cual opera. También la plataforma de software cargada en el computador puede proponer o preguntar el modo de operación del teclado. Es necesario elegir una plataforma de software sobre la cual trabajar, así se automatizarán algunas funciones. Se selecciona la plataforma Windows por ser la más utilizada en PCs personales, sin que esta reste posibilidades y compatibilidad del equipo con otras plataformas como DOS o LINUX. Cuando se reciben tramas infrarrojas de teclado se verifica su integridad y se almacena el campo de datos. El dato almacenado es transferido al computador por medio del interfaz de teclado, utilizando la trama que usa la plataforma AT o MHI. Mientras se ópera el cpinput^clpr el equipo terminaL está .alerta del interfaz de teclado, pero atenderlo podría tardar pocos milisegundos si se está atendiendo otro evento.

71 4.3.c Envío de ciatos al interfaz de ratón y arranque.

Se usa el interfaz serial de ratón y se selecciona el protocolo Microsoft Serial Mouse para transmitir los datos. El protocolo tiene corno ventaja ser muy popular y aceptado por todas las plataformas de software sin necesidad de comprar software adicional. El puerto serial requiere menos líneas para su control con el microcontrolador con relación al interfaz PS/2 y el ratón serial puede funcionar en cualquier computador con puerto serial. Para enviar las tramas de ratón producidas en el equipo terminal al puerto serial RS232 se usa el integrado ICL232 que convierte señales TTL a niveles RS232. El equipo terminal envía las tramas de ratón hacia el pin RX del puerto RS232 en el computador. El computador, según la plataforma de software y programas que use, puede verificar en cualquier instante la presencia del ratón; por tanto, el equipo terminal debe responder inmediatamente con el iclentifícador del tipo de ratón (ver pagina 38). Por este motivo se usa la interrupción externa del microcontrolador (RBO) conectada a la línea de' reset del ratón: línea DTR del puerto serial, para responder inmediatamente al computador con el identíficador de ratón. En DOS, al detectar la presencia del ratón, se tiene un pulso de reset en la línea DTR, mientras que Windows 98 genera cuatro pulsos en la misma línea para recibir la secuencia de identificador de ratón cuatro veces. La trama infrarroja de ratón tiene información sobre la dirección de avance y estado de los botones; sin embargo, la distancia que avanza sobre pantalla el puntero del ratón es regulada por el equipo terminal. Por cada trama infrarroja de ratón indicando un sentido de movimiento el programa en el microcontrolador envía asincrónicamente tres bytes al RS232 (ver Tabla 3.1), siguiendo el protocolo Microsoft Serial Mouse, simulando un número determinado de pulsos en los campos de movimiento X6:XO , Y6:YO de la trama de ratón, en la dirección adecuada y considerando el estado almacenado de los botones de ratón. Puesto que el medio infrarrojo disminuye la sensibilidad del ratón al retardar la comunicación con el puerto serial, se compensa la sensibilidad de dos maneras: El botón llamado acelerador, que corresponde a la tecla 5 en el teclado, aumenta drásticamente el número de pulsos que se simula y envía al driver del ratón en el PC para facilitar los desplazamientos largos dentro de la pantalla. Se puede también aumentar o disminuir ligeramente el número de pulsos generados, mediante la presión del botón "Sensibilidad" en el control. Se programa siete escalas de sensibilidad las cuales, en conjunto con las posibilidades que ofrece el driver del ratón, pueden

72 adecuar la sensibilidad deseada por el usuario, así como la velocidad del doble clic en los botones del ratón.

Puesto que el control remoto de ratón tiene el botón 2nd fimo para asignar diferentes funciones a los botones, el equipo terminal posee un LED amarillo que indica el estado del botón 2" fuñe, pero por la unidireccionalídad del medio infrarrojo puede darse una desincronización entre ambos equipos, hecho que debe tomarse en cuenta.

4.3. d Encendido y Apagado del Equipo.

Cuando el receptor recibe una trama infrarroja de teclado correcta con el dato A7H, enciende o apaga el computador. Se escoge el dato A7H porque no es un código de rastreo usado por ninguna tecla en cualquiera de los tres modos que puede opera el teclado. Además, por precaución, este diseño no permite encender o apagar el equipo con un control remoto universal o trama normal del estándar RC5. El equipo terminal enciende el computador a través de un relay. Cuando se cierran los contactos del relay, alimentan de energía a la fuente del computador. El relay usado tiene una bobina de 12 voltios DC, operada por un transistor, en estado de corte o saturación, controlado por un pin del microcontrolador. Esto hace necesario polarizar el equipo terminal de forma independiente del resto del computador y además este equipo debe estar siempre encendido para recibir las tramas infrarrojas de los equipos remotos. Normalmente después del encendido el computador verifica sus dispositivos E/S y carga la plataforma de software usada. Apagar el computador requiere en primer lugar cerrar la plataforma de software usada, parquear el disco duro del computador y finalmente desconectar la alimentación de energía. Se dan dos alternativas para apagar el computador, una manual y otra automática. Se apaga manualmente el computador si el usuario cierra las aplicaciones que estaba usando, introduce las combinaciones de teclas necesarias para cerrar la plataforma de software, espera la señal de la plataforma de que puede apagar el computador y finalmente presiona el interruptor de poder del computador. El LED indicador amarillo en el equipo terminal se enciende para indicar al usuario que el computador fue apagado manualmente. Cuando se cierra la plataforma de software Windows 95/98, está se encarga automáticamente de parquear el disco y avisar al usuario cuando desconectar su computador. Se apaga automáticamente el computador si se presiona el botón ene / apag en cualquiera de los equipos remotos. Entonces, el receptor recibe la trama de teclado con el dato A7H y luego el equipo terminal introduce automáticamente la combinación de teclas de métodos abreviados necesarias para cerrar la plataforma de software, a través del interfaz de teclado. Antes de desconectar la alimentación de energía al computador se espera el tiempo necesario para cerrar la plataforma de software y parquear e] disco duro y el sistema está listo para ser desconectado. Finalmente se desconecta el relay y por tanto se apaga el computador. El LED indicador rojo en el equipo terminal indica que se apagó automáticamente el computador. En cada forma de apagar el PC se tienen diferentes dificultades. Al apagar manualmente el computador, el usuario deja en la posición de apagado el botón de poder del computador y para encender nuevamente el computador debe necesariamente presionar el mismo botón de poder. El equipo terminal detecta que el computador fue apagado manualmente porque el microcontrolador en este equipo, revisa constantemente el estado de la línea de Vcc (voltaje de alimentación) en el interfaz de teclado. Si no existe Vcc, necesariamente se apagó en forma manual el computador pero el contacto mecánico del relay usado se encuentra cerrado. El equipo terminal iniciaJiza todo el sistema del equipo terminal cuando detecta nuevamente energía en la .linea de Vcc del interfaz de teclado. Cuando se apaga el computador en forma automática debe considerarse que cada computador se tarda diferente tiempo en cerrar la plataforma de software. El equipo terminal tiene un interruptor para modificar el tiempo de apagado entre treinta segundos y un minuto aproximadamente, que en el común de los casos es un tiempo suficiente. Existe otra alternativa mucho más segura para apagar correctamente el computador. Cuando se parquea el disco duro del computador, se enciende el LED de estado del disco duro (estado de alta). Este LED se encuentra en todos los computadores personales y es de color rojo, su símbolo es un cilindro. Para apagar el computador, el equipo terminal puede tomar como señal el estado de este LED. Por lo tanto, en el apagado, después de haber cerrado la plataforma de software automáticamente, se puede esperar que el LED de estado del disco duro se quede en alta y transcurrido un tiempo mínimo por razones de seguridad desconectar la alimentación de energía al computador. El circuito impreso del equipo terminal es de reducidas dimensiones, 10 x 8 cm y podría instalarse dentro de un PC. Sin embargo, el problema que se presenta es que tomar la señal del LED que indica el estado del disco duro requiere que el usuario haga conexiones adicionales entre el PC y el equipo terminal. Esto complicaría mucho la instalación al usuario común, pero es la instalación más adecuada si se piensa instalar al equipo terminal dentro de un computador dedicado a una función especifica, con un programa especifico que pueda ser controlado a cierta distancia. Por estas razones, el equipo terminal da la posibilidad al usuario que lo desee de llevar el estado del LED del disco duro hacia un pin del microcontrolador. El equipo concibe está posibilidad habilitando dos líneas del código fuente cargado en la memoria del microcontrolador.

74 Por los motivos mencionados, se decide finalmente crear un equipo terminal extemo al computador en esencia por ser mucho más fácil de instalar.

4.3.e Circuito de control usado.

Se compone principalmente de: Un. receptor modular infrarrojo. - El ICL232 (compatible 100% al max232) que pasa de niveles TTL aniveles RS232. - Conector serial DB9 hembra para llevar la información del ratón al PC. Conectar de teclado AT. Un. relay, - Microcontrolador PIC16F84. Fuente reguladora de voltaje. Protecciones, transistores, resistencias, capacitores y LEDS. Su circuito se presenta en la Figura 4.9. El relay soporta 110 voltios y hasta 10 amperios, se maneja medíante un transistor NPN con una resistencia de 10 Kohms en su base, para proteger contra descargas el pin del mí croe entróla dor que maneja el transistor. Adicionalmente se coloca un diodo en paralelo a la bobina DC del relay por protección. Dicho relay tiene una bobina que opera con 12 voltios, por lo que se necesita un adaptador con este voltaje para polarizar el equipo terminal. El adaptador se conecta a un puente de diodos para polarizar de cualquier forma el circuito. A la salida del puente de diodos se usa un regulador 7805 a cuya salida se ofrece 5 voltios y Ja suficiente cantidad de corriente al circuito. Los capacitores en paralelo (CÍO, Cll, C12., C13) se colocan en los sitios necesarios para tener mayor estabilidad contra ruido y fallas de alimentación en el circuito. Las líneas de reloj y datos del interfaz de teclado se manejan con el mismo circuito usado en el control remoto de teclado (Figura 4.4), pero se adicionan capacitores a tierra de 47 pF que ayudan a eliminar el ruido.y posibles fallas de alimentación del circuito; además, evitan, la generación de falsos flancos en la línea de reloj y datos. Debe recordarse que ahora el equipo terminal simula al teclado y por tanto es quien genera la señal de reloj. Se usan dos puertos del ICL232, uno para enviar los datos al computador a través de la línea de RX del RS232 y el otro recibe el estado de la línea DTR. La línea de Vcc del interfaz de teclado, se conecta mediante una resistencia de pull-up y un capacitor hacia el pin 17 (RAO) en el microcontrolador. Se usa cuatro pines del microcontrolador PIC16F84 para manejar el interfaz de teclado pín 9, 8,7 y 2 (RB1:RB3 y RAS), dos pines manejan el puerto serial a través del ICL232, pin

75 EQUIPO TERMINAL

Hacía el Interfaz de ratón Hacia elinterfaz de Adaptador 12 VDC Requiso- 7605 Puerto serial (DB9) teclado AT o <*>

Línea de fase 110 VAC

Hacia el Reo iptor

M> salida GP1U52X J? tierra

calibrar tiempo de apagado

Vcc_12v

Fig. 4.9

76 10 y pin 4 (RB4 y RBO). La señal del receptor infrarrojo se introduce al microcontrolador mediante el pin 3 (RA4) que es schmitt trigger. El pin 12 (RB6) maneja el transistor que opera el relay, los pines 1 y 18 (RAÍ y RA2) manejan los LEDs amarillo y rojo de señalización hacia el usuario. El tiempo de espera en el apagado se regula por el interruptor, conectado con su respectiva resistencia de pull-up al pin RB7. Se deja un conector libre entre tierra y el pin 11(RB5) para llevar hacia este la información del estado del LED del disco duro, útil a los usuarios que deseen usar esta señal en el apagado del computador.

4.3./Programa usado.

Cuando se enciende el equipo terminal se configura los puertos del microcontrolador y se cargan los registros usados por el programa con los valores necesarios. Después el programa espera por la trama de teclado que ordena encender el computador., indicando esto al usuario por medio del LED rojo en el equipo. El receptor infrarrojo recibe constantemente señales de ruido o bien tramas infrarrojas hacia otros equipos terminales, el programa analiza todos los datos y no enciende el computador hasta no recibir la trama correcta. Una vez recibida la trama correcta se enciende el || PC, cerrando el transistor que maneja el relay y se apaga el LED rojo. Inmediatamente se llama a la rutina de arranque del teclado. Cuando el equipo terminal opera con el computador encendido, espera tramas infrarrojas de teclado o ratón, también vigila simular la conversación con el interfaz de teclado y se espera en cualquier momento por el reset de ratón. Al recibir un reset de ratón, se activa la interrupción externa del microcontrolador y se llama a la rutina de atención de interrupción que envía el identificador de ratón hacia el computador. Las tramas infrarrojas correctas de ratón, teclado o de controles remotos universales usando el protocolo RC5 se detectan y regeneran al formato adecuado requerido por el respectivo interfaz al que dirigen su función. Por ejemplo, una trama infrarroja de ratón genera ^ los tres bytes asincrónicos que se envían por el interfaz de ratón serial al computador. Cuando se detecta nuevamente la trama infrarroja de teclado con el dato A?H se llama a la rutina que apaga el computador automáticamente. Si después de enviar las teclas de métodos abreviados al computador, que cierran la plataforma de software, el equipo terminal recibe alguna trama correcta de ratón o de teclado, significa que aún se está trabajando o cerrando otros programas abiertos. En este caso se temporiza más tiempo antes de apagar el computador para prevenir desconectar prematuramente la alimentación de energía al computador. Al apagarse automáticamente el equipo terminal regresa al estado inicial.

77 Si. se apaga manualmente el PC el LED amarillo se activa y el programa espera hasta que se encienda nuevamente en forma manual el PC. En este bucle el programa solo detecta el estado de Ja señal de Vcc en el interfaz de teclado. Para controlar errores en las tramas infrarrojas el programa chequea cada bit infrarrojo que es recibido. Si todos los bits de una trama se reciben con éxito, se analiza el bit de paridad, las tramas con el bit de paridad erróneo se descartan. El bit SA en la trama de teclado permite regenerar tramas perdidas, medíante una comparación con la trama de teclado previamente recibida. El programa en detalle se presenta en el Anexo E. Los siguientes flujogramas facilitan su comprensión.

i

78 Programa principal del equipo terminal

Declaración de Registros

Configurar Puertos del PIC

Sise produce una nterrupción externa por e pin RBO enviar Identíficador de ratón

Llamar Rutina que atiende al fnterfaz de teclado del PC

En caso de mala sincronización o error Llamar Rutina Infrarroja (Recibe las tramas) bufferout=dato recibido A-

cantores de apagada)

Rutina Infrarroja del receptor

Llamada desde e! Programa principal del equipo terminal

INPUT=0 Debe ser la segunda mitad dt brt de Inicio el receptor trabaja con lógica negada)

SI no hay cambio de estado en el tiempo esperado / Esperar menos de >/ SaBus por ei cambio a ' \a en INPUT

SI no se estabiliza en un nivel

/ Esperármenos de >l 888US por el cambio a \a en INPUT

^Cerciorase del\o de InpUt/fi

\!

Recibir bitT, si es bit 0 e; rama de equipos remotos si es uno puede ser de control remoto universal

^ T

Sigue recibiendo b'rts 4 MSB de dirección de ratón ?

4 MSb de dirección de teclado ? brr=9 Trama nacía otro equipo o error

Volver a slcronlzar con

^enerar retardo menor qu

Esperar por nivel de bala

Llamar Rutina que recibe bits (Recibo campo de datos)

Llamar Rutina que recibe

(recibo bits de control)

si hay error en el brt de paridad

bit error=? (Puede ser trama enviad por control remoto universal)

Retomar al flujo del programa principal bit mouse_control=1 posible trama útil de control remoto universal | Retomar al flujode l programa principa Rutina que recibe bits infrarrojos del estándar RC5

Llamada desde la Rutina Infrarroja del receptor

¡enerar retardo necesario para leer el estado en mitad de la primera mitad de bit

INPUT= alta(1)

INPUT=alta )NPUT=baJa ]NPUT=arra INPUT=ba]a j;

r 1r l 1r 1 ' "i itroducir como bit Isb en buffer itroducír como bit Isb en buffer f 1 lógico ¡ 0 lógico bit error=1 bit error=1 t rotar registro hacia la Izquierda [ j rotar registro hacia la Izquierda incrementar paridad Rutina que analiza tramas de teclado

Llamada desde el Programa principal del equipo terminal

"'"'NO Se perdió una trama, se regenera

bufferout=h'EO' .lámar Rutina que envía dato: por el intertaz de teclado

bufferout=h'EO' Jamar Rutina que envía dato: por e] ínterfaz de teclado

bufTerout=h'EO' -lámar Rutina que envía dato por el Interfaz de teclado Rutina que envía datos por el ¡nterfaz de teclado al PC

Llamada desde la Rutina que analiza tramas de teclado, Llamada desde la Rutina que analiza tramas de ratón, 6 Llamada desde la Rutina de encendido.

El ínterfaz de teclado esta ocupado o de,sea enviar datos? lAl

c = o -'<;í:"~ C=1

1r ,_ i ' Dataout=1 dataout=0 Incrementar paridad 3 I Rutina de recepción de datos desde el interfaz de teclado

Llamada desde la Rutina que envía datos por el Interfaz de teclado al PC, ó Uamada desde el Programa principal del equipo terminal

ngresar dataln como MSB en db Rotar registro db2 hacia la derecha SI dataln=1 ?

Transmitir comando de respuesta (si es del caso) ít-

Rutina que analiza tramas de ratón

Llamada desde el Programa principal de! equipo terminal

3Ufferout=Campo de dato

(Tecla CH+ en controles quivalente a [unción 2nd

Alternar estado de bit rewind control (si está en uno se enciende el LED

Equivale a tecla Mayúsculas Equivale a léela Enter Enviar por el interfai de teclado e nviar en orden alfabético por c Enviar por el Interfaz de teclado e iteríaz de teclado una letra pt código equivalente a la tecla Equivalente a sensibilidad ódlgo equivalente a la tecla ENTEF Mayúsculas pulsación sumar 2 a variables de Función útil en control remoto Función útil en control remoto movimiento universa y mouse y x__mouse universal •(#

Los demás datos validos en utíerout indican la dirección d lesplazamiento del ratón, case contrato se descartan

rewlnd control=1 Cargarvariab!esy_mouse y <__mous en los campos X7:Xt } = 0 y Y7:YO de la trama de ratón, t> \ según valor en bufferout

1r ^ a Enviarsetda caracteres :nviar tecla de avance derectr Enviar tecla retroceso por el especiales por el Interfaz de t por el interfaz de teclado una 'iteríaz de teclado una letra p< Cargar estado almacenado d£ teclado uno por pulsación i letra por pulsación pulsación btt der y btt izq en la trama de latón

amar Rutina que envía datos en forma serial al Interfaz de ratón Rutina de apagado

Llamada desde el Programa principal del equipo terminal, 6 Llamada desde la Rutina de recepción de datos desde el Interfaz de teclado

= 1 i reía rao ^^ M <*¿£— = 0

1r if

:| Temporizar aprox. 30 seg Temporizar aprox. 60 seg

5;¡¡¡:::™p «-««,„»«.. «««««.«^Síasw^a Rutina de encendido

Llamada desde el Programa principal del equipo terminal 4.4 CONSIDERACIONES SOBRE AUMENTACIÓN Y CONSUMO DE ENERGÍA DE

LOS EQUIPOS REMOTOS.

El control remoto de teclado posee una circuitería de bajo consumo de energía; sin embargo, el teclado podría reducir aceleradamente la vida útil de las baterías usadas, por esta razón se recomienda usar un teclado moderno de bajo consumo de energía. Existe gran variedad de teclados, sus rangos de consumo de corriente comienzan desde los 20 mA. El presente prototipo utiliza un teclado comercial que consume máximo 35 mA. Un teclado antiguo puede llegar a consumir más de 350 mA. Para polarizar con baterías los equipos se consideran los siguientes parámetros: la configuración del PIC, el oscilador usado, la temperatura, el consumo de puertos E/S, etc. El consumo de energía del microcontrolador depende en gran medida del oscilador con que trabaja. Los tres PIC16F84 utilizados trabajan con osciladores próximos a 4 Mhz; el control remoto de ratón tiene el oscilador de menor frecuencia. En la selección de las baterías se considera: el voltaje, el consumo de corriente, la forma de operación (intervalos de servicio -tipo de carga), el tiempo de servicio mínimo requerido, la temperatura, el ambiente, el tamaño, el peso y el tipo de terminales. Se consideran dos zonas de consumo, la zona activa y la zona de reposo (instrucción sleep). El programa en el control remoto de teclado mantiene el circuito solo en la zona activa. Ambos equipos remotos operan dentro de un rango de voltaje entre 4 y 6 voltios; también ambos consumen mayor cantidad de corriente cuando se envían tramas infrarrojas. El microcontrolador del control remoto de teclado consume 1.8 mA. Los elementos externos conectados al microcontrolador, consumen aproximadamente 50 mA cuando se transmiten tramas infrarrojas. En espera por algún evento no se consumen más de 5 mA. Para polarizar el circuito se usan cuatro baterías alcalinas AA. Se usan estas baterías por las siguientes razones: Empresas como Energizer recomiendan para equipos remotos el uso de las baterías alcalinas. Mejor desempeño frente a temperatura, descarga y relación costo por hora que las pilas de carbón-zinc. Relativa insensibilidad respecto de cambios en el ciclo de trabajo o consumo de corriente. Las baterías de nickel-cadmio (recargables) son mejores en equipos con altos consumos de corriente; sin embargo, se descargan mas rápidamente y se requiere volverlas cargar con equipo adicional. Su costo inicial es superior a las alcalinas. Las baterías de litio son superiores a las antes mencionadas, pero su costo es muy superior y son difíciles de conseguir.

92 Se presenta la hoja de datos de las pilas AA en el Anexo F, tomada de la pagina WEB de Energizer: http://data.energizer.com/. Las baterías alcalinas AA nominalmente tienen 1.5 voltios, su rango de operación es de 1.25 a 1.15 voltios (con carga). La comente máxima de consumo del control remoto de teclado es igual a la suma de la corriente de consumo del microcontrolador, mas la máxima corriente ocupada por los elementos extemos y mas la corriente que ocupa el teclado comercial. En total., se consumen máximo 1.8mA + 50mA + 35mA =87 mA. Se concluye de observar la gráfica de horas de servicio vs. consumo constante de corriente (ver Anexo F) que el sistema operará más de 10 horas con 4 pilas AA generando 4 voltios como mínimo. Como no siempre el equipo ésta transmitiendo, la potencia de consumo es menor y por tanto, se estima una duración superior de las baterías. En el control remoto de ratón se tiene mejor rendimiento de las baterías, que se estima como sigue: en la zona de reposo, se configuran los puertos de salida del microcontrolador en estado de baja. En este estado únicamente se debe agregar a la corriente de reposo del microcontrolador Ja que circula por las resistencias internas de pull-up. La hoja de datos del PIC16F84 indica un consumo de comente en estado de reposo de 14 uA; las resistencias internas de pull-up consumen 400 uA; esto da un total de 414¡iA. En la curva característica de las baterías AA, en el Anexo F, se aprecia que en. la zona de reposo el circuito del control remoto de ratón puede funcionar mucho más de 1000 horas o 41 días. En la zona activa, el programa analiza el botón pulsado y envía las tramas irifrarrojas necesarias. El consumo de corriente estimado es de 1.8 mA que consume el microcontrolador, más aproximadamente 44 mA que consume la circuitería extema. En total, como máximo, se consumen 46mA; por tanto, el sistema podría operar mínimo entre 20 y 30 horas en la zona activa.

93 4,5 TRAMAS GENERADAS EN LOS EQUIPOS Y ALCANCE EFECTIVO DEL

SISTEMA DE CONTROL REMOTO.

Instalando el equipo tal como indica el Manual del Usuario (Anexo A), el receptor se encuentra esperando por las tramas infrarrojas correctas. La trama infrarroja generada en el control remoto de ratón, correspondiente al botón de avance de ratón "<—" se presenta en la Figura 4.10. Se aprecia la duración de trama y los trenes de pulsos que representan el estado de alta en un bit. El estado de alta en un bit se amplia y ve mejor en la Figura 4.11, donde se puede apreciar la frecuencia de sub-portadora que es de aproximadamente 39 Khz con un duty cycle cercano a 50%. La Figura 4.12 indica eJ tiempo entre tramas infrarrojas de ratón sucesivas; cuando se mantiene presionada la tecla cc<—", este valor se reduce a 29ms. Cuando se envían tramas infrarrojas de teclado, mediante el control remoto de ratón, se aumenta mucho más el intervalo entre tramas. La Figura 4.13 indica el tiempo entre tramas sucesivas correspondientes al botón "letra +", este tiempo es de 138 ms. La Figura 4.14 permite apreciar la señal de reloj y datos generadas por el teclado al presionar la tecla "i"; ésta trama es tomada por el control remoto de teclado. La trama infrarroja de teclado correspondiente a la presión de la tecla i, producida por el control remoto de teclado, se presenta en la Figura 4.15; en la misma se aprecia la duración de una trama y los constantes trenes de pulsos que representan estados de alta en un bit. La Figura 4.16 contiene dos tramas infrarrojas que se generan al mantener presionada la tecla "i" en el teclado. El tiempo entre tramas infrarrojas es aproximadamente 42 ms, esto se debe al el retardo generado por el equipo remoto más el retardo generado por el teclado cuando se mantiene presionada la misma tecla. La Figura 4.17 indica en su parte superior la trama infrarroja obtenida por el receptor del equipo terminal. La parte inferior de la misma figura indica la señal que genera el equipo terminal sobre la línea de datos., en el interfaz de teclado. Se aprecia que el tiempo que dura la trama infrarroja es muy superior al que se demora el microcontrolador en enviar el dato al computador; ski embargo, la presión y depresión de teclas, sobre el teclado, genera tramas de teclado normalmente con al menos 50 ms entre tramas. El equipo terminal tiene por tanto máximo 50 ms para recibir una trama infrarroja correcta, analiza da y enviarla al computador, así el usuario podrá trabajar en tiempo real. En la Figura 4.18 se aprecia el tiempo entre cada tres bytes asincrónicos que son enviados por el equipo terminal al PC, usando el puerto serial.

94 Trama infrarroja de ratón correspondient eal botón de avance izquierdo

JL • Sto p MM PosPos :15,4Qm15,4Qm: $$ CURSORES Tek T 1 fW*y v*^.w w*--avrtWA-Aswaw*aw.y-i^

Tipo

TI 31,60ms 31,65-Hz

Cursor -200,0jüs

Curso 2r 31,40ms

w^*y»*4jviA>~^ CH1 1.00 V CH 200m2 V M 5ms CH1 / 6.03V (D

es

cu

03

o ~C5 03 t± O

-Q c—oi

r "i Fiq.4.11

- 96 Intervalos de tiempo entre tramas sucesiva sde ratón Stop M Pos 50,00m; s CURSORES ^f'V^V^^^^vfM^fW^^ff^f^^M^f^fff^/ftv^rMftfiVfMffyJL * *-yA%SjNw^^

Fuente

Zl c' Diferencia to 35,00ms 28,5 7Hz

Curso r2 67,00ms * frMMVMt.VV&V»'&W¿rtVÁVi*fe.W&V**»**vÍW*W CH1 1.00 V CH 1.002 V M 25ms CH1 / 5.32V Intervalo de tiempo entre tramas Infrarroja sde teclado generada sen el control remoto de ratón JL ® Sto p M Pos 50-OOm: s CURSORES ^'y-w*wwft*^w*Avw^\vwwysv»vs'W^

•- TP w. i, v w

Fuente

TI t" Diferencia 138,üms 7.24 6Hz

Curso 1r SO.OOms

Curso r2 168,0ms CH1 1.00 V CH 1.002 V M 50ms CH1 / 5.32V Seña len la línea de relo jy datos de un teclado MF1 Ien e lmodo 2 (letra "i") TL ® Sto p M Pos :49,03ms MEDIDAS

CH1 wiwn i|ihjmH 401V

1 CH1

•UHJi»UM«l|^»B**«J 8,931 hHz CH2

419V CH2 en odo

.<^^Vl^s^ivv^A^^ÍAV*v^^^JAVlW^^A^AVW**^^^^^í^ 'i^-tt '^ CH1 2.00 V CH 2.002 V M250jJS CH2 / 10.7V Trama infrarroja de teclado correspondient a lae tecla "i"

stop M Pos 56,8üm: s CURSORES rT * y * T w r »^My^ Tipo

Fuente

Diferencia 34,6üms uí 28,3 0Hz

Curso 2r 75,80ms o o :H1 2.00 V CH 2BO.Üm V M 5ms CH2 / 548mV ínter/alo de tiempo entre tramas sucesivas de teclado np Y"! Te i k JL i Sto p M Pos 87,20m; s CURSORES Tipo Tiempo

Fuente

Diferencia

23.5 8Hz

Curso 1r 76,00ms

Curso r2

CH1 2.00 V CH 2BO.Orn V M 10ms Señal de salida del recepto rGP1U52X y Seña l en la línea de datos del ¡nterfaz de teclado JL Sto p M Pos :49,6Qm s CURSORES AwywaWA^V^VwwywAW'AVA'ywyM'frSWy^ • ^ Tipo ¡i

Fuente

Diferencia 36,4Dms 21 Al Hz

Curso 1r 25,6Qms

Curso r2 62,ÜÜms

CH1 2, mT v ~ Intervalo de tiempo entre cada tres bytes enviados al puerto serial (línea RX de lRS232) JL 41 Sto p M Pos 56,00m! s CURSORES «wvMvnMsviSVi r -, r* "T' v*-*"T" r-t r <í íílí íí i "í r>- T'T^''T^r^Tn w r^rrr i •^T T**' rr* ^ WV 1 - - s \i s i ÍPT Q * % * i Vrt m * - .fc*- •u. í1 • *• r/ r**"1

: < « . ^ Fuente VI Vrt * y- *

"A ?+• 1 V % i Diferencia — ** ¡ VA M í t i i títílAtltl 1 ^ : I i 3 3 s i í i l í il i í i i í í í ur i i i 3 H i u i j 1 77,60m ( i Wl 1 U s * •^ •P^ ^M-^« r 4 r 4 V s Wv % j 12,6 9Hz j

A > y W 1 V Curso 1r V* -. V A V 13,20ms A * Wi • s V I V * ^ ^ Wi 1 U-UniríoI ?"JIr C2 •A •l V A \ W. Y, 3p,80ms SV. * vn .í 1 5 í í, .k v >\ Uo) Í 2 L CH1 2,oicV ( H2 S.QÜV M10rr1$ C-r / 10.7V En cuanto al alcance de los equipos remotos, en distancias hasta de 2 m son casi omnidireccionales. Se obtiene un satisfactorio desempeño hasta 6m. A distancias superiores, el sistema de control remoto implementado aún funciona bien, pero el usuario debe preocuparse por mantener siempre línea de vista directa entre el equipo terminal y los equipos remotos. Se probó el equipo a 9 metros y se obtuvo los siguientes resultados: El ángulo horizontal máximo del host medido es aproximadamente 25 grados, el ángulo horizontal máximo del periférico es aproximadamente 27 grados, el ángulo vertical máximo del host es aproximadamente 23 grados y el ángulo vertical máximo del periférico es aproximadamente 27 grados. Los ángulos anteriores hacen referencia al gráfico de la pagina 9. Un importante parámetro a tomarse en cuenta es el ambiente de desempeño. La presencia de muchas superficies reflectantes (vidrios) distorsiona notoriamente la señal, exigiendo al usuario una mayor directividad al usar los equipos remotos. Las fuentes de luz artificial pueden reducir también el alcance efectivo.

4.6 CONSTRUCCIÓN DEL EQUIPO Y COSTOS.

El control remoto de teclado, posee un circuito impreso de 8 cm de ancho y 8 cm de largo. Este circuito calza perfectamente dentro de una caja metálica con su respectiva tapa, esta caja tiene 3 cm de altura (ver siguiente fotografía). Al abrir la tapa de la caja, el usuario tiene acceso al circuito y al soporte para las baterías. El LED infrarrojo sale completamente de la caja metálica para aprovechar al máximo las radiaciones que produce al enviar tramas infrarrojas hacia el receptor. De igual manera, el LED rojo de señalización es visible desde fuera de la caja.

104 La construcción del control remoto de ratón se realiza con acrílico forrado de vínilo, para que sea fácil de transportar. Dicho control remoto tiene 7.5 cm de ancho por 14 cm de largo y 2.5 cm de altura. El circuito impreso utilizado tiene por ambos lados caminos impresos y se construyó sobre un material más liviano. La caja del control remoto de ratón se puede abrir para cambiar las baterías. Este control remoto permite acceder al circuito impreso fácilmente y esto facilita programar rápidamente el microcontrolador para quien desee modificar las flmciones asignadas a cada botón. También se pueden apreciar los dos LEDs de señalización hacia el usuario, así como el LED infrarrojo usado. En ambos equipos remotos el usuario debe, en lo posible, apuntar el LED infrarrojo en el frente de los equipos, hacia el receptor en el equipo terminal.

Control remoto de ratón

105 El Equipo terminal tiene un circuito impreso con dimensiones de 8 cm de ancho por 10 cm de largo. A este circuito se conectan los cables físicos que transportan la información hasta los puertos de] computador. Este circuito se introduce en una caja metálica con suficiente holgura para conectar los elementos electrónicos y manipular el equipo. La caja metálica en la que se introduce el circuito del equipo terminal es de 9.5 cm de ancho por 12 cm de largo y 6 cm de altura (ver siguiente fotografía). El recepíor se coloca en la cara frontal del equipo a media altura; así también, en la misma cara están los LED de señalización y el swicth que regula el tiempo de apagado. En la parte posterior de esta caja se encuentran: un conector para el adaptador de 12

Voltios DC3 un cable serial con conector DB9 para el ratón, un cable con conector AT para el teclado, un tomacorríente polarizado de computador que se conecta a HOv y el cable con enchufe polarizado de computador para alimentar de energía mediante este cable al computador. Finalmente se pinta de color negro el equipo terminal porque este color absorbe las radiaciones y no las refleja.

Equipo terminal

106 El costo del equipo, en US dólares, es el siguiente:

Circmtos impresos $15 Receptor Infrarrojo $6.5 Cajas $20.8 ICL232 $4.5 3 PIC16f84 $19.8 (en versión OTP cuestan c/u $2)

Relay iíD 1-L.- ^J Pulsantes, ca.bles y conectores $9.3 Elementos discretos (LEDs, resistencias, capacitores, $8 transistores, etc) Total $ 85.43

1 USD « S/. 12000 El costo total en sucres es de s/. 1'025.200. Al analizar el costo total debe tomarse en cuenta que: El costo del circuito impreso con sus respectivas cajas, es inicialmente alto, pero puede posteriormente reducirse a menos de la mitad. El receptor usado es de Radio Shack, otros fabricantes poseen elementos similares mucho más baratos. Se podría usar el microcontrolador PIC16F84 en su versión de memoria OTP. Finalmente la producción en serie bajaría todos los costos drásticamente.

107 CONCLUSIONES y RECOMENDACIONES:

• El prototipo desarrollado puede sin dificultad utilizarse en la mayoría de computadores modernos. Es idea] usarlo en programas que se puedan manejar a distancia como: presentaciones Power Point, Multimedia, programas interactivos de Internet, programas de control mediante el PC, software de uso dedicado, etc. • Su instalación y uso no es complicado, no requiere la instalación de ningún software adicional siendo transparente a los drivers estándar de PCs. • El costo del prototipo no es inicialmente elevado, factor muy importante, y se puede abaratar aún mucho más usando microcontroladores OTP. • La velocidad de transmisión de datos del estándar RC5 es baja pero suficiente para esta aplicación; sin embargo, si se desea mejorar la sensibilidad del sistema, especialmente del ratón infrarrojo, podría usarse el protocolo de la IrDA, pero su costo seria mayor y su estructura más compleja. • Otra vía para mejorar la sensibilidad del sistema es creando un driver propio, para el teclado y el ratón, pero esto exigiría crear un software adicional para el PC. • Existen muchos otros receptores infrarrojos modulares de menor costo que bien podrían usarse. Para el diseño se utilizó el receptor modular de Radio Shack que tiene buena sensibilidad. • El diseño exterior de los equipos puede hacerse aún más compacto y ligero, incluso ergonómico, para mejorarla presentación del equipo. • El microcontrolador usado en el control remoto de teclado puede ser uno con menor número de puertos E/S, como el PIC12c508 disponible también en versión OTP. • En abril de 1999 Microchip lanzó al mercado otro nuevos microcontroladores tipo F (memoria flash), con mayores capacidades en todo sentido, especialmente la capacidad de memoria. Estos chips permitirían hacer mejoras; por ejemplo, que el receptor pueda identificar mayor cantidad de protocolos de controles remotos universales y variaciones de las tramas RC5 solo mediante software sin necesidad de alterar el hardware. • El consumo de energía es reducido en el control remoto de ratón; sin embargo, en el control remoto de teclado, puede mejorarse el consumo de energía usando baterías de superior calidad. • El equipo terminal debe ser colocado en un sitio visible., aislado de ambientes rodeados por vidrios o materiales similares. El mismo puede estar siempre encendido. • Puede crearse en adición al equipo un hardware que permita conmutar el manejo del ratón remoto y el ratón normal del computador. Este hardware debería detectar el ratón que está

108 enviando datos; así, en programas que requieran mucha sensibilidad del ratón no se tendría la necesidad de desconectar el ratón remoto. El diseño concibe un equipo que es muy flexible que, con pequeñas variaciones al sistema de control remoto implementado, puede ser usado para controlar diferentes equipos electrónicos. En el Internet existe amplia información sobre prototipos infrarrojos, ninguno con las características del prototipo realizado en esta tesis; por tanto, esta idea se puede expJotar mas, con fin de plasmarla como un equipo comercial.

109 BIBLIOGRAFÍA

ABEL, Peter (1996). "Lenguaje ensamblador y programación para PC IBM y compatibles". Editorial Prentice Hall, Columbia, Tercera edición . - ÁNGULO José. ÁNGULO Ignacio(1997). "Microcontroladores PIC Diseño practico de

aplicaciones". Editorial McGraw-Hill3 Madrid, Primera edición. - Aplicación AN1723(1997). "Merfacing MC68HC05 microcontrollers to the IBM at Keyboard interface". Motorola, USA. - BLASEWTTZ, Robert. STERN Frank (1982). "Microcomputer Systems". Editorial Hayden. USA. Primera edición. - IrDA(1998). "IrDA Control Specification versión 1.0". IrDA, USA, Primera Edición.

- LEIBSON, Steve (1983). "Macrocomputer Merfacing". Editorial TAB, USA, Primera edición. - NATIONAL TELECOMUNICATIONS AND INFORMATION ADMINISTRATION(1996). "Distribución del espectro". Catalogo Newport, USA. - MICROCHEP (1997). "Embedded control handbook". Microchip, USA, Volumen I, Primera edición. - RUBIO, Baltazar(1995). "Intrpducción a la ingeniería de la fibra óptica". Editorial Addison- Wesley, España, Primera Edición.

DIRECCIONES DE INTERÉS EN INTERNET

Energizer: http://www.energizer.com Estándar RC5 : http://www.kouvola.ksaok.fi/~aylatalo/IR/ IrDA: http://www.irda.org/ Información general Ir: htrp ://godot.tuniv.szczecin.pl/~inja skula/tomi/opto.html Infonnación general sobre ratón de PC: http://www.4qd.co.uk/faq/meece.html http://www.luit.fi/Misc/Electronics/pc/mterface.htiTÜ^^ouse lit±p://www.hutfi/-1iien/mytexts/mouse.html Información general sobre teclados : http://www.hut.fi/Misc/Electronics/pc/mterfa ce.htrnl#keyboard Microchip: http://www. microchip.com Motorola: http://www.motorola/sps/

110 ANEXO A MANUAL DEL USUARIO

El control remoto de PC permite manejar el computador a distancia y realizar las tareas más comunes cómodamente. Se requiere un computador con teclado AT, puerto serial para ratón y preferiblemente el sistema operativo WINDOWS 95 / 98. Se compone de tres equipos: 1. Equipo terminal, 2. Control remoto de teclado; y, 3. Control remoto de ratón

RECEPTOR DE SEÑALES O EQUIPO TERMINAL

CARA FRONTAL CARA POSTERIOR

adaptadorl 2 VDC + tiempo -s o - tiempo

8 cm conector Inferior C macho) RECEPTOR D D a

9.5 cm Conectar aquí el cable de alimentación de energía

el largo del equipo terminal son 12cm

cable de teclado AT Cable de alimentación ^ ••—\a el PC

(hembra) conector serial DBS

El equipo debe ubicarse en un lugar visible para que pueda recibir las señales enviadas por los controles remotos que facilitarán manejar el computador a distancia; es preferible que no estén, fuentes de luz ubicadas muy cerca. El equipo terminal tiene en su parte posterior dos conectores y tres cables que se conectan al computador. El cable A (ver figura anterior), el más grueso, debe conectarse a la alimentación de energía en el computador, dicho cable tiene en su extremo final un conector polarizado hembra; y, el cable de alimentación de energía (110 voltios) debe conectarse en el conector inferior (macho) del equipo terminal, en VQZ de conectarse directamente al computador. Los dos cables restantes se conectan al puerto del teclado (cable B) y al puerto serial DB9 (cable C) del computador y sus conectores físicos solo calzan en los sitios adecuados. Finalmente, se debe utilizar un adaptador de 12 Vdc y enchufarlo al conector pequeño, situado en la parte posterior del equipo. Una vez realizadas estas conexiones el equipo terminal está instalado y en espera por señales desde los equipos remotos. En la parte frontal del equipo hay un switch y dos LEDs. Normalmente el LED rojo se enciende indicando que el equipo terminal está conectado y el computador está apagado. Cuando se enciende el computador el LED rojo se apaga. El computador se enciende mediante la presión del botón ene / apag en los equipos remotos, si se presiona nuevamente el mismo botón, entonces el equipo terminal apaga el computador. Una vez encendido el equipo es normal que el LED rojo parpadee, esto indica la recepción de señales délos equipos remotos. El LED amarillo se enciende cuando el botón de poder en el computador se encuentra en el estado de apagado. Por lo tanto, el usuario puede apagar automáticamente el computador itsando los equipos remotos, o apagar manualmente el computador presionando el botón de poder en el mismo. Si al apagar automáticamente el computador, éste se apaga antes de que WINDOWS haya cerrado el sistema, entonces se debe mover el switch del equipo terminal hacia su posición- superior; ésto retardará aún más el tiempo de apagado. Al apagar el computador hay que tener presente que siempre que se presionen botones o teclas en los equipos remotos se retardará 20 segundos más el apagado del computador. En caso de no usar el sistema operativo WINDOWS, se debe cerrar el sistema en forma manual y entonces se debe presionar el botón ene / apag en los equipos remotos. CONTROL REMOTO DE TECLADO.

CARA FRONTAL CARA POSTERIOR

ENC; APAG 3cm ®

LED IR LED ROJO conector AT de teclado

8 cm

El único botón en el frente del equipo es para encender y apagar el computador, además la cara frontal del equipo debe apuntar siempre a la ubicación del equipo terminal. Este equipo permite usar el teclado a distancia y simular el ratón; funciona con cuatro baterías alcalinas que se colocan abriendo la tapa superior del control remoto de teclado. En su parte posterior se encuentra un conector en el cual se enchufa el teclado AT. Al presionar cualquier tecla el LED rojo en el frente debe encenderse y esto indica un buen funcionamiento. Usar el teclado corno ratón solo requiere la presión de la tecla Bloque de desplazamiento (Scroll Lock), si su respectivo LED está encendido en el teclado, se puede usar el teclado numérico para mover el ratón como indica el siguiente gráfico.

Scroll Scroll TECLADO NORMAL Lock Teclado con Interfaz Lock

La tecla 5 conmuta entre la velocidad lenta y rápida de movimiento del ratón, mientras que la tecla O y punto decimal simulan la presión de los botones izquierdo y derecho en el ratón. Para utilizar el teclado numérico normalmente se debe presionar nuevamente la tecla Bloque de Desplazamiento. Si el control remoto de teclado no funciona correctamente hay que cerciorarse que se está apuntado el frente del mismo hacia el receptor y que las baterías se encuentran en buen estado; se estima una duración de las baterías superior a las 10 horas de trabajo continuo. Si el equipo no se va a usar periódicamente es conveniente sacar las baterías del control remoto.

CONTROL REMOTO DE RATÓN.

Este control permite desplazar el ratón y simular la presión de algunas teclas y funciones muy comunes, facilita el uso del Internet Explorer 5.0 (TE).

LED IR

acelerador Windows cerrar ESC

btt izquierdo btt derecho O O arriba O izquierda Q Q derecha O abajo 14 cm

letra -f avance

letra - ENTER 2nd fuñe

LED amarillo LED verde

7.5 cm

El control remoto necesita cuatro baterías alcalinas AA para operar bien. La función de los botones se indica en la tabla A, las letras en paréntesis representan las teclas equivalentes en el control remoto de un equipo de video Phillips: TABLA A ene/ apag Enciende y apaga el equipo

Acelerador 1. Fuñe: Acelera los movimientos de ratón (5) 2. Fuñe: Cambia la sensibilidad del ratón Windows 1. Fuñe: Entrar al menú de Windows 2. Fuñe: Ingresar tabulación (TAB) Cerrar 1. Fuñe: Cierra el programa activo 2. Fuñe: Abrir favorito en I E ESC 1. Fuñe: Tecla escape 2. Fuñe: Abrir historial en IE Botón izquierdo 1. Fuñe: Botón Izquierdo de ratón (0) 2. Fuñe: Ninguna Botón derecho 1. Fuñe: Botón derecho de ratón (STOP) 2. Fuñe: Menú secundario de Windows Arriba 1. Fuñe: Mover ratón hacia arriba (2) 2. Fuñe. Desplazar cursor hacia arriba Abajo 1 . Fuñe: Mover ratón hacia abajo (8) 2. Fuñe: Desplazar cursor hacia abajo Derecha 1. Fuñe: Mover ratón hacia la derecha (6) 2. Fuñe: Desplazar cursor hacia la derecha Izquierda 1. Fuñe: Mover ratón hacia la izquierda (4) 2. Fuñe: Desplazar cursor hacia la izquierda Letra + 1. Fuñe: Introduce letras desde la A hasta la 2. , orden ascendente (ch+) 2. Fuñe: Introduce símbolos y números en orden ascendente Letra — 1. Fuñe: Introduce letras desde la Z hasta la A, orden descendente (ch~) 2. Fuñe: Introduce números y símbolos en orden descendente Avance 1. Fuñe: Desplaza el cursor hacia la derecha (Avance de cinta) 2. Fuñe: Tecla retroceso (Backspace) Enter 1. Fuñe: Introduce ENTER (PLAY) 2. Fuñe: Introduce MAYÚSCULAS

2Ma fuñe Alterna la función de las teclas (retroceso de cinta) El LED amarillo encendido indica que se usa la segunda función en todos los botones. Los movimientos del ratón en diagonal se logran oprimiendo simultáneamente los botones de avance de ratón que forman ese movimiento; por ejemplo, arriba y derecha mueven al ratón en la diagonal superior derecha. Para realizar el mismo movimiento usando el control remoto Phillips de un equipo de vídeo se debe presionar el botón del canal 3.

Si se desea hacer arrastres con el ratón es necesario mantener presionando el botón ££btt izquierdo" y oprimir los botones de avance de ratón en el sentido necesario. Las combinaciones de teclas de la tabla B son permitidas: TABLAB Izquierda - Derecha 1. Fuñe: Mostrar historial en la barra de direcciones del I E. 2. Fuñe :Conmutar a pantalla completa del IE Botón izquierdo — arriba 1. Fuñe :Arrastre del ratón hacia arriba 2. Fuñe: Seleccionar el texto en la barra de direcciones del lE Botón izquierdo — abajo 1. Fuñe: Arrastre del ratón hacia abajo 2. Fuñe: Agrega "www." Al principio y ".com" al final del texto escrito en el IE Botón izquierdo - izquierda 1. Fuñe: Arrastre del ratón hacia la izquierda 2. Fuñe: Ira pagina anterior del IE Botón izquierdo -derecha 1. Fuñe: Arrastre de! ratón hacia la derecha 2. Fuñe; Ira pagina siguiente del IE Arriba — derecha 1 Fuñe: Desplazamiento diagonal (3) 2. Fuñe: Pagina arriba Abajo -derecha 1. Fuñe: Desplazamiento diagonal (9) 2. Fuñe: Pagina abajo Arriba -izquierda 1. Fuñe: Desplazamiento diagonal 0) 2. Fuñe: Tecla inicio Abajo -izquierda 1. Fuñe: Desplazamiento diagonal (7) 2. Fuñe: Tecla fin

Si el control remoto de ratón no funciona correctamente hay que cerciorarse de estar apuntado el frente del mismo hacia el receptor y que las baterías se encuentran en buen estado. Se estima una duración de las baterías entre 20 y 30 horas de trabajo continuo. No es conveniente iisar los equipos a distancias superiores a 9 metros, pues el receptor no podría recibirlas señales enviadas. ANEXO B ANEXO B

El CÓDIGO RC5

Se presentan algunas direcciones y comandos de equipos Phillips. Dirección Equipo 0 Tvset 2 Teletex 5 Video recorder 7 Experimental 16 Preamplifier 17 Receiver/tuner 18 Tape/cassette recorder 19 Experimental

Comandos :

Commnd: Video mode: LV1 Video mode: VCRl £ VCR2 Video mode: Satellite Group 4 Group 5 (VCRl) 6 (VCR2) Group 8

0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7

9 9 10 picture number/time 1/2 digits/AM/PM 1/2 digits 11 channel number channel/program mode channel/program mode 12 standby standby standby 13 mute/demute mut e/demute mute/demute 14 P.P. {personal pref.) P.P. P.P. 15 display display display 16 volume + volume 4 volume + 17 volume - volume - volume - 18 brightness 4 brightness 4- brightness + 19 brightness - brightness - brightness - 20 colour saturation + colour saturation + colour saturation + 21 colour saturation - colour saturation - colour saturation - 22 bass 4 bass + bass 4 23 bass - bass - bass - 24 treble + treble + treble + 25 treble - treble - treble - 26 balance right balance right balance right 27 balance left balance left balance left 28 repeat once/TSPo ITR (OTR) delay 29 repeat cont/TSPc tiruer programming 30 next record select 31 fast run reverse fast run reverse 32 entry step 4- channel/program + 33 auto stop/memory step - channel/program - 34 slow run reverse slow run reverse 35 audio 1 audio output select language select/mode 1 36 audio 2 elock/channel special stereo on/off 37 still picture speed - audio mixed / mode 2 38 speed 4- speed 4 39 speed - Instant Time Recording 40 slow run forward slow run forward 41 still forward still forward 42 fast run forward fast run forward 43 search automatic índex sean 44 sean reverse sean reverse 45 open/close (ej ect) eject 46 sean forward sean forward subtitle 47 play reverse play reverse 48 pause pause pause 49 erase erase erase 50 rewind rewind rewind 51 go to go to go to 52 wind wind wind 53 play play 54 stop stop stop 55 recording recording recording 56 external 1 external 1 external 1 57 external 2 external 2 external 2 58 clear all memory short/long play 59 freeze segment counter memory 60 TXT (pal)/ant.sw (ntsc) scroll local display TXT submode 61 system standby system standby system standby 62 CX on/off RF switch 63 system select system select system select 64 surround sound surround sound surround sound 65 balance front balance front balance front 66 balance rear balance rear balance rear 67 sound effects sound effects sound effects 68 sound effects sourid effects sound effects 69 sound effects sound effects sound effects 70 sound effects sound effects sound effects 71 sound effects sound effects sound effects 72 sound or menú fuñe. sound or menú fuñe, sound or menú fuñe, 73 sound or menú fuñe. sound or menú fuñe, sound or menú fuñe, 74 sound or menú fuñe. sound or menú func. sound or menú fuñe. 75 data stream start 76 data stream end 77 linear function up linear function up linear function up 78 linear function down linear function down linear function down 79 sound or menú fuñe, catalogue sound or menú fuñe. 80 cursor step up cursor step up cursor step up 81 cursor step down cursor step down cursor step down 82 menú on menú on menú on 83 menú off menú off menú off 84 display A/V status display A/V status display A/V status 85 cursor step left cursor step left cursor step left 86 cursor step right cursor step right cursor step right 87 menú function acknowledge menú function 88 PIP on/off PIP on/off PIP on/off 89 PIP shift PIP shift PIP shift 90 PIP main swap PIP main swap PIP main swap 91 strobe on/off strobe on/off strobe on/off 92 multi strobe multi strobe multi strobe 93 main freezed main freezed main freezed 94 3/9 multi sean 3/9 multi sean 3/9 multi sean 95 PIP mode select PIP mode select PIP mode select 96 mosaic mosaic mosaic 97 solarization solarization solarization 98 main stored main stored main stored 99 PIP strobe PIP strobe PIP strobe 100 recall main recall main recall main 101 PIP freeze PIP freeze PIP freeze 102 PIP step up PIP step up PIP step up 103 PIP step down PIP step down PIP step down 104 automatic start ID 105 write skip ID 106 .skip on/off 107 write end ID 108 write FTS 109 write TOC 110 111 112 viss Índex next 113 viss Índex previous 114 mark 115 erase 116 renumber 117 blank search 118 sub mode sub mode Wl 119 sub mode sub mode sub mode 120 auto repeat 121 insert temp 122 ser loe disp 123 connect connect connect 124 disconnect 125 126 127

Copiado del Artículo "Remote Control for HP28S" escrito por: Michiel Niemeijer y Eric Toonen. O OX3NV ANEXO C

CÓDIGOS DE RASTREO PARA UN TECLADO MFII OPERANDO EN

EL MODO 2

TECLADO NORMAL

Tecla Código de presión Código de liberación • #OE #FO #OE 1 #16 #FO#16 2 #1E #FO#1E 3 #26 #FO #26 4 #25 #FO#25 5 #2E #FO #2E 6 #36 #FO #36 7 #3D #FO #3D 8 #3E #FO#3E 9 #46 #FO#46 0 #45 #FO#45 - #4E #FO#4E = #55 #FO#55 Backspace #66 #FO#66 Tab #OD #FO #OD Q #15 #FO#15 W #1D #FO#1D E #24 #FO #24 R #2D #FO #2D T #2C #FO #2C Y #35 #FO #35 U #3C #FO #3C I #43 #FO#43 O #44 #FQ#44 P #4D #FO#4D [ #54 #FQ #54 1 #5B #FG #5B \s Lock #5D #FQ #50 #58 #FO #58 A #1C #FO#1C S #1B #FO#1B D #23 #FO#23 F #2B #FO #28 G #34 #FO#34 H #33 #FO #33 J #38 #FO #3B K #42 #FO#42 L #4B #FO#4B j #4C #FO#4C 1 #52 #FO #52 Enter #5A #FO #5A Left Shift #12 #FO#12 Z #1A #FO#1A X #22 #FO#22 C #21 #FQ#21 V #2A #FO #2A B #32 #FO#32 N #31 #FO #31 M #3A #FO #3A , #41 #FO#41 . #49 #FO#49 / #4A #FO#4A Right Shift #59 #FO #59 Lert Ctrl #14 #FO#14 LeftAIt #11 #FO#11 Space #29 #FO #29 Right Alt #EO#11 #EO#FO#11 Right Ctrl #EO#14 #EO#FO#14 ESC #76 #FO#76 WINDOWS1 #EO#1F #EO#FO#1F WINDOWS2 #EO #2F #EO#FQ#2F

Teclas de Función

F1 #05 #FO #05 F2 #06 #FO #06 F3 #04 #FO #04 F4 #OC #FO #OC F5 #03 #FO#03 F6 #08 #FO #OB F7 #83 #FO #83 F8 #OA #FO #OA F9 #01 #FO #01 F10 #09 #FO #09 F11 #78 #FO #78 F12 #07 #FO #07

Teclado Numérico

NumLok #77 #FO #77 KP- #7B #FO #7B KP/ #EO#4a #EO#FO#4A Nota 1,2 KP. #71 #FO #71 KP* #7C #FO#7C KP+ #79 #FO #79 KPEnter #EO #5a #EO #FO #5A KPO #70 #FO #70 KP1 #69 #FO#69 KP2 #72 #FO#72 KP3 #7a #FO #7A KP4 #6B #FO#6B KP5 #73 #FO #73 KP6 #74 #FO#74 KP7 #6C #FO#6C KP8 #75 #FO #75 KP9 #7D #FO #7D Teclado extendido

Ins #EO #70 #EO#FO#70 Nota 1,2, 3 Home #EO #6C #EO#FO#6C Nota 1,2, 3 PgUp #EO #7D #EO#FO#7D Nota 1,2, 3 Del #EO #71 #EO#FO#71 Nota 1,2, 3 End #EO#69 #EO#FO#69 Nota 1,2, 3 Pg Dn #EO #7A #EO#FO#7A Nota 1,2, 3 Up Arrow #EO #75 #EO#FO#75 Nota 1,2, 3 Left Arrow #EO#6B #EO#FO#6B Nota 1,2, 3 Right Arrow #EO #74 #EO#FO#74 Nota 1,2, 3 Down Arrow #EO #72 #EO#FO#72 Notal, 2, 3 PrtSc #EO#12#EO#7C #EO #FO #7C #EO #FO #12 Ctl-PrtSc #EO #7C #EO #FO #7C Alt-PrtSc #84 #EO#84 ScrLk #7E #FO #7E Pause #E1 #1 4 #77 #E1 #FO #1 4 #77 No Ctrl-Break #EO#7E#EO#FO#7E No

Nota 1 Si Left Shift ésta presionado: Secuencia de presión - #EO #FO #12 #** #** Secuencia de liberación _ #** #** #** #EO #12 Nota 2 Si Right Shift ésta presionado: Secuencia de presión - #EO #FO #59 #** #** Secuencia de liberación - #** #** #** #EO #59 Nota 3 Si LED Num Lock está encendido: Secuencia de presión - #EO #12 #** #** Secuencia de liberación - #** #** #** #EO #FO #12

Los símbolos '#** #**' representan el código de presión y '#** #** #**' el código de liberación. ANEXO D MlCROCHIF» PIC18F8X 18-pin FlashTEEPROM 8-Bit Microcontrollers

Devices Included in this Data Sheet: Pin Diagrams • PIC16F83 PDIP,SOIC • PIC16F84 • PIC16CR83 RA2 —~ c .1 ^^ 18 3 RA1 • PIC16CR84 RAS —-- C 2 17 P — RAO • Extended voltage range devices available RA4/TOCKI —— c 3 -u -o 16 3 -OSC1/CLKIN (PIC16LF8X,P1C16LCR8X) MCDT — — r 4 0 0 15 U OSC2/CLKOUT Vss — c 5 di Oí 14 3 VDD High Performance RISC CPU Features: O TI RBO/INT — ~c 6 TT °> J3 I— RB7 OJ X • Only 35 single word ¡nstructions to learn RB1 — c 7 X 12 3 ~RB6 • Al! ¡nstructions single cycle except for program RB2 —- c 8 11 :-^-^RB5 branches which are two-cycle RB3 — c 9 10 i—-RB 4 • Operating speed: DC -10 MHz clock input DC - 400 ns ínsíruction cycle Special Wiicrocontrolíer Features: Program Data Data Max. Device Memory RAM EEPROM Freq • )n-C¡rcuit Serial Programming (ICSP™) - vía íwo (words) (bytes) (bytes) (MHz) pins (ROM devices support only Daia EEPROM PIC16F83 51 2 Flash 36 64 10 programming) PIC16F84 1 K Flash 68 64 10 • Power-on Reset (POR) PIC16CR83 51 2 ROM 36 64 10 • Power-upTimer(PWRT) PIC16CR84 1 KROM 68 64 10 • OscillatorStart-upTimer(OST) • 14-bit wide insíructions • Watchdog Timer (WDT) with its own on-chip RC • 8-bit wide data path oscillatorforreliable operation • 15 special function hardware registers • Code-proíecíion • Eight-level deep hardware stack • Power saving SLEEP rnode • Direct, indirect and relative addressing modes • Selectable oscillator options • Four ¡nterrupt sources: CMOS Flash/EEPROM Technology: - Externa! RBO/INT pin • Low-power, high-speed technology - TMRO timer overflow • Fully staíic design - PORTB<7:4> interrupt on change - Daia EEPROM wriie complete • Wide operating voltage range: - Commercial: 2.0V to 6.0V • 1000 erase/wriíe cycles Flash program memory - Industrial: 2.0Vto6.0V • 10,000,000 erase/write cycles EEPROM data mem- • Low powerconsumption: ory • EEPROM Daia Reiention> 40 years - <2mAíypicat@ 5V,4!^Hz - 15 ,UA iypical @ 2V, 32 kHz Peripheral Features: - < 1 ¡lA iypical standby currení @ 2V • 13 I/O pins with individual direction control • High current sink/source for direct LED drive - 25 mA sink max. per pin - 20 mA source max. per pin • TMRO: 8-bit timer/counterwiíh 8-bií programmable prescaler

.:^^»iaCTa¡S(iaM^ggB'»^^ © 1998 Microchip Technology Inc. DS30430C-page 1 PIC16F8X

TABLE4-1 REGISTER FILE SUMMARY

Valué on Valué on al! Address Ñame Bit? BH6 Bit 5 Bit 4 Bit3 Bit 2 Bill BitO Power-on other resets Reset (NoteS) BankO 00 h INDF Uses contents of FSR to address data memory (not a physteal register)

01 h TMRQ B-hit real-tlme clock/counter XX3OC XXXX uuuu uuuu Q2h PCL Low ordera bits of the Program Counter (PC) DDDD 0000 0000 0000

03h STATUS P) IRP RP1 RPO TO" PD Z DC C 0001 Ixxx OOOq quiñi 04h FSR tndlrect data memory address polnter 0 xxxx xxxx uuuu uuuu _ G5h PORTA — — RA4/TOCKI RAS RA2 RAÍ RAO X XXXX u uuuu Q6h PORTE RB7 RB6 RB5 RB4- RB3 RB2 RB1 RBQAMT xxxx xxxx uuuu uuuu Q7h Unimplemented location, read as '0"

oah EEDATA EEPROM data register xxxx xxxx uuuu uuuu 09 h EEADR EEPROM address register xxxx xxxx uuuu uuuu _ OAh PCLATH — ~ WritebutferforupperS bits of the PC^J -- -0 0000 -—0 0000 OBh IWTCON cíe EEIE TOIE ItvTTE RBIE TOIF INTF RBIF 0000 OOOx 0000 OOOu Bankl 80 h INDF Uses contents of FSR to address data memory (not a physlcal register) OPTION aan 1111 1111 1111 81 h RBPTJ INTEDG TOCS TOSE PSA PS2 PS1 PSO REG 82h PCL Low ordera bits of Program Counter (PC) 0000 0000 0000 0000 83h STATUS & !RP RP1 RPO TO' PD Z DC C 0001 Ixxx ÜOOg quuu 84h FSR Indlrect data memory addrass polnter 0 xxxx xxxx uuuu uuuu B5h TRISA • •••^••: : ::- '—-.". • :v^--.;:: PORTA data d rcction register 1 1111 — 1 1111 B6h TRISB PORTB data direction register 1111 1111 1111 1111 ___ B7h Unlfpplemenfed (acallan, read as '0* •*'— -1- san EECON1 — — — EEIF WREHR WREN WR HD —0 xDOO 0 qDOD B9h EECON2 EEPROM control register 2 (not a physfcal register)

OAh PCLATH — _ _ Wriíe buHer íor upper 5 bits oí the PC t1 ) — - D 0000 —0 DOGO QBfi INTCON GIE EEIE TOJE JWTE HBIE TOIF fNTF RBIF 0000 OOOx 0000 OOOu Legend: x = unknown, u = unchanged. - = unimplemented read as '0', g= valué depends on condition. Note 1: The upper byte oí the program counteris not direclly accessible. PCLATH is a slave register forPC<12:B>.The contents of PCLATH can be transferred to the upper byte of the program counter, but the contents of PC<12:8> ¡s never trans- íerred to PCLATH. The TO and PD status bits in the STATUS regisíer are noí affected by a MCLH reseí. Other (non power-up) resets include: external reset through Í«ÍCTR and Ihe Watchdog Timer Reset.

DS30430C-page H © J998 Microchip Technology Inc. PIC16F8X

TABLE 9-2 PIC16FXX INSTRUCTION SET

Mnemonic, Description Cycles 14-B¡tOpcode Status Notes Operands Affected MSb LSb

BYTE-ORIENTED FILE REGISTER OPERATIONS ADDWF f, d AddWandf 1 00 0111 dfff ffffC.DC.Z 1,2 ANDWF f, d AND W with f 1 00 0101 dfff ffff Z 1.2 CLRF í Clear f 1 00 0001 lEff ffff z 2 CLBW Olear W 1 00 0001 Qxxx xxxx z COMF f, d Complement í 1 00 1001 dfff ffff z 1,2 DECF t, d Decrement f 1 00 0011 dfff ffff z 1.2 DECFSZ f, cf Decrement f, Skíp ¡f 0 1(2) 00 1011 dfff ffff 1,2,3 INCF f, d Increment f 1 00 1010 dfff ffff z 1,2 INCFSZ f, d Incrementf, Skiplf 0 1(2) 00 1111 dfff ffff 1,2,3 IORWF í d -\ -ii ,¿.o MOVF f,d Movef 00 1000 dfff ffff z 1%2 MOVWF f Move W to f 1 00 0000 Ifff ffff NOP No Operation 1 00 0000 OxxO 0000 RLF f, d Roíate Left f tnrough Carry 1 00 1101 dfff ffff c 1,2 RRF f, d Rotale Right f íhraugh Carry 1 00 1100 dfff ffff c 1,2 SUBWF f,d SubtractWfromf 1 00 0010 dfff ffff C.DC.Z 1,2 SWAPF f, d Swap nibbies jnf 1 00 1110 dfff ffff 1,2 XORWF f, d Exclusive OR W with f 1 00 0110 dfff ffff z 1,2 BIT-ORIENTED FILE REGISTER OPERATIONS BCF f, b Bit Clear f 1 01 OObb bfff ffff 1,2 BSF f, b Bit Set f 1 01 Olbb bfff ffff 1,2 BTFSC f, b Bit Test f, Skipif Clear 1(2) 01 lOhb bfff ffff 3 BTFSS f, b Bit Test f, Skip íf Set 1(2) 01 llbb bfff ffff 3 LITERAL AND CONTROL OPERATIONS ADDLW fe Add literal and W 1 11 11 Ix kkkk kkkk C.DC.Z ANDLW k AND literal with W 1 11 1001 kkkk kkkk Z CALL k Cali subroutine 2 10 Okkk kkkk kkkk CLRWDT - Clear Watcndog Timer 1 00 0000 0110 0100TO.PD GOTO k Go to address 2 10 Ikkk kkkk kkkk IORLW k Inclusive OR literal with W 1 11 1000 kkkk kkkk Z MOVLW k Move literal to W 1 11 QOxx kkkk kkkk RETFIE Return from triterrupt 2 00 0000 OQQQ 1001 RETLW k Return wílh literal in W 2 11 QlxK kkkk kkkk RETURN Return from Subroutine 2 00 0000 0000 1000 SLEEP Go into standby mode 1 00 0000 0110 0011TO.PÜ SUBLW k Sublracl W from literal 1 11 HQx kkkk kkkk C,DC,Z XORLW k Exclusive OR literal with W 1 11 1010 kkkk kkkk Z Note 1: When an I/O register is modified as a function of itself ( e,g., HOVF PORTB, 1), the valué used will be that valué present onthe pins themselves. Forexample, ¡fthe data ¡aterí is '1'fora pin configuradas inputandfs driven low by an externa! device, the data will be written back with a 'O'. 2: If this instruciion is executed on theTMRO regisler (and, where applicable, d = 1), the prescalerwill be cleared if assigned to the TimerO Module. 3: U Program Counter (PC) is modified or a condrtional test is true, the instruction requires two cycles.The second cycle is executed as a NOP.

DS30430C-page 54 © 1998 Microchip Technology Inc. ANEXO E Programa principal del contral remoto de teclado

llst p=16f84 include

BANDERA EQU H'000C' registro de banderas Contador EQU H' 0000' lleva la cuenta de los bit en RX o TX paridad EQU H'00 0E' control de errores buffer EQU H'000F' almacenda datos del teclado enviados por IR bufferout EQU H'0010' almacena dato enviado del host al teclado BANDERA2 EQU H'0011' bandera auxiliar para tipo de datos especiales Temporal EQU H1 0012' registro auxiliar, varios usos keyleds EQU H' 0013' conserva el estado de led de teclado pruebajm EQU H' 0014' registro auxiliar contadorcero EQU H1 0015' registro auxiliar información IR contadoruno EQU H'0016' registro auxiliar información IR BANDERAS EQU H1 0017' bandera de control de flujo de programa temporall EQU H1 0018' registro auxiliar anterior EQU H1 0019 ' registro auxliar del bit solteanterior (SA)

#def ine clkln PORTE ,0 lee linea de reloj #define clkout PORTB ,1 modifica el estado de linea de reloj #define datain PORTB ,2 lee linea de datos #define dataout PORTB ,3 modifica el estado de linea de datos tfdefine TXserle PORTB ,4 usado en pruebas para sondear datos enviados por el teclado #define puertoIR PORTB .5 pin usado para manejar el led infrarrojo

#define enviando PORTB,6 pin usado para el led rojo de información #define btt_power PORTB,7 pin para chequear el estado del pulsante

#define inicio BANDERA,O banderas para controlar el flujo de datos #define error BANDERA, #tfef1ne reciACK BANDERA, #define TX BANDERA, #define RX BANDERA, #define parid BANDERA, #define para BANDERA,6

#define nuboEO BANDERA2.0 marca que se recibió E0 #define huboF0 BANDERA2.1 marca que se recibió F0 #define TIPO BANDERA2.3 bandera para configurar modo de operación #define SI_t1empo BANDERA2.4 #define Simouse BANDERA2.6 indica que se simula trama de ratón

#define doblelR BANDERA3.0 bandera para responder comando de dos bytes #define repite? BANDERAS,1 bandera de repeticón de envío de trama IR #def1ne NUM_CAPS BANDERAS, 2 indica tecla correspondiente a un led del teclado #def ine solteanterlor BAN indica liberación de ultima tecla enviada por IR #def1ne dobleTX_IR BANDERAS, doble TX de IR #define huboEl BANDERAS, 5 bandera para la teclas especiales

org 0 goto setup org 4 goto interrup org 10 setup configurar puertos y registros del PIC bcf STATUS, RP0 cambio banco 0 (me aseguro) movlw b'00010000' movwf INTCON configuro las interrup. bsf STATUS, RP0 cambio banco l movlw b' 10010Q101 movwf OPTION REG uso flanco negativo, y el configura tímer interno movlw b1 10000101' configura PORTB movwf TRISB cargo PORTB movlw b1 00011000' configura PORTA movwf TRISA cargo PORTA bcf STATUS, RP0 cambio al banco 0 movlw b1 00000101' movwf PORTB movlw b' 000000001 movwf PORTA clrf BANDERA borro los registros clrf BANDERA2 borro los registros clrf BANDERAS borro los registros clrf buffer clrf keyleds cali ocupado evito recibí r datos cali rxprepa ALISTO LA rx principal bucle de espera por algún evento

btfss btt_power sondea el estado del botón de encendido

1 de 13 cali encender bsf INTCON,GIE goto principal ; espero por una interrupción

Esta rutina recibe datos del teclado interrup

; analizo si es RX o TX btfsc RX goto RXrut goto TXrut RXrut btfsc inicio ; es bit de inicio goto RXdatos ; si no es inicio empiezo a recibir

; seteo la RX, asumo que es el bit de inicio este primer flanco

btfsc datain compruebo que es cero goto error_rut en caso de error

movlw d'91 movwf contador cargo el contador bsf inicio pongo flag de inicio clrf paridad reseteo paridad bcf INTCON, INTF borro indicador de Interrupción retfie

RXdatos btfsc para ; recibo bit de parada? goto RXPARADA decfsz contador, F ; decremento contador goto sigue goto chequea_paridad sigue setc ; recibo dato en el pin datain en el carry btfss datain el re rrf buffer.F ; introduzco el carry como msb y roto el byte btfsc buffer.7 ; si es 1, debo incrementar paridad incf paridad.F listo bcf INTCQN, INTF retfie ; retorno GIE = 1 chequea_paridad setc btfss datain el re rlf buffer.W introduzco como Isb la paridad andlw h ' 0001 ' elimino los demás bits xorwf paridad, Ví xor con paridad andlw h ' 0001 ' elimino los demás bits btfsc STATUS ,Z comparo la paridad bsf error en caso de error bsf para me preparo a recibir bit de parada bcf INTCON, INTF retfie

RXPARADA

btfss datain ; compruebo que es alta goto error rut ; en caso de error bcf RX ; borro bit RX bcf para bcf inicio ; t sngo que tomar la señal de reloj y ponerla en baja, usando clkout bsf clkout ; lógica negada ***********

En esta parte analizo que recibí, y según esto eligo que puerto de TX usar.

ahora tengo 50 (75-120 instrucciones) microseg para tomar la siguiente decisión. si recibí una tecla con mas de un byte, y si no hubo error, sigo en RX. si era la señal de un led por encender o deseo retransmisión, me preparo para TX. identifico que recibir

Main btfss error hubo error ? goto mainQ0 movlw H'00FE' movwf bufferaut cargo en el buffer de salida FE, re-envio bcf error borro el flag de error goto TXsetea marco este bit para prepararme a TX nía i n 00

2 de 13 movlw H'El' es del teclado extendido xorwf buffer, W marco el bit y envío por IR btfss STATUS , 2 goto mainl bsf huboEl goto INFRA_RUT mainl movlw H'QOEO1 es del teclado extendido xorwf buffer, W en este caso sigo en RX btfss STATUS , Z goto ma1nl__l bsf huboEO marco la bandera de E0 goto sirve mainl_l

movlw H'AA' es de comprobación encendido xorwf buffer, W ordeno el modo de operación btfss STATUS , Z goto main2

movlw h'FQ' F0, seteo el tipo de teclado movwf bufferout cargo en el buffer de salida F0 bsf TIPO goto TXsetea main2 movlw H'00F0' es liberada una tecla xorwf buffer, W en este caso sigo en RX btfss STATUS, Z goto main3 bsf huboF0 marco la bandera de FO si rve cali rxprepa prepara RX y retorno retfie mainS este es para la tecla BLOQ movlw H'007E' la tecla BLOQ xorwf buffer, W en este caso me preparo a TX btfss STATUS , 2 goto mainSl

btfsc huboE0 goto INFRA_RUT si existió E0 antes significa que es la tecla Crtl-Break TX EO en 1 y 7E, después E0 y FO en 1 y 7E btfsc huboF0 hubo antes F0 ? goto sueltoBLOQ

movlw h'ED' ED, voy a cambiar el estado de un LEO movwf bufferout cargo en el buffer de salida ED bsf doblelR btfss keyleds,0 alterno el estado del bit indicador del estado de la tecla goto pongoBLOQ bcf keyleds,0 goto TXsetea en esta tecla jamas se envía por puerto IR pongoBLOQ bsf keyleds,0 goto TXsetea sueltoBLOQ bcf huboFO goto sirve main31 este es para la tecla CAPS movlw H'0058' la tecla CAPS xorwf buffer.W en este caso me preparo a TX btfss STATUS, 2 goto main32

btfsc huboFO goto sueltoCAPS

movlw h'ED' EO, voy a cambiar el estado de un LED movwf bufferout cargo en el buffer de salida ED bsf doblelR btfss keyleds,2 goto pongoCAPS bcf keyleds,2 goto TXsetea depues de terminar la conversación con el teclado envió el dato IR pongoCAPS bsf keyleds,2 goto TXsetea sueltoCAPS goto INFRA_RUT main32 este es para la tecla BLOQ movlw H'00771 la tecla BLOQ xorwf buffer, W en este caso me preparo a TX btfss STATUS , Z goto main4 btfss huboEl goto sigueH2 bcf huboEl para la tecla pausa goto INFRA_RUT sigue32 btfsc huboFO goto sueltoNUM movlw h'ED' ED, voy a cambiar el estado de un LED movwf bufferout cargo en el buffer de salida ED bsf dobleíR btfss keyleds.l goto pongoNUM bcf keyleds,! goto TXsetea ;igual que en caps pongoNUM bsf keyleds, 1 goto TXsetea sueltoNUM goto INFRA_RUT main4 clrw cargo 00 Buffer overflow xorwf buffer, W btfss STATUS, Z verifico si recibi 00 goto mainS movlw h'FF1 FF, reseteo el teclado movwf bufferout cargo en el buffer de salida Ff. reset teclado clrf BANDGRA2 borro los registros goto TXsetea mainS movlw H'OQFC1 xorwf buffer, W btfss STATUS, Z goto mainS movlw b'lUlim FF, reseteo el teclado movwf bufferout cargo en el buffer de salida Ff, reset teclado clrf BANDERA2 borro los registros goto TXsetea mainG movlw H'OOFD1 xorwf buffer ,W btfss STATUS, Z goto mainSl moví vi b'llllllll FF, reseteo el teclado movwf bufferout cargo en el buffer de salida Ff, reset teclado clrf BANDERA2 borro los registros goto TXsetea mainGl movlw H'FF' error o buffer overflow xorwf buffer, W btfss STATUS , Z goto main62 movlw b'llllllll FF, reseteo el teclado movwf bufferout cargo en el buffer de salida Ff, reset teclado goto TXsetea main62 movlw H'OQEE1 xorwf buffer, W btfss STATUS, Z goto mainSS movlw h'EE1 EE, comando movwf bufferout cargo'- en el buffer de salida FE goto TXsetea main66 movlw H'FA1 ACK del teclado xorwf buffer, W btfss STATUS, Z goto rnain? btfss dobleíR goto TIPO?? movfw keyleds envío byte can información del estado de led deseado al teclado movwf bufferout bcf dobleíR borro bandera goto TXsetea me preparo a TX TIPO?? btfss TIPO ordeno el modo de operación, envió segundo byte goto si rve

4 de 13 bcf TIPO movlw. h'021 ;para saber en que tipo de Key esta trabajando tnovwf bufferout goto TXsetea main? movlw H'OOFE1 ; me pide el teclado retransmisión xorwf buffer ,W btfss STATUS, Z goto INFRA RUT clrf BANDERA2 ; borro los registros y re-TX el mismo bufferout goto TXsetea

; Si no es ninguno de los anteriores comandos, mantengo la línea de reloj en baja, y ; me preparo para transmitir por el puerto infrarojo, antiendo la rutina de envío infrarrojo.

; subrutina para tX datos al Teclado

TXsetea inicio handshake de TX bsf clkout lógica negada movlw d'191 este bucle sirve para generar el delay de 60 micro seg movwf contador que seria CTS delay decfsz contador ,F goto delay bsf dataout equivale al RTS, tomo la línea de datos lógica negada * + * + *-* + **** bcf clkout y suelto la del reloj , tengo 1 ms hasta el próximo flanco lógica' negada TXrut btfsc inicio es bit de inicio goto TXdatos sí no es empiezo a TX movlw d'91 movwf contador cargo el contador bsf inicio pongo flag de inicio clrf paridad reseteo paridad

bcf INTCON, INTF borro interup retfie

TXdatos btfsc para ; es bit de parada goto TXPARA decfsz contador ,F ; decremento contador goto sigueTXkey goto envia_paridad sigueTXkey rrf bufferout, F ; saco el bit a TX al Carry skpc ; que dato es 11 goto envioQKEY enviolKEY bcf dataout ; lógica negada incf paridad, F bqf INTCON, INTF ; borro interup retfie envioOKEY bsf dataout ; lógica negada bcf INTCON, INTF ; borro interup retfie envia paridad rrf bufferout, F ; para no alterar el contenido original de este registro bsf para rrf paridad,W ; SACO EL Isb como la paridad skpc ; que dato es 11 goto enviolKEY goto envioGKEY TXPARA

btfsc reciACK ; recibo handshake final goto esACK? bcf dataout ; lógica negada, linea de datos a VCC bsf reciACK bcf INTCON, INTF ; borro interup retfie esACK?

btfsc datain ; me cercioro del estado de la linea goto e r ro r_ru t ; en caso de erro

bcf reciACK bcf para bsf clkout ;logica negada, prevengo que envié datos el key bcf inicio cali rxprepa retfie

5 de 13 Esta rutina envia datos por el pórtico serial

; esta rutina se puede usar para sondear los bits enviados por el teclado, por un pórtico ; serial

SERIAL RUT envió por el puerto serial a 1200 bps primero envió el bit de parada sigue la línea de clkout en baja siguebien bsf TXserie cali retardo bcf INTCON, GIE cali retarda

bcf TXserie bit de inicio de TX serial movlw d'91 movwf contador cali retardo TXserial decfsz contador ,F goto sigueserial goto finserial sigueserial rrf buffer.F skpc que dato es ?? goto envioOserie ¡enviolserie bsf TXserie cali retardo goto TXserial envioOserie bcf TXserie cali retardo goto TXserial finserial bsf TXserie bit de parada rrf buffer.F cali retardo

programa para enviar datos infrarrojos

Aquí comienza la rutina de infrarojo siempre que termine de enviar algo por el puerto infrarojo, debo resetear indicadores de bandera2 y apagar el led rojo de información al usuario INFRA_RUT bsf enviando enciendo el led rojo movfw anterior analizo el dato recibido, lo comparo con el anterior xorwf buffer.W btfss STATUS,Z goto INFRA_RUT1 btfsc huboFO bsf solteanterior si libero tecla enviada antes marco bit solteanterior

INFRA_RUT1 movfw buffer ; salvo el contenido de buffer para el caso de doble_TX_IR movwf temporall movwf anterior ; guardo buffer en anterior

movlw h'771 ; es la tecla CAPS o NUM ? xorwf buffer.W btfsc STATUS,2 goto ES_CAPS_NUM? movlw H'58' xorwf buffer.W btfss STATUS.Z goto analiza CRT SHF

ES_CAPS_NUM? movlw d'231 ; en caso afirmativo, genero retardo y marco banderas movwf contador cali Delayxms bsf solteanterior bsf dobleTX IR bsf NUM CAP?

6 de 13 clrf anterior goto SIGUE IR analiza CRT SHF

ES_SHIFT_IZQ mov"lw H'12' es tecla SHIFT, CONTROL o ALT ? xorwf buffer.W btfsc STATUS, Z goto refuer

movlw H'59' xorwf buffer.W btfsc STATUS, Z goto refuer

movlw H'141 xorwf buffer.W btfsc STATUS , Z goto refuer

movlw H'll1 xorwf buffer.W btfss STATUS.Z goto SIGUE_IR refuer bsf dobleTX_IR en caso afirmativo /narco banderas y genero retardo clrf anterior movlw d'19' 70 para aprox.. 60 ms movwf contador cali Delayxms goto normal_IR

SIGUE IR

btfss keyleds.Q ; Puede el usuario simular ratón ? estado de SCR011 LOCK ? goto normal_IR

; debo saber si es una tecla del teclado numérico

btfsc huboEG ; si hubo E0 de hecho no me interesa no es del ; teclado numérico (O—9) goto normal_IR ; si hubo F0, este dato me es de utilidad solo en el caso del btt 0 y el punto decimal

analizo que numero es, para representar una función de mouse solo se Tx los 6 MSB, ojo !!!! ;ma1nIR_IZQ movlw H'701 el número D, representa el btt IZQ xorwf buffer.W btfss STATUS.Z goto mainIR_DER bcf huboEO E0 representa el botón de mouse IZQ (al TX-IR) si viene con FQ btfsc huboFQ si viene fQ=l significa solté el 0 que es igual a soltar el btt IZQ del mouse bsf huboE0 movlw h'O1 movwf buffer goto normal_IRprem mainIR_OER movlw H'711 el punto decimal, representa el btt DER xorwf buffer.W btfss STATUS.Z goto mainIR 1 F0 representa el botón de mouse DER (al TX-IR) si viene con F0 si viene f0=l significa solté el . que es igual a soltar el BTT DER del mouse

movlw b100110000' 001100 = 12 = h'c1 movwf buffer goto normal_!Rprem mainIR 1 movlw H'691 el numero 1 = h'69' xorwf buffer.W btfss STATUS,Z goto mainIR_2 movlw b'00000100' 000001 = 1 movwf buffer goto normal_IRprem

7 de 13 mainIR 2 movlw H'721 ; el numero 2 = h'721 xorwf buffer.W btfss STATUS,I goto mainlR_3 movlw b'00001Q00' ; 000010 = 2 movwf buffer goto ncjrmal__tRprem mainlR 3 movlw H'7A' ; el numero 3 = h'7Al xorwf buffer.W btfss STATUS,Z goto mainIR_4 movlw b100001100' ; 000011 = 3 movwf buffer goto normal_IRprem mainIR A movlw H'SB1 ; el numero 4 - h'f xorwf buffer.W btfss STATUS,2 goto mainIR 5 movlw b'00010000' ; 000100 = 4 movwf buffer goto norma\__ÍRprem mainIR 5 movlw H'73' ; el numero 5 = h'73' xorwf buffer.W btfss STATUS,2 goto mainIR_6 movlw b'00010100' ; 000101 = 5 movwf buffer goto norma\__IRprem mainIR 6 movlw H'741 el numero 6 = h174' xorwf buffer.W btfss STATUS,Z goto mainlR_7 movlw b'00011000' 000110 = 6 movwf buffer goto normal^IRprem mainIR 7 movlw H'6C' el numero 7 = h16C' xorwf buffer.W btfss STATU5.Z goto mainIR_S movlw 000111 = 7 movwf buffer goto normal_lRprem mainIR 8 movlw H'751 el numero 8 = h'75' xorwf buffer.W btfss STATUS,Z goto mainIR 9 ********* era mainIR_MAS, pero lo anule. movlw b'0010000o1 001000 = 8 movwf buffer goto normal_IRprem las tres siguientes funciones son adicionales, solo para darle mas poder al teclado simulando el control remoto de ratón mainIR_MAS movlw H'791 xorwf buffer.W btfss STATUS,Z goto mainIR__menos movlw b'110101001 110101 = 53 es PLAY movwf buffer btfsc huboF0 goto TinalIR goto normal_IRprem mainIR_menos movlw H'7B' es - para 2nd función xorwf buffer.W btfss STATUS.Z goto mainIRJIULTI movlw b111001000' 110010 = 50 movwf buffer btfsc huboFQ goto finalIR

8 de 13 goto normal_lRprem ma1nIR_MULTl movlw H'7C' xorwf buffer.W btfss STATUS,Z goto mainIR_9 movlw b1100000001 100000 = 32 movwf buffer btfsc huboFO goto finalIR goto normal_IRprem ; continuo el análisis normal mainIR_9 ~ movlw H'7D' el numero 9 = h'7D' xorwf buffer.W btfss STATUS,Z goto normal_IR movlw b'001001001 001001 = 9 movwf buffer normal IRprem bsf Símouse este bit se marca si en efecto alguna comparación anterior tuvo éxito normal_IR btfsc inicio es bit de inicio goto TXdatosIR si no es empiezo a TX

movlw o" 9' TX 8 datos ? btfsc Símouse Analizo si es mouse movlw d'7' TX 6 datos ?

movwf contador cargo el contador bsf inicio pongo flag de inicio clrf paridad reseteo paridad bcf INTCON, INTF borro interup

movlw d'411 transmito solo medio bit en alta, por mas tiempo esto mejora la sincronización inicial severamente movwf contadoruno esta uno medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop nop nop nop nop nop nop nop bcf puertoIR 13 ciclos en baja nop nop nop nop nop nop nop nop nop decfsz contadoruno,F goto esta_uno

cali envialIR envió segundo bit de inicio cali enviaOlR envió el bit T , aquí podría hacer una control de error o mejorar la sincronización

btfss Símouse. goto Di rec!9 ; envió la dirección (5 => 00101) de ratón Di recS cali envia0IR cali enviaOlR cali envialIR cali enviaOÍR cali enviallR goto tx_i r_prem

9 de 13 ; envío la dirección (19 => 10011) de teclado Di rec!9 cali envIalIR cali enviaQJR cali enviaOIR cali envialIR cali envialIR tx ir_prem clrf paridad ; envió el byte de datos

TXdatosIR

decfsz contador,F decremento el cantador goto sigueTX_IR goto envía control IR sigueTX_IR

rlf buffer,F saco el bit a TX al Carry skpc que dato es ?? goto envia0IR_prem cali envialIR goto TXdatosIR envia0IR__prem cali enviaOIR goto TXdatosIR envia_control IR rlf buffer.F para no alterar el contenido original de este registro

btfss soltesnterior envió el estado del bit solteanterior (SA) goto envia0IR_premO cali envialIR goto TXdatosIR E0 envia0IR_prem0 cali enviaOIR

TXdatosIR_E0 envió estado del bit E0 o BTT IZQ

btfss huboEG goto enviaQIR_prem2 cali envialIR goto TXdatosIR F0 enviaOIR_prem2 cali enviaOIR TXdatosIR_F0 envió estado del bit F0 o BTT DBR btfss huboF0 goto env1a0IR_prem3 cali envialIR goto TXdatosIR PARIDAD env1a0IR_prem3 cali enviaOIR

TXdatosIR_PARIDAD envío bit de paridad btfss paridad, 0 analizo EL Isb para la paridad goto env1alIR_prem4 cali enviaQIR goto TX_IR_FIN envialIR_prem4 cali envialIR

TX_I R_ FIN bcf puertoIR para conservar pilas btfsc dobleTX IR debo enviar nuevamente este dato ? goto DOBLE TX IR goto flnjm

DOBLE_ TX IR "btfsc repi te? si, envió dato nuevamente, marco banderas y genero retardo goto f injm bsf repi te? bcf dobleTX_IR movfw temporall movwf buffer bcf inicio cali retardo cali retardo cali retardo goto SIGUE_IR

10 de 13 ; los siguintes pasos preparan al HOST (PIC) para una nueva recepción. finjm bcf imcio termino, encero registros bcf repite? bcf solteanterior finalIR movlw d'14' genero retardos, analizando el tipo de trama que envié movwf contador ; btfsc NUMJZAPS ; cali Oelayxms ; bcf NUM_CAPS ; movlw d'131 70 para aprox.. 60 ms btfsc Slmouse movlw d'2' movwf contador cali Delayxms clrf BANDERA ; borro los registros clrf BANDERAS ; borro los registros cali rxprepa bcf enviando ¡apago el led rojo, me preparo a recibir nuevos datos return

esta subrutina genera retardo de 830 microseg, útil en TX serial retardo movlw d'151' ;***+* es 48 a 600 y i$l a 1200 *** movwf TMR0 ; 229 a 4800 bps *********** explora btfss INTCON,T0IF goto explora bcf INTCON,T0!F return

esta subrutina corrige los errores error_rut

clrf BANDERA ; borro los registros clrf paridad clrf buffer cali ocupado ; evito recibir datos cali rxprepa goto principal

esta subrutina pone el teclado en estado ocupado ocupado bcf INTCON, GIE no permito interrupciones bcf INTCON, INTE bsf clkout pongo en baja la linea de reloj lógica negada bcf dataout libero la linea de datos lógica negada bcf INTCON, INTF borro indicador de INterlp retfie

; esta subrutina prepara la recepción rxprepa bsf RX bcf TX bcf inicio bcf para bcf error a lo mejor necesito un tiempo de establecimiento bsf TXserie ; normalmente en alta para el puerto serial bcf clkout libero la linea de reloj lógica negada bcf dataout libero la linea de datos lógica negada bsf INTCON, INTE habilito la interrup bcf INTCON, INTF return

esta rutina envía un 1 lógico según el estándar RCS envialIR incf paridad.F movlw d'361 movwf contadoruno

;estado_cero ; medio bit, en baja, estado cero movlw d'1461 ;*****- es (25S-145)*8=888 ***

11 de 13 movwf TMRO bcf INTCON.T01F bcf puertoIR ; empieza a cantar 889 ciclos=889 microseg exploralR btfss INTCON.TQIF goto exploralR estado uno medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop » nop nop nop nop nop nop nop bcf puertoJR ; 12 ciclos en baja nop nop nop nop nop nop nop nop nop decfsz contadoruno ,F goto estado_uno bsf puertoIR return

esta rutina envia un 0 lógico según el estándar RCS enviaOIR movlw d'36' movwf contadoruno estado uno2 medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop nop nop nop nop nop nop nop bcf puertoIR ; 12 ciclos en baja nop nop nop nop nop nop nop nop nop decfsz contadoruno, F goto estado_jjno2 bsf puertoIR

;estado_cero ; medio bit, en baja, estada cero movlw d'1461 ;***** es (25S-144)*8=888 *** • movwf TMRO bcf INTCON/TQIF bcf puertoIR ; empiezo a contar 889 ciclos=889 microseg exploraIR2 btfss INTCON.TOIF goto exploraIR2 return *»****** + *********»*«** + *****************#************************** Esta rutina permite generar retardos variables de tiempo

Delayxms

12 de 13 lazol movlw h'FF' cali DELAYSus decfsz contador ,F goto lazol return

DELAYSus movwf contadoruno Iazo2 decfsz contadoruno,F goto Iazo2 return

rutina de encendido remoto del PC con el pulsante encender movlw h'A7' movwf buffer cali INFRA RUT bsf enviando movlw h'FF1 70 para sprox.. 60 ms movwf contador cali Delayxms

movlw h'FF1 70 para aprox.. 60 ms movwf contador cali Delayxms bcf enviando return

retardo adicional, útil para comunicación serial retardo2 movlw d'21 movwf pruebajm reta2 btfss INTCON.TOIF goto reta2 bcf INTCON.T0IF clrf TMRO decfsz pruebajm,F goto reta2 bcf INTCONrTOIF clrf TMRO return end

13 de 13 Progra/na principal en el control remoto de ratón

list p=16f84 Include

BANDERA EQU H'GOOC contador EQU H'OOOD paridad EQU H'000E buffer EQU H'G00F bufferout EQU H'0010 BANDERA2 EQU H'OOll temporal EQU H'0012 jala? EQU H'0013 pruebajm EQU H'0014 contadorcero EQU H'0015 contadoruno EQU H'0016 BANDERAS EQU H'0017 temporall EQU H'0018 anterior EQU H'0019 columna EQU h'lA1 fila EQU h'lb' NuevaTecla EQU h'lc1 BANDERA4 EQU H'ld1 extendida EQU H'le1

#define puertoIR PORTA,0 #define func2 PORTA,1 es el LED AMARILLO #define enviando PORTA,2 es el LED VERDE

#def1ne Inicio BANDERA,0 ^define error BANDERA, tfdefineredACK BANDERA, #def1ne TX BANDERA, ^define RX BANDERA, #define parid BANDERA, #define para BANDERA,6 #define huboEO BANDERAS,O #define huboFO BANDERA2.1 #define TIPO BANDERA2.3 tfdefineMarca BANDERA2.3 #define SImouse BANDERAS,6 tfdefinedpblelR BANDERA3.0 #define replte? BANDERAS,1 #define NUM_CAPS BANDERAS,2 #define solteanterior BANDERAS,3 #define dobleTX^IR BANDERAS,4 #define HevoBTT BANDERAS,5 #define oprimí BANDERA4.0 ^define no2 BANDERA4.2 #def1ne noS BANDERA4.3

vector de interrupción retorno a identificar tecla 10 setup configuro los puertos del PIC bcf STATUS, RP0 cambio banco 0 (me aseguro) clrf INTCON configuro las interrup. bsf STATUS , RP0 cambio banco 1 movlw b1 00010010 ' movwf OPTION REG uso el reloj interno movlw b1 11110000' configura PORTB, Rb7:Rb4 entrada , Rb3;Rb0 salidas movwf TRISB cargo PORTB movlw b1 00011000' configura PORTA movwf TRISA cargo PORTA bcf STATUS , RP0 cambio al banco 0 clrf PORTA movlw h'ff ' movwf PORTB clrf INTCON configuro las interrup. bsf INTCON, RBI E clrf BANDERA borro los registros clrf BANDERA2 borro los registros clrf BANDERAS borro los registros clrf BANDERA4 borro los registros clrf buffer Principal bucle principal bcf enviando apago el led verde bsf STATUS,RP0 se prepara el sistema para entrar en reposo bcf OPTIONJÍEG,? movlw h'FO1 movwf TRISB bcf STATUS,RPO movlw h'fO' ; pongo las salidas en cero movwf PORTB bsf INTCON.GIE sleep ; esta en reposo esperando por una interrupción bcf INTCON.GIE

movTw d'341 movwf contador lazol_ini movlw h'FF1 ; cargo registros y genero retardo de 29 ms movwf contadoruno Iazo2_ini decfsz contadoruno ,F goto Iazo2_in1 decfsz contador, F goto lazol__ini clrf NuevaTecla ; borra tecla almacenada movlw h'ff ' movwf PORTB movlw b-momi1 movwf columna empiezo a poner 0 lógico secuencialmente por las salidas Scan_sigue mavfw PORTB bcf INTCON.RBIF borro bandera de interrupción por cambio de estado en portb rrf columna ,F empiezo a rotar registro columna btfss STATUS, C sigo rotando ? goto NoBTT solo fue rui do , retornar movfw columna movwf PORTB cargo columna en portB nop btfss 1NTCON.RBIF existe bandera de interrupción ? goto Sean sigue no existe, pasar a la siguiente columna swapf PORTB, W salvar el dato de las entradas movwf fila del portb, así se identifica la fila clrf NuevaTecla cali GetKeyValue llamo rutina que asocia código de rastreo movwf NuevaTecla movlw d'15' el el btt izq? xorwf NuevaTecla, W btfsc STATUS,! bsf oprimí marco la bandera oprimi movlw d'131 es flecha abajo? xorwf NuevaTecla ,W btfss STATUS, 2 goto INFRA RUT no es, transmito código de rastreo movlw b'lUUlll1 detecto si existe combinación de teclas movwf PORTB bcf INTCON.RBIF movlw b'111111101 configuro puertoB movwf PORTB nop btfss INTCON.RBIF existe otra tecla pulsada ? goto INFRA_RUT significa que no esta ninguna tecla de dirección presionada al mismo tiempo que el btt ÍZQ (no hay combinaciones) swapf PORTB, W movwf fila ubico las demás teclas pulsadas clrf temporal bsf temporal ,0 bsf temporal ,1 cali filaRB? ' suma los códigos de rastreo movwf NuevaTecla goto INFRA_RUT NoBTT btfsc oprimí fue solo ruido... está btt-izq presionado ? goto boton_I2Q_suelta posible error, enviar depresión... cali DELAY60ms retardo elimina rebote.,. goto Principal retorno Csleep) GetKeyValue clrf temporal en temporal marco bits, para asignar código de rastreo btfss columna, 3 en la linea de RB3 goto RowValEnd íncf temporal ,F btfss columna, 2 en la línea de RB2 goto RowValEnd 1ncf temporal, F btfss columna,! en la liena de RB1 goto RowValEnd 1ncf temporal ,F ; en caso de que sea la ultima columna, puede pulsarse 2 teclas a la vez... filaRB? btfsc fila, 3 goto filaRBS bsf temporal ,2 bsf temporal ,3 cali valor_tecla addwf NuevaTecla ,F fllaRBS

2 de 13 btfsc flla.l ; linea rb5 goto filaRBS bsf temporal ,2 bcf temporal ,3 cali valor_tecla addwf NuevaTecla.F filaRBG btfsc fila, 2 linea rb6 goto fÍlaRB4 bcf temporal ,2 bsf temporal ,3 cali valcr_tecla addwf NuevaTecla.F filaRB4 btfsc fila,0 linea rb4 goto finRBs bcf temporal ,2 bcf temporal ,3 cali valor_tecla addwf NuevaTecla ,F finRBs movfw NuevaTecla return RowValEnd btfss flla.O goto valor tecla btfss flla.l goto Get4567 btfss fila, 2 gotO Get69ab Getcdef ; linea rb7 bsf temporal ,2 ; en temporal marco los bits apropiados Get89ab bsf temporal ,3 goto valor__tecla Get4567 bsf temporal ,2 valor_tecla movfw temporal addwf PCL.F retlw d'13' retlw h'l1 retlw h'21 retlw h'3l retlw h'4' retlw h'5' retlw h'6' retlw d'271 retlw h'8' retlw h'9' retlw h'll1 es d-17 re tlw h'b1 retlw h'c' retlw h'O' retlw h'131 ;d = 19 retlw h'f

INFRA RUT rutina que asiga al código de rastreo una función bsf STATUS, RP0 bsf QPTIQN REG.7 movlw h'FF' movwf TRISE bcf STATUS, RP0

bsf enviando ; enciendo led verde movfw buffer movwf temporall movwf anterior empiezo a comparar nuevatecla, para ubicar el código de rastreo y asignarle un función

movlw h'l' ; tecla power xorwf NuevaTecla,W btfss STATUS,Z goto tecla_enter bcf func2 bcf huboEO bcf huboFQ movlw h'A7' corresponde al encendido movwf buffer cargo en buufer cali normal_ÍR rutina que envía información IR cali TIEMPO retardo, evito rebotes... tecla_enter tecla back e mg bien ENTER xorwf NuevaTecla,W btfss STATUS,Z goto tecla_back movlw b'11010100' corresponde a la play = 53 3 de 13 movwf buff er cali normal IR prem cali TIEMPO tecla_back movlw h'5' ; tecla back xorwf NuevaTecla ,W btfss STATUS.Z goto botón IZQ movlw b' 11 010000' ; corresponde a la wind = 52 movwf buffer cali normal IR prem cali TIEMPO" boton_I2Q movlw h'f xorwf NuevaTecla ,W btfss STATUS, Z goto arrastre ; estoy haciendo un arrastre de ratón ? btfsc func2 ; estado de 2nd fuñe (bit fuñe) 2? goto Principal bcf huboEO ; oprimi el botón bcf huboFO movlw h'OQ1 movwf buffer cali normal IR prem cali DELAY60ms goto Principal boton_IZQ_suelta

btfsc func2 goto Principal

bsf huboEO : solté el botón bsf huboFO bsf solteanterior movlw h'OQ' movwf buffer bcf oprimi cali normal IR prem cali DELAY60ms~ goto Principal

; esta el btt_izq simultáneamente aplastado? arrastre.... arrastre movlw d'18' xorwf NuevaTecla ,W btfss STATUS , Z goto siguientel btfss func2 ; estado de 2nd fuñe ( bit fuñe) ? goto ok_a bcf huboEO ; oprimi el batan, simulo teclas de métodos abreviados bcf huboFO bcf solteanteriar movlw h'll' ; tecla alt movwf buffer cali normal IR cali DELAYSOms bcf hubaE0 ; oprimi el botan bcf huboFO bcf solteanterlor movlw n'23' ; tecla D movwf buffer cali normal IR cali DELAYSOms bcf huboEO ; suelto el botón bsf huboFO bsf solteanterior movlw h'23' ; tecla D movwf buffer cali normal IR cali DELAYGOms bcf huboEO ; suelto el botón bsf huboFO bcf solteanterior movlw h'll1 ; tecla alt movwf buffer cali normal IR cali TIEMPO goto Principal ; = alt D siguientel movlw d'42' xorwf NuevaTecla ,W btfss STATUS.Z 4-de 13 goto siguiente2 btfss fuñe 2 goto ok_a bcf huboEO oprimi el botón bcf huboFO bcf solteanterior movlw h'll1 tecla alt movwf buffer cali normal IR cali DELAY60ms movlw h'6B' flecha izq movwf extendida cali envia_ext bcf huboEQ suelto el botón bsf huboFO bcf solteanterior movlw h'll1 tecla alt movwf buffer cali normal IR cali TIEMPO" goto Principal = alt + flecha izq siguientes movlw d'261 xorwf NuevaTecla.W btfss STATUS. 2 goto siguientes btfss func2 goto ok__a bcf huboEO oprimi el botón bcf huboFO bcf solteanterior movlw h'll1 tecla alt movwf buffer cali normal IR cali DELAYGOms movlw h'741 flecha derecha movwf extendida cali envia_ext bcf huboEO suelto el botón bsf huboFO bcf solteanterior movlw h'll1 tecla alt movwf buffer cali normal IR cali TIEMPO goto Principal = alt + flecha derecha siguientes movlw d'281 xorwf NuevaTecla.W btfss STATUS, 2 goto siguiente4 btfss func2 goto ok_a bcf huboEO oprimi el botón bcf huboFO bcf solteanterior movlw h'll1 tecla control movwf buffer cali normal IR cali DELAYSOms bcf huboEO oprimi el botón bcf huboFO bcf solteanterior movlw h'SA1 tecla enter movwf buffer cali normal IR cali DELAY60ms bcf huboEO suelto el botón bsf huboFO bsf solteanterior movlw h'SA1 tecla enter movwf buffer cali normal IR cali DELAYSOms bcf huboEO suelto el botón bsf huboFO bcf solteanterior movlw h'141 teclad control movwf buffer cali normal IR cali TIEMPO" goto Principal = ctrl + enter siguiente4 movlw d'451 xorwf NuevaTecla.W btfsc STATUS, Z goto ok_a 5 de 13 siguientes movlw d'291 xorwf NuevaTecla ,W btfsc STATUS. 2 goto siguientes movlw d'551 xorwf NuevaTecla ,W btfsc STATUS ,2 goto ok_a siguiente? movlw d'39' xorwf NuevaTecla ,W btfss STATUS . 2 goto tecla__arriba ok_a ; me muevo con el botón aplastado btfsc llevoBTT goto sigo_ar bcf huboEO oprimí el botón bcf huboFO movlw h'00' movwf buffer cali normal_J[R prem cali DELAYGOms bsf oprimí sigo_ar movlw d'15' le resto el valor del BTT_IZQ subwf NuevaTecla, F bsf llevoBTT clrf bufferout bsf Marca goto tecla_arriba2 tecla__arriba movfw NuevaTecla movwf bufferout tecla_ arriba2 movfw NuevaTecla xorwf bufferout, W btfss STATUS. 2 goto sigue_bien ya soltó btfss llevoBTT goto sigue_b1en bcf oprimí bcf llevoBTT bsf huboEO solté el botón bsf huboFO movlw h'001 movwf buffer cali normal_IR_prem goto Principal sigue_bien movlw h'31 xorwf NuevaTecla, W btfss STATUS , 2 goto convino_arribal btfsc func2 goto arriba 2nf movlw b' 00100090 ' 001000 = 8 movwf buffer cali narmal_IR_prem goto Principal arriba__2nf movlw h'751 tecla flecha arriba movwf extendida cali envia_ext goto Principal convino__arribal movlw d'14' xorwf NuevaTecla ,W btfss STATUS . 2 goto conv1no_arriba2 btfsc func2 goto dere sup movlw b'001001001 001001 = 9 movwf buffer cali normal_IR_prem goto Principal de re_sup movlw h'7D' movwf extendida cali envia__ext goto Principal convino__arriba2 movlw d'30' xorwf NuevaTecla ,W 6 de 13 btfss STATUS , 2 goto tecla_abajo btfsc func2 goto izq sup movlw b'00ÓÍ1100' 000111 = 7 movwf buffer cali normal_IR_prem goto Principal izq_sup movlw h'GC1 movwf extendida cali env1a__ext gota Principal tecla_abajo movlw d'13' xorwf NuevaTecla ,W btfss STATUS, Z goto convino_abajol btfsc func2 goto abajo 2nf movlw b1 000010001 000010 = 2 movwf buffer cali normal_IR_prem goto Principal abajo_2nf movlw h'721 tecla flecha abajo movwf extendida cali envia_ext goto Principal convino_abajol movlw d'241 xorwf NuevaTecla.W btfss STATUS, 2 goto convino_abajo2 btfsc func2 goto abajo der movlw b1 00001100 ' 000011 = 3 movwf buffer cali normal_IR_prem goto Principal abaj o_der movlw h'7A' tecla pg dawn movwf extendida cali envia_ext goto Principal conv1no_abajo2 movlw d'40l xorwf NuevaTecla.W btfss STATUS, 2 goto tecla_izq btfsc func2 goto abajo izq movlw b1 00 000100' G00001 = 1 movwf buffer cali normal_lR_prem goto Principal abajo_izq movlw h'691 tecla fin movwf extendida cali envia_ext goto Principal tecla_1zq movlw d'271 xorwf NuevaTecla.W btfss STATUS. 2 goto tecla_der btfsc func2 goto Izq 22 movlw b'00010000' 000100 = movwf buffer cali normal_lR_prem goto Principal izq_22 movlw h'6B' tecla flecha izq movwf extendida cali env1a__ext goto Principal tecla_der movlw d'll1 xorwf NuevaTecla.W btfss STATUS, 2 goto tecla_CHmas btfsc func2 goto der 22 movlw b'OOOHOOQ1 000110 = 6 movwf buffer cali no rmal_I R_p rem goto Principal 7 de 13 : ' ~£f •

der_22 movlw h'741 tecla flecha izq movwf extendida cali envia_ext goto Principal tecla__CHmas movlw h'41 xorwf NuevaTecla.W btfss STATUS , Z goto tecla CHmenos movlw b' 10000000' OQ01Q0 = d'321 movwf buffer cali normal IR prem cali TIEMPO tecla_CHmenos movlw h'8' xorwf NuevaTecla.W btfss STATUS , Z goto tecla 2nf movlw b1 10000100' ; 000100 = d'33' movwf buffer cali normal IR prem cali TIEMPO tecla_2nf movlw h'c' xorwf NuevaTecla ,W btfss STATUS , Z goto boton_derecho movlw b1 11001000' = d'50' movwf tuffer btfss func2 goto pongo_func bcf func2 goto fin_func pongo fuñe bsf func2 fin fuñe cali normal IR prem cali TIEMPO" boton_derecho movlw d'9' xorwf NuevaTecla.W btfss STATUS, Z goto GRANDE1 btfsc func2 goto bttder2 bcf huboEO oprimí" el botón bcf huboF0 movlw b1 09110000' 001109 = 12 = h'c1 movwf buffer cali normal IR prem cali DELAY60ms bcf huboE0 solté el botón bsf huboFO bsf solteanterior movlw b'001100001 001100 = 12 = h'c1 movwf buffer cali normal IR prem cali DELAY60ms goto Principal bttder2 movlw h'2F' tecla de Windows btt derecho movwf extendida cali env1a_ext goto Principal GRANDE1 movlw d'6' xorwf NuevaTecla.W btfss STATUS, Z goto GRANDE2

btfsc func2 goto GRANDE1 2 movlw h'lF1 tecla de Windows movwf extendida cali envia ext cali TIEMPO goto Principal GRANDE1 2 bcf huboE0 oprimí el botón bcf huboFO bcf solteanterior movlw h'GD1 tecla tab movwf buffer cali normal IR cali DELAYSOms bcf huboE0 oprimí el botón bsf huboFO 8 de 13 -*>€•

bsf solteanterior movlw h'OD1 tecla tab movwf buffer cali normal IR cali TIEMPO goto Principal GRANDE2 movlw d'2' xorwf NuevaTecla ,W btfss STATUS, 2 goto GRANDES movlw b' 00010100' r 001000 = S movwf buffer bcf huboFO cali normal IR prem cali TIEMPO goto Principal GRANDE2 2 ; función opcional para la tecla grande 2 bcf huboEO ; oprimí el botón bcf huboFO bcf solteanterior movlw h'OC1 ; tecla F4 movwf buffer cali normal IR cali DELAYSQms cali DElAY60ms bcf huboE0 rsolte el botón bsf huboF0 bsf solteanterior movlw h'GC1 ; tecla F4 movwf buffer cali normal IR cali TIEMPO goto Principal GRANDES movlw o" 19' xorwf NuevaTecla ,W btfss STATUS, 2 goto GRANDE4 btfsc func2 goto GRANDE3_2 bcf huboEO oprimi ALT bcf huboFO bcf solteanterior movlw h'll1 movwf buffer cali normal IR cali DELAY60ms bcf huboEO oprimí el botón bcf huboFO bcf solteanterior movlw h'OC' tecla F4 movwf buffer cali normal IR cali DELAY60ms bcf huboEO "solté" el botón bsf huboFO bsf solteanterior movlw h'OC1 tecla F4 movwf buffer cali normal IR cali DELAYGOms bcf huboEO "solté alt" bsf huboFO bsf solteanterior movlw h'll' movwf buffer cali normal IR cali TIEMPO goto Principal GRANDES 2 bcf huboEO ; oprimí el botón bcf huboFQ bcf solteanterior movlw h'141 ; tecla control movwf buffer cali normal IR cali OELAYSOms bcf huboEO ; oprimí el botón bcf huboFO bcf solteanterior movlw h'431 ; tecla I movwf buffer cali normal IR cali DELAYGQms bcf huboEO ¡suelto el botón bsf huboFQ bsf solteanterior 9 de 13 movlw h'431 tecla I movwf buffer cali normal IR cali DELAYSQms bcf huboEO suelto el botón bsf huboFO bcf solteanterior movlw h'14' teclad control movwf buffer cali normal IR cali TIEMPO" goto Principal = ctrl + i GRANOE4 movlw d'171 xorwf NuevaTecla ,W btfss STATUS, 2 goto teclaSS btfsc func2 goto GRANDE4_2 bcf huboEQ bcf huboFQ bcf solteanterior movlw h'76' mavwf buffer cali normal IR cali DELAYGOms cali OELAYSQms bcf huboEO ¡solté el botón bsf huboFO bsf solteanterior movlw h'761 ; tecla escape movwf buffer cali normal IR cali TIEMPO goto Principal GRANDE4 2 bcf huboEO ; oprimi el botón 'bcf nuboFO bcf solteanterior movlw h'141 ; tecla control movwf buffer cali normal IR cali DELAYSOms bcf huboEO ; oprimi el botón bcf huboFO bcf solteanterior movlw h'33' ; tecla h movwf buffer cali normal IR cali DELAYGOms bcf huboEO ;suelto el botón bsf hub.o^FO bsf solteanterior movlw h'3,Í' ; tecla h movwf buffer cali normal IR cali DELAYSOms bcf huboEG ; suelto el botón bsf huboFO bcf solteanterior movlw h'14l ; teclad control movwf buffer cali normal IR cali TIEMPO goto Principal ; = ctrl + h tecla38 movlw d'33' xorwf NuevaTecla, W btfss STATUS, 2 goto Principal btfsc func2 goto pantalla FU goto GRAN DE 2^2 pantalla FU bcf huboEO ; oprimi el botón bcf huboFO bcf solteanterior movlw h'781 ; tecla fll movwf buffer cali normal IR cali DELAY69ms bcf huboEO ;suelto el botón bsf huboFQ bsf solteanterior movlw h'781 ; tecla fll movwf buffer cali normal IR cali TIEMPO 10 de 13 goto Principal

rutina que envia datos por puerto infrarrojo

normal_IR_prem bsf SImouse normal_IR bsf enviando movlw d'91 TX 8 datos btfsc SImouse Analizo si es mouse movlw d'7' TX 6 datos movwf- contador cargo el contador bsf inicio pongo flag de inicio clrf paridad reseteo paridad bcf IfJTCON, INTF borro interup movlw d'391 movwf contado runo esta_unol medio bit, en alta, estado uno medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop nop ; nop nop nop nop nop nop bcf puertoIR ; 13 ciclos en baja nop nop nop nop ; nop nop nop nop nop decfsz contadoruno.F goto esta_unol cali envialIR envió bi t de inicio cali enviaOIR envió el bit T , aquí podría hacer una control de error o alternarlo btfss SImouse goto Direcl9 ; envió la dirección (5 => 00101) DirecS cali envia0IR cali enviaOIR cali envialIR cali envia0IR cali envialIR goto tx_J r_p rem ; envió la dirección (19 => 10011) Direcl9 cali envialIR cali enviaOIR cali enviaOIR cali envialIR cali envialIR tx_i clrf paridad ; envió el bit de datos TXdatosIR decfsz contador,F goto sigueTX_IR goto envla_control_IR sigueTX_IR rlf buffer.F saco el bit a TX al Carry skpc que dato es ?? goto . envia0IR_prem cali envialIR goto TXdatosIR envia0IR_prem cali enviaGIR goto TXdatosIR envia_control IR rlf buffer.F para no alterar el contenido original de este registro btfss solteanterior goto envia8IR__prem0 cali envialIR goto TXdatosIR EG en.via0IR_prem0 11 de 13 cali enviaGIR TXdatosIR_E0 btfss huboEO goto envia0IR_prem2 cali envialíR goto TXdatosIR_FO envia0IR_prem2 cali enviaOIR TXdatosIR_F0 btfss huboFO goto envia0IR_prem3 cali envialíR goto TXdatosIR_PARIDAD env1aOIR_prem3 cali envia0IR TXdatosIR_PARIDAD btfss paridad,0 analizo EL Isb para la paridad goto envialIR_prem4 cali enviaOIR goto TX_IR_FIN envialIR_prem4 cali envialíR TX_IR_FIN bcf puertoIR para conservar pilas DOBLE_TX_IR finjm saliste bcf inicio bcf repi te? bcf solteanterior finalIR BANDERA borro los registros BANDERA2 borro los registros enviando apago led verde....

envialíR incf parí dad,F movlw d'341 movwf contadoruno ;estado_cero ; medio bit, en baja, estado cero movlw d'1561 ;con 157 con 3mhz, 146 a 4mhz** movwf TMR0 bcf INTCON.TOIF bcf puertoIR empiezo a contar 889 ciclos=889 exploralR exploralR btfss INTCON.T0IF goto exploralR estado_uno medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop nop nop nop ; nop nop nop nop bcf puertoIR ; 12 ciclos en baja nop nop nop ; nop nop nop nop nop nop decfsz contadoruno,F goto estado_uno bsf puertoIR return env1a0IR movlw d'341 movwf contadoruno estado_uno2 medio bit, en alta, estado uno bsf puertoIR frec=40Khz, 25 microseg nop 12 ciclos en alta nop nop nop nop- 12 de 13 nop ; nop nop nop nop nop bcf puertoIR ; 12 ciclos en baja nop nop nop nop nop nop ; nop nop nop decfsz contadoruno, F goto estado_uno2 bsf puertoIR ;estado_cero ; medio bit, en baja, estado cero movlw d'ISS1 -***** es (255-144)*8=888 *** movwf TMR0 bcf INTCON.T0IF bcf puertoIR ; empiezo a contar 889 ciclos=889 ;microcroseg exploraIR2 btfss INTCON.T0IF goto exploraIR2

return

retardo2 movlw d'21 movwf pruebajm reta2 btfs-s •INTCON.TOIF goto reta 2 bcf INTCON.TOIF clrf TMRO decfsz pruebajm, F goto reta 2 bcf INTCON.T0IF clrf TMRO return

DELAY60ms moy-lw •d'40' ; 70 para aprox.. 60 ms movwf contador lazol moylw h'FF1 movwf contadoruno Iazo2 decfsz contadoruno, F goto Iazo2 decfsz contador ,F goto lazol return TIEMPO movlw d'31 movwf fila espera_pow cali DELAYSOms decfsz fila.F goto espera_pow return envía ext bsf huboEO ; oprimí el botón bcf huboFO bcf solteanterior movfw extendida ; tecla extendida movwf buffer cali normal IR cali OELAYSOms bsf huboEO ; suelto el botón bsf huboF0 bsf solteanterior movfw extendida ; tecla extendida movwf buffer cali normal IR cali DELAY60ms return end

13 de 13 PROGRAMA DEL EQUIPO TERMINAL ÜSt p=16f84 include BANDERA EQU H'QOOC1 Contador EQU H1 900D1 paridad EQU H1 OOOE1 buffer EQU H1 000F' bufferout EQU H1 0010' BANDERA2 EQU H'00111 temporal EQU H1 0012' ini_mouse EQU H1 0013' pruebajm EQU H1 0014' bufferoutl EQU H1 00151 BANDERAS EQU h'16' start__delay EQU h1 17' dbl EQU h1 18' db2 EQU h1 19' db3 EQU h1 20' Bit EQU h'21' Encendido EQU h1 23' anterior EQU h1 22' x_mouse EQU h1 24' y_mouse EQU h1 25' mouse_HEAD EQU h1 26' positivo EQU h1 27' negativo EQU h1 28' acelera_posi ,EQU h'29' acelera_néga EQU h1 30' conta_control EQU h1 31' buffe?out2 EQU H1 32' anterior_mouse EQU H1 33' endidol EQU h'34' endido2 EQU h1 35' db4 EQU h' 36' dbS EQU h1 37' sensibilidad EQU h'38' #define pulso?? PORTB.O #define clkout PORTB,! ^define datain PORTB,2 #define dataout PORTÉ, 3 #define TXserie PORTB, 4 #define discoduro PORTB,5- #define relay_encendidcí PORTE,6 #def1ne retardo?? P'ORTB.7 tfdefine hay_VCC? PORTA,O #def1ne Rojo'Oatos PORTA,! #deflne AmarilloFIN PORTA,2 #define clkln PQRTA.3 #def1ne INPUT PORTA,4 #define inicio BANDERA,© #define error BANDERA,1 #define mouse BANDERA,3 #define parid BANDERA.4 #define para BANDERA,5 ^define mouse^control BANDERA,6 #def1ne control_BTT BANDERA,? #define SolteAnterior buffer,3 #define vinoEO buffer,2 #define vinoFO buffer,! #define ACELERA BANDERA2.2 ^define BTT_DER BANDERA2.3 #define BTT_IZQ BANDERA2.4 #define 1n1cio_k BANDERA2.S #define dobleFO BANDERAS,© ^define REWinD_CONTROL BANDERAS, #define BORRO? BANDERAS,2 #define valido? BANDERAS,3 ¿define envioFO BANDERAS,4 #define no_espera BANDERAS,5 ^define apágate BANDERAS,6 #def1ne arranque BANDERAS,?

org 0 SETUP- org 4 goto arranca ratón org

SETUP STATUS,RPO ;selecciono banco 1 t'100100101 OPTIONJÍEG ; uso flanco negativo, y el reloj interno b,7 000110011 ; set port a como entrada movwf TRISA

IdelS movlw b' 10100101 ' movwf TR1SB ; set port b como salida bcf STATUS ,RP0 ; select page 0 movTw b1 00010000' movwf INTCON

movlw b1 00011010' movwf PORTB ; Pongo estado por defecto del puerto B clrf BANDERA2 clrf BANDERAS movlw b1 00000010 ' movwf PORTA ; Pongo estado por defecto del puerto A Main clrf buff er •, Borro registros clrf paridad clrf BANDERA

BUCLE principal empieza btfss relay_encendido ; esta encendido el equipo ? goto espera_pow btfss datain ; línea de datos a gnd? cali RXrut btfsc apágate ; rutina de apagado? goto loop_20 espera_pow btfsc INPUT ;espero la segunda mitad del bit de inicio goto empieza ;que produce un estado de baja en el receptor sigue 1r0 cali Recive movlw h'A7' ; recibí código de encendido / apagado 7 xorwf bufferout.W btfss STATUS, Z goto normal_empieza btfsc relay_encendido goto apagado

encendido ; rutina de encendido bsf relay encendido ; prendo el equipo bcf REWinD_CONTROL cali arranca ; seteo el arranque del teclado movlw b'100001001 movwf posi ti vo movlw b'10111100' movwf negativo clrf sensibilidad ; cargo sensibilidad por defecto del ratón clrf conta control bsf INTCON, GIE goto empieza apagado ; rutina de apagado bsf vinoEO bsf SolteAnterior movlw h'lf ' ; equivale a tecla Windows cali SIMULO KEY movlw h'lf ' ; equivale a tecla Windows cali SIMULO_KEY cali retardo movlw h'75' ; tecla arriba cali SIMULO_KEY bcf vinoEO movlw h'Sa' ; equivale a enter cali SIMULO KEY movlw h'3A' ; equivale letra M cali SIMULO KEY movlw h'Sa1 ; equivale a enter cali . SIMULO_KEY bsf apágate ; encero contadores de disco duro y temporizada res de apagado encero movlw d'42' btfss retardo?? movlw d'80' movwf endido2 apagado2 clrf encendido loop 10 clrf endidol ;l us loop_2Q btfss INPUT ¡espero la segunda mitad del bit de inicio goto sigue_i r0

2 de 18 btfss dlscoduro estas 2 lineas deben activarse para goto encero detectar el estado del disco duro — decfsz endidol.f goto loop_20 decfsz encendido, goto loop_10 decfsz end1do2,f goto apagado2 goto SETUP normal_empieza rutina de trabajo normal, salva datos y analiza tipo de trama recibida.... movlw d'70' movwf endido2 btfss relay__encendido goto empieza movfw bufferout movwf bufferoutl btfsc mouse goto MOUSE RUT rutina que envía datos de ratón cali COMPROBAR? rutina que envía datos de teclado bcf BORRO? empiezal bcf control 8TT volver al bucle principal bsf INTCON.GIE goto empieza

Este subprograma recibe los bits IR

Recive ; anulo la siguiente linea porque no estoy seguro de haber sido detectado en forma ; "instantánea", por lo tanto no son 444 sino un poco menos lo que espero ok.. lo corecto sera movlw d'127' evita esperar demasiado tiempo en caso de movwf contador error movlw h'S1 PARA ELIMINAR LOS REBOTES movwf db3 es?l btfsc INPUT ;compruebo la segunda mitad del bit de inicio goto empieza ;que produce un estado de baja en el recepto decfsz db3,F goto es 71 espe_sinc movlw h'41 movwf db3 decfsz contador, F este bucle evita quedarse esperando demasiado tiempo goto seguro goto Main seguro btfss INPUT ;espero el flanco de la primera mitad del bit de inicio goto espe sinc ;que produce un estado de alta en el receptor decfsz db3,F goto seguro cali Delay444us btfss INPUT ¡compruebo la primera mitad del 2 bit de inicio goto Main ;que produce un estado de alta en el receptor cali Delay888us btfsc INPUT ; compruebo que la segunda mitad del 2 bit de inicio goto Main ; que produce un estado de baja cali Delay888us btfss INPUT compruebo que la primera mitad del 3 bit Toggle produce baja goto envia_el_KEY ; es del MOUSE cali Delay888us btfsc INPUT goto Main goto vino__de_control vino de control remoto universal ? envia_el_KEY movlw d'127' movwf contador espe_sinc2 movlw h'3' movwf db3 decfsz contador,F ; este bucle evita quedarse esperando demasiado tiempo goto seguro2 goto Main

delS seguro2 btfss INPUT goto espe_sinc2 decfsz db3,F goto seguro2 cali DeTay444us ; hasta este momento logre recibir los tres primeros bits correctamente, ; me preparo a recibir la dirección del equipo vino bcf INTCON.GIE movlw 4 ¡recibo 4 bits de dirección movwf Bit next_bit ™ cali RecieveBits decfsz Bit.f goto next_bit ;el quinto bit del adddres siempre es uno, ya se en el experimetal = 19 o VHS = 5, ; con este me vuelvo a sincronizar y analizo la dirección, se si es mouse o no btfss errar ;hubo error en los 4 MSB bits recibidos? goto biendi rec cali Delay444us ; para filtrar errores goto Main biendi rec movlw .b'00000010 1 ; es la dirección 5=00101 (el ultimo uno no uso}? xorwf buffer.W ; en este caso sigo en RX btfss STATUS,2 goto diercc!9 bsf mouse marco la bandera de mouse goto recIRl diercc!9 movlw b'000910011 ; es la dirección 19=10011 (el ultimo uno no uso)? xorwf buffer.W; en este caso sigo en RX btfsc STATUS,2 goto recIRl ; si no es tampoco 19 hay un error cali retardo ; para reposar un instante y filtrar errores cali retardo cali Delay444us goto Main

; espero la priera mitad de bit que produce alta. ( ahorita puedo estar en alta o baja ?) recIRl clrf buffer movlw d'6! btfss mouse ; si es de mouse solo recibe 6 datos movlw d'8' ¡recibo 8 bits de datos movwf Bit clrf paridad movlw d'130' movwf db2 esperasinc ; me sincronizo nuevamente movlw h'41 movwf db3 decfsz db2,F ; este bucle evita quedarse esperando demasiado tiempo goto seguros goto Main seguroB btfss INPUT ¡espero la primera mitad del bit 5 de direcc. goto esperasinc ;que produce un estado de alta en el receptor decfsz db3,F goto seguros cali Delay444us cali Delay888us btfsc INPUT ¡espero la segunda mitad del bit 5 de direcc. goto Main ¡que produce un estado de alta en el receptor next_bit2 cali RecieveBits decfsz Bit.f goto next_bit2

movfw buffer movwf bufferout ; tomo ahora los datos de EO F0 y paridad clrf buffer btfss error ¡hubo error en los MSB bits recibidos (6 o 8 de datos)? goto todo_bien cali Delay444us goto Main todo__bien movlw 4 ¡recibo 4 bits de control

4 de 18 movwf B1t next bit3 cali RecieveBits decfsz Blt.f goto next_b1t3 btfsc buffer,O incf paridad,F ; corección de paridad, no debo contar ; el bit P en registro paridad.

btfsc error ;hubo error en los LSB bits recibidos (4 de control)? goto mouse?? analizo la paridad setc btfss buffer,0 el re rlf temporal ,W introduzco como Isb la paridad andlw h'0001' elimino los demás bits xorwf paridad.W xor can paridad andlw h'00011 elimina los demás bits btfsc STATUS,Z goto mouse?? return regreso a la rutina "empiezo" mouse?? btfss mause es dato de ratón ? goto Main

movlw h'141 xorwf anterior ,w btfsc STATUS,Z goto Main bsf mouse control vino de control remota universal return

este programa recibe bits y se asegura de que sean correctos (lógica negada del Rx Ir)

RecieveBits cali DelaySSSus btfss INPUT ;que estado en la primera mitad de bit goto highJLevel cali DelaySSSus ;alta, espero por la segunda mitad (ILÓGICO)

btfss INPUT ;que estado es la segunda mitad (BAJA = 1LOG) ? goto put_high

bsf ;para indicar que se tuvo un error

return ;debe ser baja sino error o desincronismo put_high setc rLf buffer,F Incf paridad,F return high—level cali DelaySSSus ;baja en la primera mitad de bit = 0 lógico btfsc INPUT ¡debe ser alta, sino es error goto put_ low bsf error ; para indicar que se tuvo un error return

™ el re rLf buffer, F return

Este programa envía datos al puerto del teclado

KEY_VA bsf RojoDatos señalizo la tx al PC cali Delay444us retardo, no saturo el PC ; chequeo el estado de la línea de reloj btfss clkin estado de CLK ? goto hablaHOST ; seteo la TX Key bsf dataout pongo la linea de datos en baja . elrf TMRO movlw d'9' movwf contador cargo el contador clrf paridad reseteo paridad ;TX_RUT ; comienzo con ej bit dé"ínicio cali retardoKEY bsf clkout pongo la línea de reloj en baja elrf TMRO

5 de 18 bcf pa ri d bcf para movfw bufferout movwf temporal TXdatos •cali retardoKEY envío bit de inicio bcf clkout pongo la línea de reloj en alta clrf TMRO btfsc para goto TXPARA decfsz contador, F goto sigueTXkey goto envía_paridad slgueTXkey

rrf bufferout, F saco el bit a TX al Carry skpc que dato es ?? goto envioOKEY envIolKEY bcf dataout lógica negada 1ncf paridad.F btfss datain goto hablaHOST cali retardoKEY btfss clkin goto hablaHOST bsf clkout clrf TMRO goto TXdatos envioOKEY bsf dataout lógica negada cali retardoKEY btfss clkin goto hablaHOST bsf clkout clrf TMRO goto TXdatos envia paridad rrf bufferout, F para no alterar el contenido original de este registro bsf para rrf parí dad, W SACO EL Isb como la paridad btfsc arranque hago fallar a proposito el teclado, en el arranque goto envioOKEY esto sirve para el hand shake del arranque, skpc que dato es ?? goto enViolKEY goto envioOKEY TXPARA btfsc parid goto finTX bsf parid goto enviolKEY finTX bcf RojoDatos clrf TMRO bcf clkout bcf dataout clrf BANDERA clrf BANDERA2 cali retardoKEY

movlw d'l' espero 200us cali inter444 espero 200us

clrf TMRQ nop pensandol espero que el host termine de pensar cierto tiempo. btfss TMRO, 7 goto pi ensalmas

btfsc inicioji return demasiado tiempo retornar... bsf inicio k clrf TMRO goto pensandol piensa_mas btfsc datain goto sigo_pensa? goto RXrut sigo_pensa? btfss clkin goto pensandol return ; el host soltó ya la línea de reloj...

6 de 18 ; la siguiente parte se aplica al caso de que el host quiera a media comunicación ; enviarle datos al teclado hablaHOST ; el PC quiere hablar, tx interrumpida. clrf TMRO bcf clkout bcf dataout movfw temporal movwf pruebajm cali pensandol movfw pruebajm movwf bufferout bcf clkout bcf dataout goto KEY VA

rutina que genera duración de estados para el teclado (señal de clk) retardoKEY expKEY btfss TMRO,2 goto expKEY expKEYl btfss TMRO,1 goto expKEYl return

Este programa toma datos que vienen del puerto del teclado

RXrut bcf para btfsc datain goto error__rut ojala btfss hay_VCC? verifica si no vino hasta aqui, parque goto btt_pow se apago el sistema con el btt de power (manualmente) falso apag btfss clkln goto ojala movlw d'l1 cali inter444 btfsc datain compruebo que es cero (bit de inicio, antes del primer flanco negativo goto error_rut en caso de error bsf clkout primer flanco, lei el bit de inicio clrf TMRO movlw d'91 movwf contador cargo el contador clrf paridad reseteo paridad RXdatos cali retardoKEY espero con clk en baja que el host ponga los datos bcf clkout pongo el reloj en alta y leo clrf TMRO btfsc para goto RXPARADA decfsz contador, F goto sigue goto chequea_paridad sigue setc btfss datain el re rrf db2,F btfsc db2,7 ; si es 1, debo incrementar paridad incf paridad.F listo cali retardoKEY clrf TMRO bsf clkout pongo la linea de reloj en baja goto RXdaíos chequea__paridad setc btfss datain el re rlf db3,W introduzco como Isb la paridad andlw b1 00 000001 elimino los demás bits xorwf paridad.W xor con paridad andlw bf 00000001 elimino los demás bits btfsc STATUS, 2 bsf error bsf para goto listo

7 de 18 RXPARADA bsf dataout pongo a tierra datos cali retardoKEY Handshake final..... clrf TMRO bsf clkout pongo a gnd clk cali retardoKEY clrf TMRO bcf clkout expKEYa btfss TMRO.l goto expKEYa bsf clkout bcf dataout nop nop nop bcf clkout dejo en alta data y clk

clrf BANDERA clrf BANDERA2 después de analizar uso no uso return

En esta parte analizo que recibí, y según esto eligo una respuesta,...

ahora tengo 50 (75-120 Instrucciones) microseg para tomar la siguiente decisión. s1 recibí una tecla con mas de un byte, y si no hubo error, sigo en RX. si era la señal de un led por encender o deseo retransmisión, me preparo para TX. identifico que recibí: Análisis btfss arranque goto analisisn bcf arranque cali mainS goto resetn

analisisn btfss error goto main00 desconocido movlw H'QQFE1 movwf bufferout cargo en el buffer de salida FE, re-envio bcf error borro el flag de error goto KEY VA main00 movlw H'0Q' pide Re-TX xorwf db2,W en este caso sigo en RX btfss STATUS, 2 envió lo que quedo en bufferout goto mainl porque necesariamente solo se pide RX btfss env1oF0 goto desconocido bcf env1oF0 movlw H'021 el KEY responde : 02 simulo op en modo2 movwf bufferout cargo en el buffer goto KEY_VA mainl movlw H'FE1 pide Re-TX xorwf db2,W en este caso sigo en RX btfss STATUS.2 envió lo que quedo en bufferout goto main2 porque necesariamente solo se pide RX goto KEY VA después de una TX completa y no a media TX main2 movlw H'ED1 es del teclado extendido xorwf db2,W en este caso sigo en RX btfsc STATUS,2 goto respuesta_ok movlw ti'FO' es del teclado extendido xorwf db2,W en este caso sigo en RX btfss STATUS,2 goto ma1n4 bsf env1oF0 respuesta_ok goto mainS main4 movlw H'FF1 xorwf db2.W

8 de 18 btfss STATUS,2 goto ma1n62 resetn

movlw h'AA1 FF, reseteo el teclado movwf bufferout cargo en el buffer de salida Ff, reset teclado goto KEY VA main62 movlw H'EE1 xorwf db2,W btfss STATUS,Z goto main7 movlw h'EE' EE, comando movwf bufferout cargo en el buffer de salida Ff, reset teclado goto KEY VA rnain? movlw H'F2' xorwf db2,W btfss STATUS.Z goto mainS inic1a__key cali mainS movlw h'AB1 ab, comando respuesta para ID movwf bufferout cargo en el buffer de salida cali KEYJ/A movlw h'83' 83, comando respuesta para ID movwf bufferout cargo en el buffer de salida Ff, reset teclado goto KEY VA ma1n8 a todo lo demás AKC es la respuesta OK...

movlw H'GOFA' el KEY responde : ACK movwf bufferout cargo en el buffer de salida FE, re-envio goto KEY VA

rutina en caso de errores. error_rut clrf paridad clrf BANDERA bcf clkout bcf dataout re tu rn

rutina que comprueba apagado manual .. tt_pow cali Delay888us ; en caso de rebotes espero un tiempo btfsc hayJ/CC? goto falso_apag bcf apágate ; en caso de que haya sido apgado de bcf Rojo Da tos ; forma incorrecta (apresurada) bsf AmarilloFIN bsf clkout ; contarresto picos de voltaje en el encendido bsf dataout ; contraresto picos de voltaje en el encendido espera_enc0 bcf INTCON.GIE btfss hay_VCC? goto espera_encO

goto encendido

Rutina que arranca el teclado

rranca movlw d'S' ; movwf Encendido cali DelayGs bcf dataout bcf clkout bsf arranque movlw h'AA1 ; inicio el teclado movwf bufferout ; cargo en el buffer de salida AA, reset teclado cali KEY_VA

bsf arranque bcf AmarilloFIN

9 de 18 return

; esta parte es para el arranque del mouse arranca_raton

movlw d'3' movwf PCLATH clrf 1ni_mouse movlw d'291 movwf paridad envia_dato cali tomandato incf ini_mouse,F movwf bufferout cali SERIAL_RUT decfsz piá'ridad.F goto envia_dato

bcf XNTCON.INTF

retf i e

Esta rutina envía datos de mouse por el pórtico serial

MOUSE RUT

btfss mouse control goto MOUSE~RUT2

movfw anterior_mouse xorwf bufferoutl,W btfss STATUS,2 goto MOUSE_RUT2

movlw h'F4' ; cualquier numero distinto de los que identifico movwf anterior_jnouse

goto empiezal

MOUSE_RUT2 movfw bufferoutl movwf anteriorjnouse

movlw H'05' es la tecla de acelerador xorwf bufferoutl,W en este caso sigo en RX btfss STATUS,2 goto MOUSE^SIGUE btfsc vinoF0 goto empiezal btfss REWinD_CONTROL goto MOUSE_S

incf sensibilidad,F mejoro la sensibilidad ? movlw h'21 addwf positivo ,F movlw h'2' subwf negativo,F movlw d'7' xorwf sensibilidad,W btfss STATUS,! goto empiezal movlw b'lQ000010' movwf positivo movlw b'101111101 movwf negativo clrf sensibilidad goto empiezal

MOUSE 5 btfss ACELERA goto normal .control bcf ACELERA goto empi ezal normal control bsf ACELERA

movlw d'131 addwf posi tivo,W movwf acelera_posi

10 de 18 movlw d'131 subwf negativo ,W movwf acelera_nega goto empiezal

MOUSE_SIGUE movlw b1 11000000 ' movwf mouse_HEAD clrf x_mouse clrf y_mouse

movlw H'001 es del cero xorwf bufferoutl.w en este caso sigo en RX btfss STATUS, Z goto MOUSE C bsf BTT_IZQ btfsc vinoE0 si es de presión, es uno bcf BTT IZQ si vino E0, solté bcf BTT_DER btfsc mouse control es control remoto universal ? bsf control BTT te* goto VA_MOUSE

MOUSE_C movlw H'361 es del punto decimal xorwf buff eroutl ,W en este caso sigo en RX btfss STATUS , Z goto mouse_C2

mouse DER bsf BTT_DER btfsc vinoF0 si es de presión, es uno bcf BTT DER si vino F0, solté bcf BTT__IZQ btfsc mause_control bsf control BTT goto VA_MOUSE

mouse__C2 movlw H'0C' es del punto decimal xorwf bufferoutl.w en este caso sigo en RX btfss STATUS , Z goto MOUSE_2 goto mouse_DER

MOUSE 2 btfsc vinoF0 para no tomar en cuenta la depresión. goto empiezal

movlw H'02l xorwf bufferoutl.w en este caso sigo en RX btfss STATUS, 2 goto MOUSE_8 btfsc mouse^control goto controlJZnega

control 2posi bcf mousa_HEAD,3 trabajo con lógica positiva - hacia abajo bcf mous.e_J)EAD ,2 configuro bit de dirección, marco banderas movfw pos i tívo btfsc ACELERA movlw acelera_po.si movwf y mouse goto VA_MOUSE

control_2nega trabajo con lógica negativa ( por la disposición fisica de teclas en control universal) bsf mouse_HEAD,3 bsf mouse_HEAD,2 movfw negativo btfsc ACEL-^RA movlw' acel&^^ne'ga movwf y mouseT*™ S-i goto VA_MOUSE

' ' movlw H'081 xorwf buff eroutl ,W btfss STATUS, Z goto MOUSE_4 btfsc mouse_control goto control_2posi goto control_2nega

MOUSE 4 movlw H'041

11 de 18 xorwf bufferoutl.w btfss STATUS, Z goto MOUSE_6

control_ 4 bsf mouse_HEAD,l bsf mouse_HEAD,0 movfw negativo btfsc ACELERA movlw acelera_nega movwf x mouse goto VA_MQUSE

MOUSE_6 movlw H'OG1 xorwf bufferoutl.w btfss STATUS ,Z gota MOUSE_1

control_ 6 bcf mouse_HEAD,l bcf mouse__HEAD,0 movfw posi tivo btfsc ACELERA movlw acelera_posi movwf x mouse goto VA_MOUSE

MOUSE_1 mavlw H'Ql1 xorwf bufferoutl ,W btfss STATUS , Z gota MOUSE_3 bsf mouse_HEAD,l bsf mouse_HEAD,0 movfw negativo btfsc ACELERA movlw acelera_nega movwf x_mouse btfsc mouse_control goto control__2nega goto centro l_2posi

MOUSE_3 movlw H'031 xorwf bufferoutl ,W btfS| STATUS, Z gotp- MOUSEJ7 bcf mouse_HEAO,l bcf mouse_HEAD,0 movfw positiva btfsc ACELERA movlw acelera_posi movwf x_jnouse btfsc mouse__control goto control_2nega goto contra l_2posi

MOUSE_7 movlw H'071 xorwf bufferoutl ,W btfss STATUS, Z goto MOUSE_9 bsf mouse_HEAD,l bsf mouse_HEAD,0 movfw negativa btfsc ACELERA movlw acelera_nega movwf x_mouse btfsc mouse_control goto control_2posi goto contra l_2nega

MOUSE_9 movlw H'091 xorwf bufferoutl.w btfss STATUS , Z goto LETRAS?? bcf mouse__HEAD,l bcf mouse_HEAD,0 movfw positivo btfsc ACELERA movlw acelera_posi movwf x_mouse btfsc mouse__control goto control__2posi goto contra l_2nega

12 de 18 ¿LETRAS: los siguientes datos, indican que se pretende introducir letras con el ; control remoto de ratón o universal usando tramas de ratón .

LETRAS??

movlw d'SO' tecla REWIND xorwf bufferoutl, W btfss STATUS , Z goto ES PLAY btfss REWinD_CONTROL goto pongoREWinD presione 1 vez REWinD bcf REWinD CONTROL presione por 2 vez REWinD bcf AmarilloFIN goto empiezal pongoREWinD bsf REWinD CONTROL equivale a 2nd fuñe del remoto. bsf AmarilloFIN goto empiezal

ESJ>LAY movlw h'35' tecla PLAY xorwf bufferoutl ,W btfss STATUS , 2 goto CH POSI btfsc REWinD CONTROL goto nd2 PLAY bcf BORRO? movlw h'SA' bsf SolteAnterior bcf vinoEO cali SIMULO_KEY goto empiezal nd2_PLAY

bcf BORRO? movlw h'58' bsf SolteAnterior es el del solté anterior bcf vinoEO cali SIMULO_KEY goto empiezal

CH_POSI movlw d'321 ¿equivalente de CH+ xorwf bufferoutl ,W btfss STATUS.Z goto CH nega movlw d'28' ¿equivalente de CH+ xorwf conta control, W btfsc STATUS.Z clrf conta_control incf conta__control ,F cali identifica movwf bufferout2 btfsc REWinD CONTROL goto CARAC^ASCII fuera dato btfss BORRO? para saber si es la primera vez que entra...? goto va_letra no es la primera presión de ch+ bsf vinoE0 bsf SolteAnterior movlw h'71' cali SIMULOJ

bsf vinoEQ bsf SolteAnterlor movlw h'6B' cali SIMULOJ

CHanega

13 de 18 movlw d'331 ¡equivalente de CH- xorwf bufferoutl ,W btfss STATUS , Z goto BACK SPACE movlw h'l1 subwf conta control, F movlw h'001 xorwf conta control, W btfss STATUS , Z goto sigue CH nega movlw d'28' movwf conta_control sigue CH nega cali Identi fica movwf bufferaut2 btfsc REWinD CONTROL goto CARAC_ASCII goto fuera__dato

BACK_SPACE movlw d'S2l equivalente de backspace, pero con « xorwf bufferoutl ,W btfss STATUS, Z goto empieza! btfss REWinD CONTROL goto WIND bcf BORRO? clrf conta control movlw h'66' bsf SolteAnterior bcf vinoEO cali SIMULOJ

WIND bcf BORRO? clrf conta control movlw h'741 bsf SolteAnterior bsf vinoEO cali SIMULO_KEY goto empiezal

CARAC_ASCII

btfss BORRO? goto va_letra2 bsf vinoEO bsf SolteAnterior movlw h'711 cali SÍMULO_KEY va Ietra2 rutina para enviar letras al PC clrf anterior bsf BORRO? movlw h'll' tecla ALT IZQ (solo de presión) movwf bufferoutl bcf SolteAnterior bcf vinoEO bcf vinoFO cali COMPROBAR?

swapf bufferout2 ,w andlw b'OOOOllll1 cali identi fica2 bsf SolteAnterior cali SIMULO_KEY

movfw bufferout2 andlw b'GOOOllll' cali identif i ca2

cali SIMULOJíEY

movlw h'll1 tecla ALT IZQ (depresión) bcf SolteAnterior

cali SIMULOJCEY

bsf vinoEO bsf SolteAnterior movlw h'6B' cali SIMULOJCEY goto empiezal

SIMULO KEY

14 de 18 clrf anterior bsf vinoFQ movwf bufferoutl cali COMPROBAR? return

SERIAL RUT envía los datos al puerto RS 232

envío por el puerto serial a 1200 bps primero envío el bit de parada sigue la linea de clkout en baja bsf TXserle cali retarda bcf TXserie ; bit de inicio de TX serial movlw d'81 movwf contador cali retardo

TXserial decfsz contador,F goto sigueserial goto finserial slgueserial rrf bufferout.F skpc que dato es ?? goto envioOserie ;enviolserie bsf TXse ri e cali retardo goto TXserial envioOserie bcf TXserie cali retardo goto TXserial finserial bsf TXse ri e bit de parada cali retardo return

; duración del bit retardo movlw d'146' ***** es 45 a 60Q y 146 a 1200 movwf TMR0 es 228 a 4800bps *********** explora btfss 1NTCON.T0IF goto explora bcf INTCON.TOIF return

; rutina para generar retardos largos

DelaySs lazoG movlw h'FF' movwf db3 Ioop4 cali Delay444us decfsz db3,F goto Ioop4 decfsz Encendido, F goto Iazo6 return

Este programa hace 445 us de delay

Delay888us movlw d'4' goto inter444

15 de 18 Delay444us movlw d'21 inter444 movwf dbl loopl movlw d'761 movwf db2 Ioop2 decfsz db2,f ;3 us * 72 * 2 = 432 us goto Ioop2

decfsz dbl,f ;3 us * 2 goto loopl

return ;2 us esta rutina arma las tramas de datos que se envían luego por el puerto serial

VA MOUSE bsf mouse_HEAD,5 btfss BTT_I2Q bcf mouse_HEAD,5 bsf mouse_HEAD,4 btfss BTT_DER bcf mouse_HEAD,4 movfw mouse_HEAD movwf bufferout cali SERIAL_RUT movfw x_mouse movwf bufferout cali SERIALJíUT movfw y_mouse movwf bufferout cali SERIALJíUT btfss control_BTT goto empiezal bcf BTT DER bcf BTT_IZQ bcf control_BTT goto VA HOUSE

Esta rutina envía datos de teclado comprobando bit solté anterior

COMPROBAR?

btfsc SolteAnterior goto comprueba

ENVIÓ?? btfss vinoEO goto continua movlw h'EO1 movwf bufferout cali KEY VA continua btfss vinoFO goto continual movlw h'FO1 movwf bufferout cali KEY VA continual movfw bufferoutl movwf bufferout movwf anterior cali KEY VA return comprueba movfw anterior xorwf bufferoutl.w ; en este caso sigo en RX btfsc STATUS,2 goto ENVIÓ??

Corrige

btfss vinoEO goto continúale movlw h'EO'

16 de 18 movwf bufferout cali KEY VA continúale movfw bufferoutl movwf bufferout cali KEY_VA ; btfss retardo?? cali Delay888us gato ENVÍO??

tablas para generar caracteres toma_dato movfw 1ni mouse addwf PCL.F retlw h'CD' retlw h'88' 2 retlw h'8l' 3 retlw h'A4' 4 retlw h'A8' 5 retlw h'B4' 6 retlw h'AB1 7 retlw h'961 8 retlw h'951 9 retlw h'3l' 10 retlw h'Al1 11 retlw h'BC' 12 retlw h'BC1 13 retlw h'AD1 14 retlw h'AF1 15 retlw h'BS' 16 retlw h'B3' 17 retlw h'AS' 18 retlw h'BC' 19 retlw h'BO' 20 retlw h'AE' 21 retlw h'BO' 22 retlw h'90' 23 retlw h'AS1 24 retlw h'901 25 retlw h'AB1 26 retlw h'Al' 27 retlw h'AS' 28 retlw h'89' 29

identifica movlw d'3' movwf PCLATH movfw conta control btfsc REWinO CONTROL addlw d'281 addwf PCL.F _ ; salta W pasos nop re tlw h'29' ; espacio retlw h'lC' letra a retlw h'32' letra b retlw h'211 letra c retlw h'231 letra d retlw h'24' letra e retlw h'2B' letra f retlw h'34' letra g retlw h'33' letra h retlw h'431 letra i retlw h'3B' letra j re t-l-vr h'42l letra k retlw h'4Bl letra 1 retlw h'3A' letra m retlw h'311 letra n retlw h'4C' letra n retlw h'44' letra 0 retlw h'4D' letra p retlw h'151 letra q retlw h'201 letra r retlw h'lB' letra s retlw h'2C' letra t retlw h'SC1 letra u retlw h'2A' letra v retlw h'lD1 letra w retlw h'221 letra x retlw h'3S' letra y retlw h'lA' letra z

17 de 18 hasta aquí 28 datos

retlw h'641 letra @ retlw h'331 letra ! retlw h'341 letra " retlw h'351 letra # retlw h'36' letra $ retlw h'37' letra % retlw h'381 letra & retlw h'391 letra ] retlw hMS1 letra - retlw h'47' letra / retlw h'53' letra : retlw h'601 letra < retlw h'61' letra = retlw h'621 letra > retlw h'631 letra ? retlw h'93' • letra ] retlw h'941 letra A aqui comienzo con los números retlw h'951 signo _ retlw h'49l signo 1 retlw h'501 signo 2 retlw h'Sl1 signo 3 retlw h'521 signo 4 retlw h'S3' signo 5 retlw h'541 signo 6 retlw h'SS1 retlw h'561 signo s retlw h'571 signo 9 retlw signo 0 identificas

addwf PCL.F ¡salta W pasos h'70' letra 0 h'691 letra 1 h'72' letra 2 h'7A' letra 3 h'SB1 letra 4 h'731 letra 5 h'741 letra 6 h'SC1 letra 7 h'75' letra 8 h'7D' letra 9 ;hasta aqui 10 datos, solo números decimales del 0 al 9 end

18 de 18 ANEXO F