Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 Introduccin .................................................................................................................. 3 2 Objetivos de la prctica ................................................................................... 4 3 Hardware............................................................................................................................. 5 3.1 Sensor Infrarrojos TFMS 5360 ............................................................... 5 3.1.1 Conexionado y acondicionamiento del sensor al microcontrolador. .................................................................................................. 9 3.2 Conexionado y acondicionamiento del diodo emisor. ...... 10 4 Desarrollo de la prctica. ............................................................................ 11 4.1 Ejemplo de implementacin de programa de prueba para el diodo emisor de infrarrojos. ............................................................... 13 5 Protocolo de comunicacin .............................................................................. 16 5.1 Nivel Bajo ............................................................................................................ 18 5.2 Nivel Medio ......................................................................................................... 29 5.3 Nivel Alto ............................................................................................................ 31 6 Implementacin ........................................................................................................... 32 6.1 Creacin de Libreras............................................................................. 33 6.2.1 Emisor_Nivel_Bajo.asm...................................................................... 34 6.2.2 Receptor_Nivel_Bajo.asm ................................................................ 39 6.3 nivel_paquetes.lib ....................................................................................... 45 6.3.1 Emisor_Paquete.asm ........................................................................... 46 6.3.2 Receptor_Paquete.asm ........................................................................ 49 6.4 nivel_paquetes_variables.lib ............................................................. 51 6.5 Divide_Paquetes_Emisor.asm .................................................................. 51 6.6 Divide_Paquetes_Receptor.asm ............................................................. 54 6.7 Divide_Paquetes_Emisor (2).asm ........................................................ 56 6.8 Implementacin del nivel bajo en modo rpido.................. 59 6.9 Implementacin del nivel bajo con paridad. ........................ 61 6.9.1 Emisor ............................................................................................................. 62 6.9.2 Receptor: ..................................................................................................... 65 7 Manual de instrucciones ................................................................................... 65 7.1 implementacin fsica:............................................................................. 65 7.2 implementacin software: ..................................................................... 65 8 Restricciones del sistema de comunicacin por infrarrojos. ..................................................................................................................... 68 9 Ejercicios Propuestos ......................................................................................... 69 10 Referencias bibliogrficas ......................................................................... 70
1 Introduccin
En la presente prctica vamos a hacer uso del microcontrolador PIC16f84 para el control de un sistema de comunicacin basada en Infrarrojos. El microcontrolador se hace idneo para este tipo de comunicaciones, ya que: Como en todo sistema de comunicacin, se dan un emisor del mensaje y un receptor del mismo. Es un caso bsico de comunicacin, donde el mensaje a transmitir entre un dispositivo y otro es necesario encapsularlo en un protocolo, o lo que es lo mismo codificarlo. El PiC, como microcontrolador, posee capacidad de procesamiento de datos, lo que permite codificar y decodificar un mensaje. En un sistema de comunicacin es fundamental la flexibilidad, que nos permita explotar los recursos al mximo y estudiar distintas estrategias de comunicacin. El PIC nos permite esa ductilidad, ya que nos permite configurar cualquier sistema de comunicacin sin hacer modificaciones en el Hardware, simplemente cambiando el programa del microcontrolador. A parte, estamos ante un caso tpico de instrumentacin basada en sensores y actuadores de infrarrojos. Debido a la naturaleza del infrarrojo, estos dispositivos trabajan en un rango de frecuencias bastante altos ( por ejemplo, como se ver, el sensor de infrarrojos trabaja a 36khz). Esto requiere el uso de seales ( tanto en el emisor como en el receptor) acondicionadas con una frecuencia elevada, que permita el muestreo correcto de la seal sin prdida de informacin. .El ciclo de instruccin del PIC consta de 4 ciclos del reloj principal, y por tanto el tiempo de ciclo de instruccin es 1 s (ya que la frecuencia del reloj es de 4Mhz ). Esto lo hace lo suficientemente rpido para poder hacer el muestreo de la seal en el receptor o la emisin de la seal en el correspondiente emisor. Por estas razones, por ejemplo, un mdulo de adquisicin como LabJack con muy baja frecuencia de muestreo y actuacin no sera suficiente para este sistema. Finalmente, la lgica discreta con la que trabaja el microcontrolador permite el manejo de seales de una manera ms robusta y ajena de fallos, rasgo fundamental en un sistema de comunicacin donde un solo bit pude modificar completamente el mensaje que se quiso enviar originalmente.
Para el diseo y estudio de este sistemas, vamos a pasar por distintas etapas, que consistirn en: Estudio de los componentes bsicos a utilizar, principalmente el Sensor de Infrarrojo TFMS5360 y el emisor de Infrarrojo LED. Estudio del Acondicionamiento necesario para acoplamiento de los dispositivos Hardware a la placa en la que se encuentra el PIC16f84. Estudio del Protocolo de comunicacin para envo de mensajes entre emisor y receptor. Aplicacin a programas del sistema de comunicacin implementado.
2 Objetivos de la prctica
En esta segunda prctica de Diseo de sistemas basados en microprocesadores hemos decidido realizar una prctica basada en la comunicacin por infrarrojos. La idea de hacer una prctica de este tipo no fue repentina. Antes de realizar esta prctica barajemos otras posibles prcticas de libre eleccin para esta asignatura. Algunos ejemplos de prcticas candidatas fueron: control de un lector de cdigos de barras, traduccin de cdigo Morse a palabras en lenguaje natural y viceversa o las mismas prcticas propuestas por el profesor. La primera opcin, la de un control de un lector de cdigo de barras, fue descartada porque a simple vista pareca bastante complicada. Empecemos a pensar en cmo realizarla y comencemos a atormentarnos antes de tiempo, aunque quizs sin razn. Pensando en la manera de realizarla nos dimos cuenta de que quizs tendramos que implementar una librera de operaciones matemticas tales como la divisin o la multiplicacin, ya que la idea para identificar cada una de las barras del cdigo de barras, suponiendo que no siempre el sensor de luz se va a mover a la misma velocidad ya que estara manejada por una mano humana pero suponiendo tambin que cuando empieza a leer el cdigo de barras lo leer todo a la misma velocidad, era tener una primera barra de referencia a partir de la cual midiramos el ancho de cada una de las barras segn el tiempo que estuviera sobre ellas el sensor de luz. Esta forma de medir el ancho de las barras conllevara tener que realizar alguna operacin matemtica debido a las reglas de tres que tendramos que haber usado para identificar el ancho de las barras usando como medida el tiempo. Es por ello por lo que era probable que tuviramos que realizar la librera matemtica. La verdad es que esta idea nos daba un poco de respeto, ya que tendramos que realizar una librera matemtica, comprobar que funcionara y tendramos que suponer que la velocidad con la que se recorre el cdigo de barras es constante (algo poco probable si es una mano humana la que maneja el sensor de luz). En principio tenamos intencin de realizar esta prctica, hasta que ser nos ocurri que una prctica interesante tambin de realizar sera la segunda opcin comentada, la del cdigo Morse. Esta prctica, aunque interesante, sera tambin bastante sencilla. Si utilizramos el teclado para introducir las seales necesarias al PIC, solo tendramos que comprobar el tiempo que permanece pulsada una tecla del teclado y compararlo con una tabla de rangos de tiempos (tendran que ser rangos de tiempos debido a que quien lo manejara sera una persona, con lo que no podra medir con una precisin de microsegundos el tiempo que tiene que mantener pulsada la tecla) para determinar el smbolo al que representa el cdigo Morse identificado. Aunque esta prctica pareca sencilla, se podra complicar si pensramos en realizar el proceso contrario, es decir, traducir una ristra de letras a una salida en cdigo Morse. Adems se podra aadir que esa salida en cdigo Morse se pudiera transmitir a otro PIC que leyera el cdigo Morse, lo tradujera, y mostrara en la LCD los smbolos correspondientes a la transmisin en Morse traducidos.
En principio, esta transmisin se realizara por contacto fsico, es decir, mediante un cable conectando los dos PIC. Fue entonces, pensando en la manera de realizar esta prctica, cuando se nos ocurri que la transmisin podramos realizarla sin necesidad de un contacto fsico debido a que podramos utilizar medios de transmisin como el de un diodo emisor de infrarrojos, como el mando de la televisin, ya que ste acepta un rango bastante amplio en la direccin del emisor y es fcil de conseguir tanto el emisor como el receptor de infrarrojos. Finalmente, de aqu surgi la idea de realizar un PIC emisor de seales en infrarrojo y un PIC receptor de seales infrarrojo. Pero lo que decidimos finalmente no fue enviar cdigo Morse, puesto que si ya tenamos los instrumentos necesarios para realizar la comunicacin mediante infrarrojos, podramos enviar bytes en lugar de cdigo Morse, y hacer que dos PICs se comunicaran mediante este mtodo. Esta prctica es interesante de realizar y se le puede aadir la complejidad que se desee. Adems, como ya hemos dicho antes, los instrumentos necesarios para realizar esta prctica eran fciles de conseguir, ya que todos los televisores tienen un receptor de infrarrojos y un mando con un diodo emisor. En el caso de que no pudiramos conseguir estos dispositivos (el diodo emisor y el receptor de infrarrojos), podramos comprarlo en una tienda especializada en electrnica, ya que estos dispositivos se pueden conseguir a bajo precio. Es por esto por lo que definitivamente decidimos hacer esta prctica. En principio haramos que dos microcontroladores PICs se comunicaran entre ellos y despus le iramos aadiendo robustez y especificidad a esta emisin-recepcin, ampliando la prctica mientras tuviramos tiempo.
3 Hardware
3.1 Sensor Infrarrojos TFMS 5360
Este sensor de infrarrojos es un sensor que se suele utilizar en los televisores y en vdeos para recibir las seales que tenan los mandos a distancia a stos. Son bastante comunes y fciles de conseguir. Adems en Internet se pueden conseguir hojas de caractersticas de este tipo de sensor. Este sensor tiene tres patillas, una para el voltaje que se le suministre desde fuera, otra para la tierra y la tercera para la salida de datos. Estas tres patillas estn conformadas como se muestran en la siguiente figura:
Las patilla GND es la patilla que deber de estar conectada a tierra. La patilla Vs ser la patilla que deber estar conectada a la fuente (que deber de ser de 5 voltios). La patilla OUT es la que nos proporcionar la salida del sensor, segn la informacin que consiga captar de las ondas de luz infrarroja que reciba. Este sensor es de la familia de los sensores TFMS 5..0. Las caractersticas a destacar de esta familia de sensores son: Poseen un detector de luz y un preamplificador en un solo encapsulado. Una salida activa a nivel bajo. Esto quiere decir que la salida del sensor estar proporcionando 5 voltios mientras el sensor no reciba nada. Cuando reciba un tren de pulsos a una velocidad adecuada, el sensor de infrarrojos tendr en su salida de datos 0 voltios. Este tipo de lgica nos permite conocer cuando se ha estropeado el sensor, ya que, mientras no reciba el tren de pulsos necesario, deber contener 5 voltios en su lnea de salida. Si hubiera un cero podramos deducir que no est funcionando correctamente. Filtro interno para frecuencias PCM. Alta inmunidad contra ambientes luminosos. Consumo de 5 voltios, baja consumo de potencia Compatibilidad con TTL y CMOS Transmisin continua es posible. Ms adelante se comentar esta caracterstica ms detenidamente. Todos los sensores de infrarrojos de la familia TFMS 5..0 tendrn la misma forma de la figura y la caracterstica ms relevante que los diferenciarn ser la frecuencia en la que trabajarn estos. En las caractersticas de estos sensores se ha hablado de alta inmunidad contra ambientes luminosos. La alta inmunidad es conseguida debido a que para que el sensor de una respuesta a una onda de luz infrarroja deba recibir esa onda con unas caractersticas determinadas. Esto es as porque si diera una salida a bajo nivel para cualquier onda de luz infrarroja, se producira una lectura incontrolada del sensor, estara constantemente leyendo siempre y cuando hubiera una fuente de luz que pudiera proporcionar ondas de luz infrarroja al sensor, como puede ser la luz solar. El sensor debe poder distinguir entre cuando recibe la luz infrarroja de forma controlada y cuando recibe ruido. Es por ello por lo que para que el sensor d una respuesta acertada tengamos que enviar un tren de pulsos bien definidos de ondas infrarrojas. Este tren de pulsos tiene que tener una determinada frecuencia asociada que coincida con la frecuencia reconocida por el sensor. Ms adelante se explicar como ha de enviarse un tren de pulsos y con qu retardos para poder recibir con el sensor de infrarrojos una respuesta continua.
En concreto el sensor de infrarrojos utilizado por nosotros es el TFMS 5380. Este sensor trabaja a una frecuencia de 38 KHz. Eso significa que el perodo de cada pulso de un tren de 1 pulsos de infrarrojos deber durar = 0, 00002631 segundos, es decir, 26,31 38000 microsegundos. Otro punto de las caractersticas de las que se ha hablado es el de la transmisin continua porque debido a las especificaciones del sensor, ste debe recibir un tren de pulsos, como se acaba de comentar, para que responda a unas ondas de luz infrarroja. Este tren de pulsos deber mantenerse activo durante un tiempo menor o igual al 40 % del tiempo total que dura el pulso que se obtendr del sensor, es decir, que el perodo en el que est recibiendo el sensor el tren de pulsos tiene que ser igual a 0,4 veces el tiempo que tarda el sensor en recibir el tren de pulsos mas estar un perodo inactivo antes de recibir el siguiente tren de pulsos. Evidentemente, para lograr obtener estas caractersticas tiene que haber dentro del encapsulado mucho ms que un diodo receptor de luz infrarroja. En la siguiente figura se puede ver como est estructurado el sensor de infrarrojos interiormente:
Se puede observar que hay un circuito de control, un demodulador, un transistor para la salida,.... El circuito de control probablemente sea el que controla que los tiempos de envo de las ondas de infrarrojos (trenes de pulsos, silencios, ...) sean los correctos, mientras que el circuito modulador sea el que permite que la salida del sensor sea una salida continua en respuesta al tren de pulsos de entrada. En cambio, el circuito del transistor lo que permite es mantener una salida a 5 voltios mientras el transistor, algo que ocurrir cuando reciba una seal correcta el sensor de infrarrojos. Esto es as puesto que el transistor acta como una especie de conmutador, que cerrar el circuito cuando reciba una seal correcta y lo abrir mientras esto no ocurra, manteniendo la salida a 5 voltios mientras est abierto y a 0 voltios (puesto que est a tierra) cuanto el transistor acte cerrando el circuito. En la siguiente figura se muestra como debe de ser una transmisin para que el sensor la detecte adecuadamente:
En la figura las dos barras pequeas sobre el eje x indican una especie de abreviatura. Por ejemplo, las dos barras pequeas sobre el eje x que se encuentran en el periodo inactivo de la seal indican que la seal permanecer inactiva durante un tiempo mayor al que se ha podido representar en el grfico. Lo mismo ocurre con las dos barras en el eje x durante el tren de pulsos. Indicarn que el tren de pulsos se mantendr durante un tiempo que era tedioso de representar. En esta figura se puede ver que se ha llamado tpi al tiempo que permanece activo el tren de pulsos y T al tiempo que transcurre desde que se activa el tren de pulsos de la primera seal hasta que se recibe el siguiente tren de pulsos. Ahora, una vez puesto nombres a los tiempos, podemos repetir la caracterstica que expresbamos antes de una forma menos tediosa de entender. Para que el sensor de infrarrojos reciba de una forma correcta los datos, el tiempo T debera estar compuesto por un 40% (como mximo) de su periodo de un tren de pulsos y un 60% (como mnimo) de una seal inactiva. Adems, en la hoja de caractersticas se especifica que para un funcionamiento ptimo del sensor, el tpi debera de durar como mnimo 400 s. Esto implica que para que funcionara de forma ptima el sensor TFMD 5380 debera recibir como mnimo 400/26 pulsos (un pulso dura 26 s aproximadamente a 38 kHz de frecuencia) que son unos 15 pulsos. En la hoja de caractersticas viene especificada la respuesta que dara el sensor a una seal recibida como la de la anterior figura. Segn la hoja de caractersticas la seal que proporcionara el sensor a una entrada como esa es parecida a la siguiente:
Segn esta figura que nos proporciona la hoja de caractersticas, el tiempo en le que el sensor estar dando una seal a nivel bajo es igual al tpi, aunque con un error de 160 microsegundos. En verdad, aunque la hoja de caractersticas de este sensor insiste en que debe de haber un 60% de tiempo inactivo y un 40% de tiempo a tren de pulsos para un correcto funcionamiento hemos comprobado empricamente que en realidad con que el periodo inactivo y el periodo a tren de pulsos sea un 50% del periodo total basta para que el funcionamiento sea correcto.
Es por ello que el tiempo que hemos utilizado en nuestra prctica para el tren de pulsos es la mitad del tiempo total, ya que es ms fcil de manejar dividiendo por dos y multiplicando por dos los periodos, que en adelante trataremos como marcos de bits para la transmisin. Debido a estas caractersticas para la transmisin, si quisiramos enviar la informacin como bits, en donde un nivel bajo en la salida del sensor indicara la recepcin de un 1 y un nivel alto la inexistencia de la recepcin o la recepcin de un cero, para enviar un byte de informacin la forma de enviar los datos por parte del emisor sera la siguiente: Enviando el byte 10101010
Marco de bit
Marco de bit Es decir, que en el control del receptor tendramos que definir un marco de bit de duracin suficiente para que le de tiempo a leer al sensor el tren de pulsos y el periodo inactivo. Adems, tendramos que definir un programa controlador que trabajara con lgica inversa. La salida del sensor es continua, como se ha dicho antes. Esto facilita las cosas de cara a implementar un programa para el controlador del sensor (en este caso un PIC), ya que solo habr que comprobar el nivel en el que est la seal, y no si se produce un tren de salida del sensor.
En la figura se puede ver el diodo emisor (el diodo situado a la izquierda) y el receptor (el situado a la derecha). El diodo receptor est dentro del encapsulado del sensor de infrarrojos. En nuestro caso el diodo emisor tiene que estar apuntando directamente al sensor de infrarrojos, ya que debido a la baja intensidad que proporciona el PIC al diodo emisor, ste no puede emitir la luz infrarroja en un amplio rango de actuacin. An as, el diodo emisor puede estar situado a unos metros del sensor, aunque siempre apuntando al sensor. La salida del sensor ir directamente conectada al microcontrolador. En el circuito implementado por nosotros ira directamente al bit 4 del puerto A. Se puede ver en la figura anterior como se pueden aadir una resistencia de 330 en el cable de alimentacin del sensor y un condensador de 4.7 F conectando la entrada de suministro de voltaje del sensor a la salida a tierra del mismo. Esto nos servira si quisiramos o necesitramos evitar perturbaciones en el suministro de energa. Otro aspecto importante para el acondicionamiento del sensor es el aadido opcional de una resistencia entre la entrada de suministro de energa del sensor y la salida de datos. sta resistencia deber de tener un valor resistivo de ms de 10 k para su correcto funcionamiento. ste ltimo aspecto fue determinante en nuestra prctica, ya que uno de los problemas que nos surgi fue el que no conseguamos que funcionara correctamente la conexin del PIC con el sensor. La razn era que la intensidad, sin esta resistencia aadida, circulaba hacia la tierra y no llegaba hasta el sensor de infrarrojos. Una vez colocada esta resistencia logremos que el sensor funcionara correctamente. Ahora habamos conseguido que la intensidad no fuera toda a tierra y que el sensor pudiera devolver intensidad al PIC en su respuesta.
5V
C
GROUND
< 250
Para que el diodo emisor funcione con la intensidad que proporciona el microcontrolador debe de tener menos de 250 de resistencia. En nuestro caso hemos implementado algunos aadidos adicionales a la prctica. Es por esto por lo que necesitamos el puerto B del microcontrolador PIC tanto para el teclado como para establecer una comunicacin con el diodo emisor. Esto trae ciertos problemas consigo, como podra ser que no llegan los datos necesarios a travs del puerto B y desde el teclado hasta el microcontrolador. Es por ello por lo que, como acondicionamiento, hemos aadido un potencimetro entre la salida del puerto B y la entrada al diodo emisor para poder controlar la intensidad que llega al diodo. En nuestro caso, cuando queramos manejar el teclado, tendremos que ampliar el valor de la resistencia del diodo. En cambio, si queremos manejar el diodo emisor tendremos que disminuir bastante el valor la resistencia para que llegue hasta el emisor la intensidad adecuada para que pueda emitir infrarrojos. La intensidad que proporciona el PIC es de aproximadamente unos 0.65 Miliamperios. Esto puede ser un problema. En el caso del diodo emisor, esta intensidad es suficiente como para que emita los infrarrojos, aunque lo hace en un rango muy restringido. Habr que situar el diodo emisor en la direccin que apunta al sensor de infrarrojos para que ste pueda recibir la luz infrarroja que ste emite. Creemos que este rango de emisin tan restringido es debido a la baja intensidad proporcionada por el microcontrolador PIC, ya que este emisor lo hemos obtenido de un mando de una televisin. En el mando de la televisin este emisor lograba alcanzar un rango de emisin bastante amplio. Es por ello por lo que creemos que si logrramos amplificar la intensidad (mediante un transistor) que le llega al diodo conseguiramos un mayor rango de actuacin del emisor.
4 Desarrollo de la prctica.
Antes de empezar con esta prctica haba que conseguir el sensor de infrarrojos que queramos utilizar. La forma de conseguirlo podra ser obtenindolo de un vdeo o televisor casero, tanto el emisor como el receptor, o comprndolo en un tienda de electrnica. Inicialmente logremos conseguir tanto un sensor como un emisor de un televisor y un vdeo. Al principio de esta prctica utilizbamos un sensor TFMS 5360 a 38 khz. posteriormente, cuando ya tenamos bastante inicializada la prctica, este sensor pas misteriosamente a mejor vida y nos vimos obligados a comprar uno similar.
El sensor que logremos comprar en una tienda de electrnica fue un sensor TFMS 5360, que va a 36 kHz, por lo que no nos hizo falta modificar demasiado el programa para que este sensor aceptase el tren de pulso que era enviado por el emisor, ya que como se puede ver en la siguiente frmula, tenemos que el nmero de instrucciones que tenemos que ejecutar para conseguir el tren de pulso a 38 kHz son dos menos que para conseguir que el tren de pulsos vaya a 36 kHz, por lo que solo habrn de aadirse dos instrucciones nops, una en cada semiperiodo de un pulso del tren de pulsos.
N deinstrucciones =
1 MHz 1000000 = = 26,3157 38 KHz 38000 1 MHz 1000000 N de instrucciones = = = 27,7778 36 KHz 36000
Antes de comenzar a realizar el programa de control del emisor queramos comprobar que el sensor que tenamos funcionaba, y como funcionaba. Esto lo hicimos con la ayuda de un osciloscopio y con una fuente de corriente alterna, aunque con la fuente alterna no conseguimos una seal por parte del sensor con el suficiente sentido como para poder sacar conclusiones. El sensor lo conectemos a una fuente de corriente continua que nos proporcionaba 5 voltios. El osciloscopio lo conectemos a la patilla de salida del sensor, situada a la derecha de ste desde un punto de vista frontal, para poder conocer la respuesta del sensor a los diferentes trenes de pulsos.
5 Voltios Osciloscopio
El osciloscopio tena que estar configurado para que pudiera mostrar una salida de 5 voltios. De la forma en la que nosotros lo tenamos configurado era para que mostrara una escala de cinco voltios por cuadrado de la pantalla del osciloscopio. Con esto sabamos cuando estaba a 5 voltios la salida del sensor de una forma muy simple, ya que cada cuadro equivala a 5 voltios. Para configurar el tiempo en el osciloscopio se puede ir modificando la escala de los cuadros para ver cual es la escala preferida, segn la frecuencia a la que est recibiendo el sensor. Lo que interesa es poder ver el ancho del pulso para conocer el tamao del marco de bit que nos est proporcionando el sensor de infrarrojos.
Con la ayuda del osciloscopio vimos que la fuente de corriente alterna no consegua hacer funcionar al sensor de una forma controlada. Esto se puede explicar debido a las caractersticas del sensor. El sensor, para funcionar correctamente, necesita periodos de inactividad tan amplios o ms amplios an que el periodo de tiempo en el que est recibiendo el tren de pulsos. Las otras alternativas al generador de corriente alterna eran implementar un programa de prueba para probar el sensor o utilizar un mando a distancia para intentar ver lo que recibe el sensor cuando se le apunta con la mano y se intenta establecer una comunicacin con el sensor. La primera alternativa era la ms sencilla de realizar, ya que tenamos el mando y habamos conectado el sensor al osciloscopio, por lo que solo tenamos que apuntar y apretar un botn. Con el mando de la televisin vimos que el sensor funcionaba puesto que daba una respuesta que pareca bastante ms controlada y regular que la respuesta que nos proporcionaba el generador de corriente alterna. Una vez probado que el sensor de infrarrojos funcionaba, tenamos que ver como funcionaba el emisor de infrarrojos. Esto era un poco ms complicado, ya que para ello haba que conseguir que el diodo emitiera una serie de pulsos que fueran acordes con las caractersticas del sensor. Con el fin de emitir el tren de pulsos implementemos un programa sencillo en ensamblador. Conectemos el diodo emisor al PIC y comencemos la transmisin. Estuvimos probando y no obtenamos en el sensor de infrarrojos lo que queramos, hasta que nos dimos cuenta que era por el tiempo de inactividad que haba que dejar despus de cada tren de pulsos en el emisor. Estuvimos probando entonces con variaciones en le tiempo del tren de pulsos, ponindolo en el 60% del periodo total, el 40%, .... Hasta que finalmente dimos con que a pesar de que la hoja de caractersticas del sensor nos deca que tena que ser el 40% del periodo o menos, utilizando el 50% tambin obtenamos unos resultados aceptables. Con trenes de pulsos de mayor duracin con respecto al perodo inactivo la respuesta no estaba controlada. No obtenamos una respuesta regular, (al igual que lo que obtenamos con el generador de corriente alterna), mientras que con trenes de pulsos con una menor duracin con respecto al perodo inactivo obtenamos una respuesta mucho ms regular, y que concordaba con lo que queramos transmitir. A continuacin veremos un programa ejemplo que se puede utilizar para obtener una respuesta conocida del sensor de infrarrojos.
Debido a esto, y para probar el sensor infrarrojos, debemos implementar un programa para el PIC 16F84 en el que reproduzca un tren de pulsos para el emisor de infrarrojos con el fin de poder analizar la respuesta del sensor de infrarrojos ante una seal de estas caractersticas. El PIC 16F84 va a una frecuencia de 1 MHz. Necesitamos una frecuencia para el tren de pulsos de 36 KHz, por lo tanto, con el microcontrolador PIC 16f84 tendremos una velocidad suficiente para poder reproducir el tren de pulsos necesario. Lo nico que se habr de tener en cuenta para poder implementar un programa que defina un tren de pulsos adecuado al sensor de infrarrojos TFMS 5360 es el tiempo que tardan las instrucciones en ejecutarse, ya que no todas las instrucciones se ejecutarn en el mismo perodo de tiempo, para que el sensor de infrarrojos logre distinguir el tren de pulsos de seales ruidosas externas. Es por ello que antes de empezar tendremos que hacer una valoracin del nmero de instrucciones que debemos introducir entre el inicio y el fin de cada semiperodo del tren de pulsos para poder definir ste con una precisin aceptable para el sensor. Una instruccin en el PIC 16F84 se ejecutar en 1 microsegundo, mientras que una instruccin de salto, o una instruccin condicional en la que se produzca el salto debido al valor de la condicin, tardar en ejecutarse 2 microsegundos, es decir, dos ciclos de reloj del microcontrolador. Si tenemos en cuenta estos tiempos de ejecucin para las instrucciones, podra implementar una macro fcilmente que realizara un semiperodo para un tren de pulsos. Para crear esta macro debemos tener en cuenta la siguiente frmula en la que determinamos el nmero de instrucciones que necesitamos para simular el tren de pulsos:
N de instrucciones =
Esta frmula se puede determinar mediante una simple regla de tres, diciendo algo parecido a que si el nmero de instrucciones que se deberan ejecutar si el microcontrolador fuera de 36 KHz es de una instruccin para completar un perodo, Cuntas necesitaramos si tuviramos un microcontrolador a una frecuencia de 1000 KHz?. Con lo que el nmero de instrucciones que necesitaramos se calculara con la siguiente regla de tres: 36 KHz 1000 KHz 1 instruccin
x instrucciones El resultado de esta frmula ha dado un nmero decimal de instrucciones, pero no afectar demasiado a la forma en la que lee el sensor la seal si redondeamos hacia abajo. Es decir, que para realizar un perodo completo necesitaremos las instrucciones necesarias para completar los 27 microsegundos. Para implementar los trenes de pulsos podramos utilizar macros, o llamadas a funciones que realicen el semiperodo positivo y el semiperodo negativo. En este caso utilizaremos macros, ya que si utilizramos funciones tendramos que descontar las instrucciones de salto que se producen tanto en la llamada como en el retorno de la funcin. De todas formas, habr que descontar las instrucciones que se produzcan para realizar los saltos el bucle, en el que implementaremos el nmero de pulsos que queremos que contenga el tren de pulsos.
El procedimiento podra ser de la siguiente forma: La macro semiperiodo estara diseada como sigue:
MACRO semiperiodo fill (nop),12 ENDM
Como se puede ver, tenemos solo 12 instrucciones, en lugar de 13, esto es debido a que adems del semiperodo, necesitamos ejecutar las instrucciones bsf y bcf que activan o desactivan el bit cero del puerto B. ; 1 Ponemos el puerto B como salida, vamos a enviar la seal al diodo emisor desde el bit cero del puerto B.
bsf movlw movwf bcf STATUS,RP0 00h TRISA STATUS,RP0
; 2 Creamos el bucle llamando a la macro que realiza el retardo correspondiente a un semiperodo, para ello cargamos el nmero de veces que queremos que se ejecute el bucle.
movlw mowf Bucle bsf semiperiodo bcf semiperiodo decfsz goto end Npulsos Contador PORTB,0 PORTB,0 Contador,1 Bucle
El tren de pulsos que conseguiramos por la salida del bit cero del puerto B con este programa sera parecido al siguiente:
Cada vez que se ejecute el bucle se ejecutar un periodo del tren de pulsos. Se puede ver como entre pulso y pulso adems se ejecutan tres instrucciones. Esto se podra arreglas utilizando el retardo del semiperiodo a cero, pero no es necesario, ya que la velocidad a la que
se ejecutan las instrucciones nos permiten cierto error. Adems veremos que el sensor de infrarrojos nos permite cierto error tambin. No es demasiado rgido con lo que nos especifica la hoja de caractersticas. Con este programa ya tendramos implementado un tren de pulsos. Ahora solo queda implementar el perodo de tiempo que necesitamos que se encuentre inactivo el diodo emisor para que hay una respuesta controlada por parte del sensor de infrarrojos. Para implementar este periodo de inactividad simplemente habr que hacer el mismo bucle anterior pero las dos instrucciones que activan y desactivan el puerto, ahora tienen que ser las dos de desactivado del puerto, es decir, bcf, o tambin ponerlo a cero una vez y realizar el bucle anterior sin activar ni desactivar el puerto de salida B, puesto que ya estara desactivado. Podra ser algo como sigue:
movlw mowf Bucle1 bcf semiperiodo bcf semiperiodo decfsz goto end Npulsos Contador PORTB,0 PORTB,0 Contador,1 Bucle1
Se han puesto las dos instrucciones bcf puesto que aunque no son necesarias, si queremos contabilizar al 50% exacto del periodo total sin mucho error deberamos poner el mismo nmero de instrucciones. Con este programa ya tendramos implementado un programa de prueba para el sensor de infrarrojos.
5 Protocolo de comunicacin
Primeramente, decir que la unidad bsica de transmisin es el Byte. Por tanto, una de nuestras tareas de sntesis del mensaje ser precisamente descomponerlo hasta llegar a la unidad bsica transmisible en este sistema de comunicacin. Este tamao es suficiente para lo que es el propsito de esta prctica, que no es ms que el de la transmisin de mensajes en forma de Caracteres ASCII. Llegados a esta unidad bsica de transmisin, dadas las restricciones Hardware que presenta el proyecto ( tenemos un nico emisor de infrarrojo y un nico receptor de infrarrojo), vamos a desarrollar una comunicacin unidireccional (1 pic controlar al emisor y el otro al receptor). Por este, el sistema de control de errores se ver afectado por esta unidireccionalidad, y, como veremos ms adelante, ser imposible que el receptor pueda comunicar al emisor que
debe de mandar de nuevo el ltimo envo ya que lleg con error, por tanto, nuestro sistema de control de errores se basar en la redundancia ( ya que no puede el receptor avisar al emisor que le lleg mal el envo, que el emisor mande varias veces cada envo por si hiciera falta repetir el mensaje). Por otra parte, la transmisin va a ser de tipo serie, ya que es imposible formar varios canales de comunicacin simultneos con un nico emisor y receptor. Por ello, vamos a usar una solucin al problema de la transmisin de datos basada en el protocolo de comunicacin estndar del RS-232, y trabajaremos sobre este protocolo de comunicacin base para desarrollar un propio protocolo que ser descrito a continuacin. Finalmente, para fijar todos los objetivos a conseguir con la implementacin posterior, tenemos que decir que no va a ser objetivo la rapidez de transmisin, aunque una vez conseguidos los objetivos bsicos intentaremos hacer una breve introduccin a este tpico. En cambio, si primar como objetivo la robustez del protocolo de comunicacin, y capacidad de detectar errores y, en consecuencia, hacer uso de la redundancia que veremos que poseen los mensajes para poder enmendar estos errores que pudieran producirse. La filosofa bsica a la hora de la implementacin ser la modulacin: dividir el protocolo en diversas capas independientes de manera que las capas superiores usen las funciones que les proporcionan las inferiores, sin necesidad del conocimiento interno de las capas inferiores, simplemente usando una interfaz que el proporciona esa capa inferior. Es decir, las capas superiores usan las llamadas a funciones inferiores, pero no pueden ver internamente como estn implementadas, por lo que no pueden acceder a cualquier parte del cdigo de la capa inferior, solo a las que eta capa inferior exporta como externa y proporciona como servicios. La modulacin nos aporta facilidades a la hora de la sntesis del Sistema, por tanto solo son beneficios para el diseador del sistema de comunicacin, no para el usuario. Si el sistema de comunicacin funciona, le es lo mismo al usuario que haya sido creado modularmente o no. Esta ventajas que proporciona al diseador del sistema de comunicacin son: Fcil Depuracin y localizacin de errores: las capas son independientes, por lo que se pueden analizar cada una individualmente. Fcil solucin de Errores, sin necesidad de modificar todo el sistema de comunicacin, solo modificando aquellos mdulos defectuosos. Fcil escalabilidad: si se desea modificar la filosofa de alguno de los niveles se puede hacer sencillamente manteniendo las interfaces ( para que los niveles superiores puedan seguir funcionando), e igualmente se pueden aadir capas de abstraccin a partir de las bsicas que vamos a desarrollar.
Emisor
0
Receptor
10010110
De hecho, para el estudio de este protocolo de comunicacin tambin va a ser ms sencillo el explicarlo capa a capa de forma inductiva: partiendo de la base vamos abstrayendo niveles superiores del protocolo, hasta llegar el nivel ms alto.
Las capas que en la presente prctica se han desarrollado para sintetizar el protocolo han sido: Nivel Bajo: es el nivel ms bsico, en el que, a partir de los 8 bits del byte (unidad bsica en este nivel) a mandar, se confeccionar la codificacin de estos bits (startbit, stopbit, etc) para ser mandados y se enviarn en modo serie. Por parte del receptor, a partir de bits individiales se recogern y decodificarn para obtener el mensaje de 8 bits originales. Tambin en este nivel se desarrollan funciones con el fin de sincronizar los envos, bien sea a nivel de bytes, o a nivel de paquetes. Nivel Medio: en este nivel se usan las funciones de envo y recepcin de bytes, envo y recepcin de sincronismos para los bytes y los paquetes, para sintetizar paquetes (unidad bsica en este nivel) como una reunin de conjuntos de bytes. Por tanto los bytes se organizarn en paquetes o grupos.
Nivel Alto: es el mximo nivel de abstraccin, se usan las funciones de envo y recepcin de paquetes del nivel anterior (adems de los de sincronizacin de paquetes del nivel ms bajo). Estos paquetes se envan redundantemente ( varias veces cada paquete, no cada byte, sino cada grupo de paquetes), y se desarrollar una lgica para, en funcin de los errores que se produzcan, volver a tomar el mismo paquete o esperar al siguiente diferente. La unidad bsica son los conjuntos redundantes, y en ltima instancia es el programa de usuario que usa las herramientas para un fin determinado. Ntese que, a la hora de abstraer en estos niveles, no se trata de que un elemento de un nivel superior pueda usar solo funciones de su capa inmediatamente inferior. Puede usar funciones de cualquier nivel inferior a l, sea o no inmediata. Lo que no podr nunca es usar funciones de un nivel superior a la capa en la que se encuentra este elemento. Un posible diagrama que exprese lo aqu explicado sera:
Nivel Medio(paquetes)
Nivel Bajo (bytes)
En este nivel, la unidad bsica es el Byte, de manera que los algoritmos desarrollados irn destinados al envo de un byte. Ms adelante veremos como conformar un mensaje mediante Bytes. Un Byte se conforma de 8 bits, de manera que para ser enviados necesitarn de una fase previa de codificacin en el emisor, y de decodificacin en el receptor. Este Byte Codificado necesita ser mandado en serie (bit a bit) a travs del Led de infrarrojos, y recibido por el receptor de infrarrojos, por tanto definamos previamente qu es un bit para este protocolo de comunicacin.