You are on page 1of 75

TREBALL DE FI DE CARRERA

TTOL: Sensores inalmbricos de bajo consumo AUTOR: Marc Ralita lvarez DIRECTOR: Francesc Snchez Robert DATA: 25 de febrer de 2005

Ttol: Sensores inalmbricos de bajo consumo Autor: Marc Ralita lvarez Director: Francesc Snchez Robert Data: 25 de febrer de 2005

Resum El objetivo de este trabajo es realizar el diseo de un sistema emisor-receptor capaz de transmitir los datos proporcionados por un sensor (cualquier tipo de sensor) hacia una estacin receptora. El diseo se basa en un microcontrolador de la casa Microchip (rfPIC12F675). Este es el encargado de tratar la informacin que genera el sensor de forma apropiada para poder enviarla hacia el emisor y poderla gestionar posteriormente. Hay que destacar que el microcontrolador utilizado dispone de diversas opciones de programacin que le permiten hacer una buena gestin de consumo. El trabajo se divide principalmente en dos puntos. En el primer punto se hace un estudio de los diferentes bloques que componen el sistema as como de las especificaciones del microcontrolador que se va a utilizar y las funciones que deber realizar. En el segundo punto ya se aborda exclusivamente el diseo del software mediante el rfPIC12F675. Primero se hacen una serie de pruebas para aprender el manejo del microcontrolador y a continuacin se describe el desarrollo del programa final. En este trabajo se ha hecho bsicamente el estudio del software de comunicacin emisor-receptor. Una ampliacin del trabajo consistira en la captacin, por medio del puerto USB, de los datos recibidos y mostrarlos en un entorno grfico tipo Visual C++. Este es el tema sobre el que trata el tercer punto.

Title: Low consumption wireless sensors Author: Marc Ralita Alvarez Director: Francesc Snchez Robert Date: February, 25th 2005

Overview The aim of this work is to achieve the design of a transceiver system able to transmit the data supplied by a sensor (any kind of sensor) towards a receiver station. The design is based in a microcontroller from the company Microchip (rfPIC12F675).This microcontroller takes charge of processing the information provided by the sensor in a suitable way to be able to send it to the transmitter, and to manage it subsequently. It has to be highlighted that the microcontroller owns several choices of programming that allows a good management of the consumption. The work consists of two points mainly: -the first one is a study of the various blocks that makes up the system, as well as the specifications of the microcontroller that is going to be used and the functions that it will carry out. -the second one is exclusively to get down to the design of the software through the rfPIC12F675.First of all, it takes place some trials in order to learn the running of the microcontroller and afterwards it is described the development of the ultimate program. This work has basically executed the study of the transceiver communications software. An extension of the work will consist, by USB port, of a capture of the data received and show them in a graphics environment type Visual C++. This is the subject of the third point.

NDICE
1. INTRODUCCIN Y ESPECIFICACIONES
1.1. Introduccin.............................1 1.2. Especificaciones..........................2 1.2.1. Diagrama de bloques........................2 1.2.1.1. Emisor....................2 1.2.1.2. Receptor....................3 1.2.2. Especificaciones microcontrolador..............................................4 1.2.3. Comunicacin emisor-receptor............................................7 1.2.3.1. Emisor............................................................................................7 1.2.3.2. Receptor.........................................................................................9

2. DISEO DE TRANSMISOR Y RECEPTOR


2.1. Funcionamiento del PIC12F675.................. ........................11 2.1.1 Acceso a los puertos del microcontrolador.....................................................11 2.1.2. Deteccin pulsador.........................................................................................12 2.1.3. Interrupciones.................................................................................................13 2.1.4. Funcin SLEEP..............................................................................................16 2.2. Diseo del transmisor con rfPIC12F675.......................20 2.2.1. Hardware.....................20 2.2.2. Software.......................22 2.2.2.1. Configuracin registros .......................................................................22 2.2.2.2. Diagrama de estados...........................................................................26 2.3. Diseo del receptor.......................27 2.3.1. Hardware......................27 2.3.2. Software.......................29 2.3.2.1. Configuracin registros........................................................................29 2.3.2.2. Diagrama de estados...........................................................................30

3. FUTURAS LNEAS DE INVESTIGACIN...................35 4. CONCLUSIONES Y BIBLIOGRAFA.................36


4.1. Conclusiones.............................................................................................................36 4.2. Bibliografa.................................................................................................................37

ANEXO 1.........................39 ANEXO 2.........................42 ANEXO 3.........................49

1. INTRODUCCIN Y ESPECIFICACIONES

1. INTRODUCCIN Y ESPECIFICACIONES
1.1. Introduccin
El objetivo de este trabajo es hacer el diseo de un sistema que sea capaz de realizar medidas inalmbricas mediante uno o diversos sensores, independientemente de la magnitud medida: temperatura, humedad, presin, distancia, etc. En un sistema en que el generador de datos se encuentra a cierta distancia del receptor de datos, la divisin de los diferentes bloques sera: sensor, emisor y receptor. En este estudio se ha simplificado el bloque sensor escogiendo un sensor comercial cualquiera y suponiendo que este, para el sistema final, es simplemente una seal analgica que vara en funcin de la magnitud medida. En el ANEXO 1 se realiza un pequeo estudio de un sensor de temperatura aunque no se ha implementado realmente por el motivo explicado anteriormente. El segundo bloque, el bloque emisor, es el que se encarga de convertir la seal analgica procedente del sensor en una seal digital y enviarla al tercer bloque, el receptor. El receptor ha de recibir la seal del emisor y mostrar el valor enviado por el sensor de la forma convenida previamente. Para implementar todas las operaciones que han de realizar tanto emisor como receptor, la mejor manera es hacerlo mediante un microcontrolador programable ya que este permite grabar en su memoria interna todas las operaciones que se hayan de realizar ya sean matemticas o de control. De esta manera se hace relativamente fcil el diseo de protocolos de comunicacin y de aplicaciones de control de puertos. A partir de aqu se realiza el estudio en profundidad de los diferentes bloques que componen el sistema, a excepcin, como se ha comentado anteriormente, del bloque sensor.

SENSORES INALMBRICOS DE BAJO CONSUMO

1.2. Especificaciones
1.2.1. Diagrama de bloques
1.2.1.1. Emisor Este sistema estar formado por 3 bloques bsicos: sensor, emisor y receptor. Pero hace falta entrar en ms detalles para obtener la configuracin final del sistema y poder as elegir los componentes que lo compondrn. En primer lugar hay que desglosar las partes de que est compuesto el sistema emisor. Una primera aproximacin podra ser la siguiente:

Sensor

Conversor A/D

Microcontrolador

Transmisor RF

Fig. 1.1 Diagrama de bloques emisor Segn el tipo de sensor escogido este dar a su salida una seal analgica o digital. En el caso de salida analgica, para que el microcontrolador pueda procesar esa seal es necesaria una conversin de analgico a digital, ya que los microcontroladores trabajan en el mundo digital y no son capaces de procesar seales analgicas. Si por el contrario el sensor ya da una salida digital, ya no es necesario realizar este paso intermedio y se puede conectar directamente el sensor al microcontrolador, siempre y cuando cumpla con las tensiones mximas que acepta el microcontrolador. Hay muchos tipos de conversores Analgico-Digital, la diferencia entre uno y otro est bsicamente en la velocidad de conversin y en la resolucin que pueden ofrecer. La eleccin final depender de las necesidades de cada aplicacin. En este caso en concreto hay que buscar un compromiso entre conversor y microcontrolador ya que en funcin del nmero de puertos de entrada del procesador se tendr que limitar la resolucin del A/D, o por el contrario habr que buscar un procesador con ms puertos de entrada para satisfacer las necesidades de resolucin del A/D. El siguiente bloque a analizar es el microcontrolador. El microcontrolador es el corazn del sistema. Es el encargado de procesar los datos procedentes del conversor A/D y realizar con estos las operaciones necesarias, (operaciones matemticas, codificacin, etc.) para poder ser enviados al bloque transmisor. El microcontrolador ha de analizar los datos que le entrega el conversor A/D, codificarlos segn el tipo de codificacin escogido y entregarle la trama de bits

1. INTRODUCCIN Y ESPECIFICACIONES

generada al bloque emisor. Si se realiza una buena codificacin, en recepcin ser ms difcil que lleguen errores causados por interferencias en el canal, en este caso el aire. El ltimo bloque es el transmisor de Radio Frecuencia (RF). Este bloque se encarga de recibir los datos codificados por el microcontrolador y modularlos para poder ser enviados hacia el receptor. Existen muchas tcnicas de modulacin. La eleccin de una u otra va en funcin del uso al que est destinado el radio enlace, las interferencias que puedan haber en el canal, etc. Tambin es cierto que cuanto ms complicada sea la tcnica de modulacin ms complicado ser el modulador, por este motivo ser necesaria una buena planificacin para conocer todos los detalles del radio enlace. En el caso un sensor inalmbrico el flujo de datos a transmitir no es muy elevado, por eso con una modulacin simple (ASK, FSK) ya habr bastante.

1.2.1.2 Receptor Los bloques que forman el sistema receptor se podran dividir en los siguientes:

Receptor RF

Microcontrolador

Visualizacin resultado (Display, PC, etc.)

Fig. 1.2 Diagrama de bloques receptor El primer bloque del sistema receptor, el receptor de Radio Frecuencia (RF), es el encargado de realizar la demodulacin de los datos recibidos del emisor. Una vez realizada la demodulacin entrega al microcontrolador una ristra de bits que este tendr que analizar y tratar para poder visualizar correctamente el dato enviado desde el emisor. El microcontrolador, que puede ser igual o distinto que el del emisor, tiene que conocer el formato de los datos que va a recibir para poder decodificarlos y poder extraer la informacin correctamente. En el caso en que en el emisor se programe una codificacin con redundancia, en recepcin se tendra que programar un cdigo capaz de detectar errores de canal y corregirlos mediante la redundancia. Una vez extrada la informacin recibida se puede guardar en la memoria interna del microcontrolador, si tiene, para su posterior utilizacin, o simplemente se puede sacar por los puertos de salida del microcontrolador para su visualizacin en el siguiente bloque. El ltimo bloque, la visualizacin del resultado, depende de la manera en que se quieran gestionar los datos recibidos. En el caso de los sensores

SENSORES INALMBRICOS DE BAJO CONSUMO

inalmbricos se podra hacer de dos maneras diferentes: La primera sera simplemente poniendo un display BCD de 7 segmentos y visualizar los datos binarios que salen del microcontrolador. La segunda manera es utilizando un ordenador para la visualizacin. Utilizando algn programa visual como por ejemplo Visual Basic o Visual C++ se puede crear un entorno ms ameno que no un simple display y se consigue que la aplicacin sea un poco ms interactiva para el usuario con lo cual el proyecto final gana valor aadido, pudiendo incluso hacer grficas estadsticas de los valores recibidos del emisor.

1.2.2. Especificaciones microcontrolador


Una vez estudiadas las necesidades del proyecto es hora seleccionar los componentes que se van a utilizar para desarrollarlo. Hay muchas marcas que fabrican microcontroladores y cada una tiene muchos modelos disponibles. Cada uno es ms til para una aplicacin que para otra, por eso hay que hacer una buena seleccin. La caracterstica principal del sistema que se est diseando es que ha de tener el menor consumo posible. Es por este motivo que se ha de buscar la mxima integracin de componentes posible. Comparando entre los diferentes fabricantes, Microchip tiene una gama de microcontroladores que dispone de la integracin de componentes necesaria para este proyecto. El mencionado microcontrolador es el rfPIC12F675, este incorpora en un solo chip de muy reducidas dimensiones el conversor A/D y el circuito emisor de RF necesarios para realizar el sistema emisor. El rfPIC12F675 es una variante del PIC12F675, lo nico que los diferencia es que el primero incorpora el circuito de RF y el segundo no, por lo dems son exactamente iguales. Las caractersticas bsicas de este microcontrolador son las siguientes: Dispone de varios tipos de memoria segn su utilizacin: - 1024 x 14 palabras de memoria FLASH como memoria de programa - 128 x 8 bytes de memoria EEPROM para guardar datos - 64 x 8 bytes de memoria SRAM para los registros de propsito general Oscilador interno de 4MHz. Cada instruccin dura 4 periodos de oscilacin, con lo cual una instruccin (1 ciclo) dura 1s. Dispone de 6 entradas/salidas la direccin de las cuales es programable. 1 comparador analgico interno con 16 posibles niveles internos de referencia. 1 conversor analgico/digital interno de 10 bits de resolucin y 4 canales de entrada multiplexables. 1 timer de 8 bits y otro de 16 con preescaler de 8 y 3 bits respectivamente.

1. INTRODUCCIN Y ESPECIFICACIONES

(el preescaler permite que el timer no se incremente a cada ciclo de procesador sino cada n ciclos, siendo n el valor del preescaler) Funcin SLEEP para un mayor ahorro de energa. Watchdog (perro guardin) para evitar bucles infinitos. Transmisor UHF ASK/FSK en la banda libre. Margen de funcionamiento entre 380-450MHz Data rate: 0 40kbps Potencia de salida de +10dBm a -70dBm con 4 pasos intermedios. Alcance estimado 100m.

Los consumos de este chip son los siguientes: 14mA en transmisin a 434MHz y +6dBm 4mA en transmisin a 434MHz y -15dBm 0.6A en modo sleep y con el perro guardin activado (Watchdog). 0.1A en standby. Tensin de alimentacin entre 2.0 y 5.5v

Los pins de este microcontrolador son los mostrados a continuacin:

Fig. 1.3 Pins rfPIC12F675 Para ms detalles (mapa de memoria, registros, etc.) ver ANEXO 2. La programacin del microcontrolador se realiza mediante lenguaje de bajo nivel, es decir, ensamblador. Es posible tambin, realizar el programa en un cdigo de programacin de alto nivel, por ejemplo C, aunque al final tendr que traducirse a ensamblador mediante algn compilador ya que el cdigo final que se graba en el chip ha de ser obligatoriamente ensamblador. El juego de instrucciones del microcontrolador esta disponible en el anexo 2 fig. 2.4. Para realizar el diseo de este software se ha escogido un Kit de desarrollo que proporciona la misma casa Microchip. El Kit se llama Pickit1 (fig. 1.4) y se suministra con una placa de desarrollo de proyectos que incluye una matriz de leds para visualizar los resultados, un pulsador y un potencimetro para hacer pruebas de funcionamiento de puertos. Una caracterstica muy importante de esta placa es que se conexiona al ordenador mediante un puerto USB, con lo

SENSORES INALMBRICOS DE BAJO CONSUMO

cual no es necesaria una fuente de alimentacin externa. Tambin se suministra con el Kit un juego emisor-receptor sintonizados a 433 MHz para poder hacer pruebas de programacin del conjunto. La programacin del chip es muy sencilla. Al ser una memoria Flash la programacin se puede realizar desde el mismo Kit de desarrollo. Por lo tanto no hace falta cambiar el chip de zcalo cada vez que se quiere cambiar algo del programa. La placa de desarrollo tiene un zcalo en el que se pincha la placa del emisor. Este zcalo, por lo tanto, sirve para programar el chip y para realizar las pruebas del programa.

Fig. 1.4 PicKit1 Una vez comentadas las principales caractersticas del emisor pasemos a comentar el receptor. Como se ha comentado, en el Pickit1 se proporciona una placa emisora y otra receptora. Esta placa receptora se basa en el receptor rfRXD0420, tambin de la casa Microchip. Se trata de un receptor UHF capaz de demodular seales ASK, FSK y FM. No dispone de ningn microcontrolador, por lo tanto es necesario procesar la seal recibida de alguna forma para poder decodificarla y manejarla de la forma deseada. Esta operacin se puede hacer con el mismo microcontrolador que se utiliza para el transmisor pero, en este caso, sin la parte de RF. Por lo tanto se puede coger el microcontrolador PIC12F675 para recibir los datos procedentes del demodulador. Para el diseo final se har con el PIC mencionado, pero para las pruebas sobre el Kit se ha hecho con el PIC16F676 porque en el mismo Kit los pins del receptor y PIC estn conectados de tal forma que con el PIC12F675 la recepcin de datos no queda conectada cosa que con el PIC16F676 ya no pasa y los datos recibidos van directamente a un puerto de entrada. Este nuevo PIC es exactamente igual que el anterior pero con la diferencia que tiene ms puertos de entrada/salida. En cuestin de registros de configuracin, etc. no cambia nada excepto por los nuevos puertos.

1. INTRODUCCIN Y ESPECIFICACIONES

1.2.3. Comunicacin emisor-receptor


1.2.3.1. Emisor A continuacin se describen las funciones que deber realizar el software del emisor. El protocolo de comunicacin utilizado en el sistema emisor-receptor se basa en la fig. 1.5. Primero de todo se enva una trama de sincronismo para prevenir al receptor de que se va a iniciar una transmisin de datos. Esta transmisin puede ser vlida o no, pero la tiene que leer de todos modos. Ms adelante ya usar otros mecanismos para saber si es para l o no. La trama de sincronismo consta de una serie de pulsos iguales y de duracin determinada. Mediante esta trama se filtran posibles impulsos aleatorios de ruido que se puedan recibir. De esta forma no se producen interferencias en el principio de trama de datos. Despus de enviar la trama de sincronismo se hace una pausa para que el receptor sepa que lo que se enviar a continuacin sern los datos de informacin. Por ltimo, cuando el emisor acaba de enviar los datos, deja un tiempo de guarda en el que no transmite nada.

Fig. 1.5 Protocolo de comunicacin La duracin de todos los pulsos, tanto de sincronismo como de datos, es la misma. La eleccin de este tiempo se ha hecho segn el siguiente criterio: Como se ve en la fig. 1.6 cuando hay un cambio de nivel alto a nivel bajo este cambio no es inmediato sino que se hace progresivamente. Pasados 200s es cuando se puede considerar que ya ha cambiado a nivel bajo.

SENSORES INALMBRICOS DE BAJO CONSUMO

Fig. 1.6 Transitorios de un pulso Este pequeo transitorio hay que tenerlo en cuenta a la hora de decidir como va a ser la seal que se va a generar. Por eso, y por facilitar la programacin, se ha decidido que cada pulso generado en el programa emisor tendr una duracin de 512s, tanto en estado alto como en estado bajo. Esta duracin facilita la programacin porque el timer del microcontrolador con preescaler a 1:2 genera overflow exactamente a 512s. As cuando se detecta overflow se continua con la ejecucin normal del programa. La trama de sincronismo se ha hecho que dure 16 pulsos, es decir 16.38ms. La duracin de esta trama depende de lo mucho o poco que se quiera filtrar las interferencias. Se ha escogido 16 por ser un trmino medio. Si se hace durar ms, estar ms protegido pero a la vez se incrementa el tiempo de transmisin. Para una transmisin como la que se realiza aqu no afectar demasiado, aunque si que lo hara en el caso de enviar datos fraccionados en paquetes. La pausa se ha definido con un tiempo de 2.56ms. Este tiempo ha de ser superior al tiempo de un cero de datos e inferior al tiempo de guarda para que el receptor pueda distinguir en todo momento en que estado se encuentra. De esta forma, si el receptor recibe un silencio superior al tiempo de guarda despus de una trama de sincronismo, este ignorar lo que se enve a continuacin y se reiniciar. Despus de una pausa vlida el receptor est preparado para recibir los datos. El formato de los datos es el siguiente: Se ha escogido una codificacin de datos PWM (Pulse Width Modulation) que consiste en codificar los uno y ceros segn la fig. 1.7.

1. INTRODUCCIN Y ESPECIFICACIONES

Fig. 1.7 Formato datos PWM Segn esto, un dato codificado (3 bits) siempre empezar por uno y siempre acabar en cero. De esta forma se puede programar en recepcin algn tipo de correccin de errores si se sabe que 1536s (512s * 3) representan 1 bit decodificado. Este tipo de codificacin es muy til para reducir el BER (Bit Error Rate), ya que al durar ms el dato codificado que el bit original, hay ms probabilidad de recuperar el bit original. Por ltimo, despus de enviar los datos, se deja un tiempo de guarda de 15.3ms para que el receptor pueda saber que la comunicacin ha finalizado. Este tiempo de guarda es ms largo que la pausa antes transmitir datos para que el receptor pueda distinguir entre ambos.

1.2.3.2. Receptor El software del receptor es un poco ms complejo que el del emisor. Esto es as porque, a priori, el receptor no tiene porque saber la duracin de cada pulso (s hay un margen mximo), sino que ha de estar todo el rato comprobando cuando empieza y cuando acaba este. De esta manera ha de llevar un control exhaustivo del tiempo que lleva el pulso en estado alto y realizar la funcin que sea necesaria en funcin de este tiempo y el estado en el que est el programa en ese momento. En primer lugar el programa ha de monitorizar si le llega la trama de sincronismo. Para ello solo ha de mirar si el receptor est en estado alto o en estado bajo. Cuando le llega un uno seguido de un cero, lo nico que ha de mirar es la duracin del cero. Si el cero no dura ms de un tiempo determinado reinicia el programa. Si el cero dura ms de lo predeterminado significa que se pasa a estado de pausa de antes de la transmisin de los datos. Cuando est en estado de pausa, el software ha de comprobar que realmente est en pausa. Por ello, si la pausa dura ms de lo establecido el programa se reiniciar. Esto significa que la trama de sincronismo recibida no era vlida.

10

SENSORES INALMBRICOS DE BAJO CONSUMO

Una vez recibida una pausa vlida se empiezan a recibir los datos. Los datos vienen codificados segn la codificacin PWM. Para decodificarlos la tcnica utilizada es muy sencilla. Lo nico que hay hacer es contar el tiempo que el dato est en estado alto y restarle el tiempo que est en estado bajo. El carry de la operacin es el que dir si el dato era un 1 o un 0. Segn la codificacin PWM un cero est 2/3 de tiempo en estado alto y 1/3 en estado bajo. Al hacer la resta el resultado sale positivo, por lo tanto no hay carry o este es 0. Por el contrario con un uno el resultado del carry ser 1. Despus de la recepcin de datos el receptor pasa a monitorizar si llega un 0 y cuanto tiempo dura este. Si el cero dura un mnimo establecido, entonces puede dar la recepcin como correcta. Si dura menos reinicia el programa e ignora los datos recibidos. Una vez validada la recepcin, es hora de validar los datos recibidos. El emisor, junto con los datos, enva un cdigo de identificacin. En recepcin, el programa ha de comprobar que este cdigo sea vlido. Si no es vlido no se pueden aceptar los datos recibidos y los ignora. Si es vlido guarda los datos en la memoria EEPROM y los muestra en los leds.

2. DISEO DE TRANSMISOR Y RECEPTOR

11

2. DISEO DE TRANSMISOR Y RECEPTOR


2.1. Funcionamiento del PIC12F675
El rfPIC12F675 es una variante del PIC12F675. Solo se diferencian en el circuito de RF. Es por este motivo que para comprender el funcionamiento de este PIC, con el modelo sencillo ya hay bastante. As, para realizar las pruebas iniciales se va a utilizar el PIC12F675. Para familiarizarse con el Kit de pruebas del microcontrolador se han ido realizando pequeos programas para ir viendo como responde y as se ha ido tomando un primer contacto con los diferentes registros del PIC. Los pasos seguidos han sido los siguientes:

2.1.1 Acceso a los puertos del microcontrolador


Este microcontrolador tiene 6 puertos: 5 de entrada/salida 1 de solo entrada El Kit de prueba proporciona una matriz de leds para hacer todas las pruebas necesarias. Esta matriz est conectada a los puertos GP1, GP2, GP4 y GP5 segn se muestra en la Fig. 2.1

Fig. 2.1 Matriz de leds PICKIT 1 Los puertos RA_ se corresponden con los puertos GP_ del microcontrolador.

12

SENSORES INALMBRICOS DE BAJO CONSUMO

Lo primero que se ha probado ha sido encender el led D7. Para ello, como se ve en la Fig. 2.1, solo es necesario activar el puerto GP1(RA1). El programa es el siguiente: list p=12f675 ; list directive to define processor #include <p12f675.inc> ; processor specific variable definitions ;------------------------------------------------;Programa para activar el Puerto GP1 ;------------------------------------------------bsf clrf clrf bcf clrf bsf end STATUS,RP0 TRISIO ANSEL STATUS,RP0 GPIO GPIO,GPIO1 ;selecciono banco 1 ;configura todos los puertos como salidas ;configura los puertos 3:0 como I/O digitales ;selecciono banco 0 ;inicializo todos los puertos a 0 ;activo el Puerto 1 1 lgico ;fin del programa

2.1.2. Deteccin pulsador


Una vez se ha conseguido extraer datos por los puertos, el siguiente paso ser hacer un programa que en cuanto detecte la activacin del pulsador que incorpora el PIC KIT 1 active el led D7. El pulsador del Kit est conectado al puerto GP3 como se observa en la Fig. 2.2 por lo tanto en el programa se ha de leer el estado de este puerto para detectar su activacin:

Fig. 2.2 Conexin del pulsador El programa realizado es el siguiente: list p=12f675 ; list directive to define processor

2. DISEO DE TRANSMISOR Y RECEPTOR

13

#include <p12f675.inc> #define GP3m GPIO, 3 LED bsf STATUS,RP0 clrf ANSEL movlw 0x00 movwf TRISIO bcf STATUS,RP0 clrf GPIO bsf GPIO,GPIO1 MAIN btfss GP3m goto LED bsf STATUS,RP0 clrf ANSEL movlw 0xFF movwf TRISIO bcf STATUS,RP0 clrf GPIO end

;processor specific variable definitions ; pulsador GP3

;selecciona banco 1 ;configura puertos como I/O digitales ;configura el puerto GP1 como salida ;banco 0 ;apaga todos los leds ;activa el led D7

; esta pulsado GP3? ;selecciona banco 1 ;configura puertos como I/O digitales ;configura todos los puertos como entradas (para que se apaguen los leds del todo) ;banco 0 ;apaga todos los leds

2.1.3. Interrupciones
La siguiente prueba realizada es para comprender el funcionamiento de las interrupciones. Este punto es vital en este proyecto ya que el microcontrolador deber despertar de su estado SLEEP mediante una interrupcin provocada por el overflow de un timer interno. El programa realizado es el siguiente: list p=12f675 ; list directive to define processor #include <p12f675.inc> ; processor specific variable definitions ; Definicin de las diferentes variables cblock 0x20 w_temp status_temp endc

14

SENSORES INALMBRICOS DE BAJO CONSUMO

ORG goto

0x000 INIT

; Vector RESET

; Rutina de Interrupcin ; Primero hay que guardar el estado del registro STATUS y de W ORG 0x004 movwf swapf bcf movwf bcf ; Vector Interrupcion w_temp STATUS, W STATUS, RP0 status_temp STATUS,RP0 ; save W register ; swap status to be saved into W ; ---- Select Bank 0 ----; save STATUS register ;banco 0

; Funciones a realizar durante la interrupcin ; Aqui se podria poner una condicion para comprobar el tipo de interrupcin ; que se ha provocado. En este caso solo hay una y no se pone la condicin bcf clrf bsf bcf STATUS,RP0 GPIO GPIO,GPIO1 INTCON, GPIF ;banco 0 ;apaga todos los leds ;borra el flag que avisa de la ; interrupcin

;---------------------------------------; Vuelve a cargar el estado del registro STATUS y W swapf status_temp, W movwf swapf swapf bcf retfie STATUS w_temp, F w_temp, W STATUS,RP0 ; swap status_temp into W, sets ; bank to original state ; restore STATUS register ; restore W register ;banco 0 ;retorna de la interrupcin

; Inicializacin de los diferentes registros INIT ; Configuracin de puertos bcf INTCON, GIE ; Deshabilita las interrupciones globales

bsf STATUS, RP0 ; Banco 1 movlw b'00001001' movwf TRISIO ;configura puerto 1 como salida y puerto 3 como entrada

2. DISEO DE TRANSMISOR Y RECEPTOR

15

bsf clrf

STATUS,RP0 ;selecciona banco 1 ANSEL ;configura puertos como I/O digitales

; Interrupcin por cambio de estado en puerto 3 bsf STATUS,RP0 ;banco 1 movlw b'00001000' movwf IOC ; Activa la interrupcin del puerto 3 (Pulsador SW1 del PicKit 1) bcf STATUS,RP0 ;banco 0 bsf INTCON, GPIE ; Habilita la interrupcin por cambio de estado en un puerto MAIN bsf INTCON, GIE ; Habilita todas las interrupciones globales bcf STATUS,RP0 ;banco 0 clrf GPIO bcf STATUS,RP0 ;banco 0 end Con el programa realizado se puede comprobar el correcto funcionamiento de la interrupcin provocada por un pulsador. El programa en si est bien, pero tiene un pequeo problema. Es el siguiente: cuando es presionado el pulsador, se intuye que se enciende el led D7, pero inmediatamente se apaga. Esto es debido a que el programa va tan rpido que no da tiempo a que se pueda observar el led encendido. Se debe a que una vez que se acaba la rutina de interrupcin vuelve a saltar al programa principal en el cual hay una instruccin que borra todos los puertos de salida, con lo cual apaga el led D7. Una opcin para solucionar este problema es introducir un pequeo delay en la subrutina de interrupcin, de manera que cuando se presione el pulsador, el led se mantenga un segundo encendido. La modificacin introducida es la siguiente: - El siguiente cdigo es la parte de la interrupcin que se dedica a encender el led en la cual se ha introducido una llamada a una subrutina que hace un delay de 1s utilizando el Timer1. bcf clrf bsf bsf call bcf STATUS,RP0 ;banco 0 GPIO ;apaga todos los leds GPIO,GPIO1 ;enciende el led D7 T1CON, TMR1ON ;enciende el Timer1 CONTA ;delay de 1s INTCON, GPIF ;borra el flag que avisa de la interrupcin

- Subrutina que hace el delay:

16

SENSORES INALMBRICOS DE BAJO CONSUMO

CONTA movlw d'15' movwf cont TIMER1 btfss PIR1,TMR1IF ;Esta activo el flag de overflow del Timer1? goto TIMER1 bcf PIR1,TMR1IF ;Borra el flag de overflow decfsz cont,1 goto TIMER1 return

2.1.4. Funcin SLEEP


Una funcin muy importante para este proyecto es la funcin SLEEP del microcontrolador. Con esta funcin, una vez acaba las tareas ordenadas, automticamente se pone en modo de ahorro de energa hasta que algo haga que se despierte. A continuacin se muestran las pruebas realizadas sobre esta funcin: list p=12f675 ; list directive to define processor #include <p12f675.inc> ; processor specific variable definitions ;errorlevel -302 ; suppress message 302 from list file

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_ON & _INTRC_OSC_NOCLKOUT ; En este programa se va a utilizar el puerto GP3 como entrada para detectar ; el cierre del pulsador y el puerto GP1 para activar el led 7 ; Definicin de las diferentes variables cblock 0x20 w_temp status_temp cont t endc

RESET

ORG

0x000

; Vector RESET

2. DISEO DE TRANSMISOR Y RECEPTOR

17

goto

INIT

; Rutina de Interrupcin ; Primero hay que guardar el estado del registro STATUS y de W ORG 0x004 ; Vector Interrupcion ; Deshabilita las interrupciones globales ; save W register ; swap status to be saved into W ; ---- Select Bank 0 ----; save STATUS register ;banco 0

bcf INTCON, GIE movwf w_temp swapf STATUS, W bcf STATUS, RP0 movwf status_temp bcf STATUS,RP0

; Funciones a realizar durante la interrupcin ;--------------------------------------------------------------------------btfsc INTCON,GPIF ; Comprueba si la interrupcin la ha provocado el ; pulsador goto RESET ; si es asi hace un reset. En el reset ya se borra ; el flag bcf PIR1,TMR1IF ; Borra el flag de overflow ;--------------------------------------------------------------------------; Vuelve a cargar el estado del registro STATUS y W swapf status_temp, W movwf STATUS swapf w_temp, F swapf w_temp, W bcf STATUS,RP0 bsf INTCON, GIE retfie ; swap status_temp into W, sets bank to ; original state ; restore STATUS register ; restore W register ; banco 0 ; Rehabilita las interrupciones globales

; Cargar contador ;************************************************************************************** ; El timer1 es un contador de 16 bits por lo tanto puede contar hasta 65536 ; cada instruccin dura 1us y por lo tanto el timer1 puede temporizar 65536us ; Con el preescaler del Timer1 puesto como 1:8, cada 8 ciclos solo contar 1. ; de esta manera puede temporizar como mucho hasta 0.5s ;*************************************************************************************** CONTA clrf cont

18

SENSORES INALMBRICOS DE BAJO CONSUMO

movwf cont TIMER1

; En funcin del valor que se le de a W el contador ; coger un valor u otro.

btfss PIR1,TMR1IF ;Esta activo el flag de overflow del Timer1? goto TIMER1 ;Si esta activo el flag no ejecuta esta linea bcf PIR1,TMR1IF ;Borra el flag de overflow decfsz cont,1 goto TIMER1 bcf T1CON, TMR1ON ; apaga el Timer1 return

; Inicializacin de los diferentes registros INIT ; Configuracin de puertos bcf INTCON, GIE ; Deshabilita las interrupciones globales bcf INTCON, PEIE ; Deshabilita Interrupcin de Perifricos bsf STATUS, RP0 ; Banco 1 movlw b'00001000' movwf TRISIO ;configura puerto 3 como entrada y los dems salidas bsf clrf STATUS,RP0 ANSEL ;selecciona banco 1 ;configura puertos como I/O digitales

; Configuracin interrupcin puertos bsf bsf INTCON, GPIE IOC, IOC3 ; Activa interrupcin por cambio de estado en ; puertos ; Activa interrupcin por cambio de estado ; puerto 3

; Configuracin del Timer1 bcf STATUS, RP0 movlw b'00110100' movwf T1CON bsf bsf STATUS, RP0 PIE1,TMR1IE ;banco 0 ; Configura el registro de control del Timer1 ; preescaler a 1:8 ; Banco 1 ; Habilita Interrupcin por overflow de Timer1

; Configuracin del WDT bsf STATUS,RP0 movlw b'11001111' movwf OPTION_REG ;selecciona banco 1

2. DISEO DE TRANSMISOR Y RECEPTOR

19

MAIN bsf bsf INTCON, GIE INTCON, PEIE ; Habilita todas las interr. globales ;Habilita Interrupcin de Perifericos

bcf STATUS, RP0 ;banco 0 clrf GPIO bsf GPIO,1 bsf T1CON, TMR1ON ;enciende el Timer1 movlw d'2' ; Delay de 1s call CONTA clrf GPIO ; Con el preescaler a 1:128 se puede temporizar hasta 2,3s ; Me interesa temporizar 1 min. como mnimo. Si se hace 2,3*26 salen 59,8s movlw d'26' ;Tiempo que esta en modo SLEEP (2.3s * 26 = 59.9s) movwf t SLEP1 clrwdt ;clear WDT sleep decfsz t,f goto SLEP1 nop nop clrwdt ;clear WDT bcf clrf STATUS,RP0 GPIO ;banco 0

bsf GPIO,2 movlw d'2' call CONTA clrf GPIO bcf STATUS,RP0 end

;banco 0

El objetivo del programa anterior era conseguir que el microcontrolador estuviese 1 minuto en el modo SLEEP, se despertara, ejecutase el programa y volviese a dormir. Pero se ha comprobado que este PIC no lo permite. Si se utiliza el Watchdog como temporizador se puede conseguir que permanezca 2.3s en modo Sleep y si se utiliza cualquiera de los dos timers de que dispone el PIC se consigue mucho menos tiempo. Por eso en este programa se ha hecho una pequea trampa y se est 1 min. sin ejecutar el programa, pero no est todo el rato en modo Sleep.

20

SENSORES INALMBRICOS DE BAJO CONSUMO

2.2. Diseo del transmisor con rfPIC12F675


2.2.1. Hardware
Todo proyecto de ms o menos envergadura es necesario dividirlo en diferentes fases. En este proyecto, por ejemplo, las diferentes fases seran: desarrollo del software y pruebas con emulador, desarrollo del hardware y pruebas con software y, por ltimo, desarrollo del interface grfico. Pues bien, este trabajo solo supone la primera fase del proyecto, es decir, desarrollo del software y pruebas con emulador. Es por ese motivo que no se ha hecho un gran estudio del hardware utilizado y se deja para posteriores estudios. Los componentes ms relevantes y que hace falta destacar son los que hacen referencia al transmisor. A continuacin se hace una breve descripcin. El rfPIC12F675 dispone de un oscilador a cristal tipo Colpitts para generar la frecuencia de referencia que se entrega al PLL del emisor. Este oscilador es totalmente independiente del que tiene el microcontrolador. A parte de este oscilador, es necesario conectar un segundo cristal exterior al puerto XTAL y, mediante la frmula (2.1), se obtiene la frecuencia de transmisin. f transmisin = f RFXTAL 32 (2.1)

Para un ajuste ms fino de la frecuencia de salida (solo en modo ASK) se puede poner un condensador en serie con el cristal conectado a XTAL. En la siguiente figura se muestra la conexin y posibles valores de C1 con sus respectivas frecuencias finales.

2. DISEO DE TRANSMISOR Y RECEPTOR

21

Fig. 2.3 Posibles valores de C1 La potencia de salida del transmisor es otro de los puntos que hay que tener en cuenta a la hora de estudiar el transmisor. Esta se puede ajustar desde 9dBm hasta -70dBm. Para ello solo es necesario jugar con distintos valores de resistencia en el puerto PS del microcontrolador tal y como se muestra en la siguiente figura:

Fig. 2.4 Potencia de salida del transmisor El transmisor del kit Pickit1 viene configurado para dar la potencia mxima de salida que se permite, es decir, 9dBm ya que tiene un circuito abierto en lugar de resistencia. Para ms detalles del hardware en el anexo 2 fig. 2.2 se muestra el esquema del mdulo emisor del PicKit1.

22

SENSORES INALMBRICOS DE BAJO CONSUMO

2.2.2. Software
2.2.2.1. Configuracin registros A partir de este punto se va a empezar a hacer el diseo del software que controlar todo el sistema emisor. En la primera parte de este apartado se explican con detalle cada uno de los registros que intervienen en la configuracin del programa emisor y a continuacin se expone un diagrama de bloques de lo que ser el programa final. El programa completo se muestra en el anexo 3.1. La configuracin de los diferentes registros del microcontrolador se realiza solo empezar el programa, es decir, antes del programa principal en una subrutina llamada INIT. Aqu se realiza tanto la configuracin de los puertos como la de los mdulos del micro (A/D, comparador, etc.). Lo primero que se realiza es la configuracin de los diferentes puertos del PIC. Hay diversos registros que afectan a dicha configuracin, pero los bsicos son: GPIO y TRISIO. Registro GPIO: Mediante este registro se puede cambiar el estado de un puerto o leer su estado en caso de que sea un puerto de entrada.

Bit 7-6: No utilizado Bit 5-0: Estado del puerto. Si vale 1 el puerto est en estado alto. Si vale 0, estado bajo.

Registro TRISIO:

Bit 7-6: No utilizado. Bit 5-0: Si vale 1 el puerto se configura como puerto de entrada. Si vale 0 se configura como salida.

Despus de la configuracin de los puertos, en el caso del programa emisor, se pasa a configurar una interrupcin por cambio de estado en un puerto. Es decir, que si se detecta un cambio en el estado de un puerto se genera una interrupcin haciendo saltar del programa principal a la rutina de interrupcin.

2. DISEO DE TRANSMISOR Y RECEPTOR

23

En este programa se usa esta utilidad para que al pulsar el pulsador GP3 se haga un reset del sistema. Para poder configurarlo los registros que se han de modificar son: INTCON, IOC. Registro INTCON:

Bit 7: Activacin de interrupciones globales Bit 6: Activacin de interrupcin de perifricos Bit 5: Activacin de interrupcin por overflow en Timer0 Bit 4: Activacin de interrupcin externa en GP2/INT Bit 3: Activacin de interrupcin por cambio de estado en puerto Bit 2: Flag de interrupcin por overflow de Timer0 Bit 1: Flag de interrupcin externa en GP2/INT Bit 0: Flag de interrupcin por cambio de estado en puerto

Los bits que se han de activar para que se genere una interrupcin por cambio de estado en un puerto son el 3 y el 7. Por regla general durante el proceso de inicializacin de registros se han de desconectar todo tipo de interrupciones, por eso el bit 7 solo se activar cuando empiece el programa principal. Registro IOC:

Bit 7-6: No utilizado. Bit 5-0: Activacin de interrupcin por cambio de estado en puerto. Si el bit vale 1 se permite interrupcin para ese puerto.

La siguiente parte del emisor que se configura en la subrutina INIT es el timer interno TIMER0. Los registros asociados al Timer0 son: TMR0, OPTION_REG, INTCON y TRISIO explicados anteriormente. Registro TMR0: Este es un registro de 8 bits y es donde se va actualizando el estado del contador TMR0. A cada ciclo del procesador (4 oscilaciones de reloj) el contador TMR0 se incrementa en una unidad, excepto en el caso de que tenga preescaler.

24

SENSORES INALMBRICOS DE BAJO CONSUMO

Registro OPTION_REG:

De este registro los bits ms importantes son: Bit 3: Asignacin del preescaler. Si vale 1 se asigna al Watchdog. Si vale 0 se asigna al TMR0 Bit 2-0: Rate del preescaler

Por ltimo se realiza la configuracin del mdulo A/D para realizar la conversin analgico/digital de la seal procedente del sensor. Sus registros asociados son: ADCON0 y ANSEL. Registro ADCON0:

Bit 7: Si vale 1 justifica el resultado a la derecha o a la izquierda en caso de que valga 0. Bit 6: Indica Vref. Si es 1 coge una Vref externa. Si vale 0 la Vref es VDD. Bit 5-4: No usados Bit 3-2: Selecciona una de las 4 entradas al A/D Bit 1: Si vale 1 inicia la conversin y mientras valga 1 indica que la conversin no ha finalizado. Si vale 0 la conversin ha acabado. Bit 0: Si se activa este bit, se activa el mdulo A/D.

Registro ANSEL:

2. DISEO DE TRANSMISOR Y RECEPTOR

25

Bit 7: No utilizado Bit 6-4: Seleccin del reloj del conversor A/D 000= Fosc/2 001= Fosc/8 010= Fosc/32 x11= Utiliza el clock del oscilador interno 100= Fosc/4 101= Fosc/16 110= Fosc/64 Bit 3-0: Seleccin del canal analgico. Si el bit vale 1, se asigna ese canal como entrada analgica. Si por el contrario vale 0, se configura el canal como I/O digital.

El resultado de la conversin se guarda en dos registros: ADRESH y ADRESL. En funcin del bit 7 (Justificacin del resultado) el LSB quedar en una posicin o en otra a lo largo del registro ADRESL. Esto se muestra en la fig. 2.5

Fig. 2.5 Formato del resultado del A/D

26

SENSORES INALMBRICOS DE BAJO CONSUMO

2.2.2.2 Diagrama de estados

MAIN

Lectura Analgica

FSR = Data0 3 BitCont = 8

Activar TX

Rotar INDF Data0=ID_TX Data1=ADRESL Data2=ADRESH Data3=0x55

SI

NO INDF = 1?

Sync =16 TALTO = 1 TX = 1 TMR0=0000 TBAJO = 2 TBAJO = 1 TALTO = 2

Temporizar 512us

TX = 1 TMR0=0000

TX = 0 TMR0=0000 Temporizar TALTO

Temporizar 512us

TX = 0 TMR0=0000

Dec Sync

Sync = 0? NO SI TMR0=0000

Temporizar TBAJO

Dec BitCont

Temporizar 2.56ms

NO BitCont = 0? SI 2

2. DISEO DE TRANSMISOR Y RECEPTOR

27

Incrementar FSR

(Data3 XOR FSR) AND 0x1F

Resultado = 0? SI Temporizar 15.36ms

NO

Desactivar TX

Sleep

MAIN

Fig. 2.6 Diagrama de estados emisor

2.3. Diseo del receptor


2.3.1. Hardware
El receptor que se ha utilizado para la recepcin de los datos es el que proporciona el kit Pickit1. Este receptor se basa en el chip rfRXD0420 de la casa Microchip. Las principales caractersticas de este receptor son las siguientes: Permite seleccionar la frecuencia intermedia entre los 455kHz y los 21.4MHz mediante un sencillo filtro formado por un cristal de cuarzo y un pequeo condensador Es capaz de demodular seal en ASK, FSK y FM La demodulacin en ASK y FSK la realiza mediante un detector de cuadratura (detector de coincidencia de fase) Para ASK y FSK el decisor se hace mediante un amplificador operacional configurado como comparador. Tambin es posible configurarlo como filtro para demodular FM

28

SENSORES INALMBRICOS DE BAJO CONSUMO

En el anexo 2.6 se puede observar el diagrama de bloques del receptor rfRXD0420 Para seleccionar la frecuencia de recepcin se pone un cristal de cuarzo externo. En la figura 2.7 se muestran los diferentes valores de cristal y las diferentes frecuencias de recepcin resultantes. El valor del condensador C ha de ser entre 15pF y 20pF

Frecuencia de recepcin 315 MHz 433.92 MHz

Frecuencia de cristal X1 20.35625 MHz 26.45125 MHz

Fig. 2.7 Seleccin de frecuencia de recepcin El proceso de demodulacin que sigue este chip es el siguiente: Se utiliza como detector ASK un amplificador limitador de Frecuencia intermedia. La seal que sale del detector es filtrada y comparada con una seal de referencia para determinar si se ha recibido un uno o un cero lgico. El diseo de este filtro depender de donde se quiera poner el umbral de decisin. Sabiendo que la constante de tiempo = RC y que R = 36 K , que es la impedancia de salida del detector, y que C es el C1 del circuito receptor, se puede fijar el umbral de decisin. Hay que tener cuidado a la hora de fijar la constante de tiempo, ya que si se pone demasiado larga puede provocar interferencia nter simblica con la consecuente prdida de bits. Para ms detalles sobre este receptor ver data-sheet. En el se explica exactamente como seleccionar cada uno de los componentes externos. En el anexo 2.7 se muestra el esquema que utiliza el receptor que se proporciona con el kit de pruebas Pickit1. Este receptor ya viene configurado como un demodulador ASK.

2. DISEO DE TRANSMISOR Y RECEPTOR

29

2.3.2. Software
2.3.2.1. Configuracin registros Como se ha explicado con anterioridad, para el receptor, se ha utilizado el PIC16F676. La nica diferencia con el PIC12F675 est en el nmero de puertos. El PIC12F675 solo tiene 6 puertos, en cambio el PIC16F676 dispone de 12 puertos configurables igualmente como I/O. Estos 12 puertos estn divididos en dos grandes puertos de 6 bits cada uno, PORTA y PORTC. As pues, en este nuevo PIC el nico registro de configuracin que cambia con respecto al otro ser el que hace referencia a los puertos. La configuracin de los puertos est dividida en dos registros, uno para cada puerto, A y C. Registro PORTA: Sirve para cambiar o visualizar el estado de un puerto dentro del puertoA.

Bit 7-6: No utilizado Bit 5-0: Estado del puerto. 1 Activo, 0 Inactivo

Registro TRISA: Sirve para configurar la direccin de los puertos A

Bit 7-6: No utilizado Bit 5-0: Si es 1 el puerto es configurado como entrada y si es 0 se configura como salida

Registro PORTC: Sirve para cambiar o visualizar el estado de un puerto dentro del puertoB.

Bit 7-6: No utilizado Bit 5-0: Estado del puerto. 1 Activo, 0 Inactivo Registro TRISC: Sirve para configurar la direccin de los puertos C

30

SENSORES INALMBRICOS DE BAJO CONSUMO

Bit 7-6: No utilizado Bit 5-0: Si es 1 el puerto es configurado como entrada y si es 0 se configura como salida

2.3.2.2. Diagrama de estados El programa principal del receptor consta de 10 posibles estados. Cada estado corresponde a un estado de la comunicacin entre emisor y receptor. Los posibles estados son: INICI: Sirve para detectar entrada de datos INICI1: Detecta entrada de trama de sincronismo inicial SILEN: Detecta pausa antes de recepcin de datos SILEN1: Mira que la pausa no sea demasiado larga y detecta la entrada de la trama de datos UNO1: Detecta el estado alto de un bit CERO0: Detecta el estado bajo de un bit SALVAR: Controla los bits recibidos y los guarda en su registro correspondiente ESPERA: Comprueba que se finaliza la transmisin y monitoriza el silencio de antes de la siguiente transmisin. OK: Comprueba la identidad del emisor y si es vlida guarda los datos en memoria. IL_LEDS: Muestra los datos recibidos en los leds del Pickit1. La funcin de mostrar los datos en los leds se ha extrado directamente de una programa de muestra para poder visualizar el resultado de la transmisin ya que no es objeto de este trabajo la realizacin de dicho programa.

2. DISEO DE TRANSMISOR Y RECEPTOR

31

RESET MAIN Actualizar timer leds Actualizar estado leds Actualizar clock

Comprobar variable control

INICI

INICI1

SILEN

SILEN1

UNO1

CERO0

SALVAR

ESPERA

OK

IL_LEDS

32

SENSORES INALMBRICOS DE BAJO CONSUMO

2. DISEO DE TRANSMISOR Y RECEPTOR

33

34

SENSORES INALMBRICOS DE BAJO CONSUMO

MAIN

OK IL_LEDS Leer posicin 0x00 EEPROM LEDREG = DATA1

RESET EEPROM y DATA0 son iguales? SI Guardar DATA1 en posicin 0x01 EEPROM Guardar DATA2 en posicin 0x02 EEPROM Incrementar Control NO RESET

Fig. 2.8 Diagrama de estados receptor

3. FUTURAS LNEAS DE INVESTIGACIN

35

3. FUTURAS LNEAS DE INVESTIGACIN


Despus de estudiar a fondo las caractersticas del sistema parece claro cual ha de ser la continuacin de este proyecto. El principal tema que hay que investigar es la comunicacin microcontrolador-PC. Hay que conseguir acceder a la memoria del microcontrolador desde el ordenador va USB para leer los datos de temperatura recibidos. Una vez logrado habra que visualizar por pantalla la temperatura recibida. Esto se podra hacer con un entorno de programacin visual tipo Visual C++ o Visual Basic. Los datos recibidos se podran ir guardando en disco y finalmente hacer un grfico de temperaturas o historial, mximas, mnimas, etc. Una vez conseguidos estos objetivos se podra invertir un poco ms de tiempo en mejorar algunos aspectos del sistema emisor-receptor. Por ejemplo: Deteccin de batera baja en emisor. El rfPIC12F675 incorpora un detector de cada en el nivel de alimentacin. Una vez detecta que ha habido una bajada de tensin, activa un flag para indicarlo. Si junto con los datos de temperatura se enviase este flag, se podra monitorizar el estado de la pila del emisor. Implementar el sensor de temperatura y comprobar de su funcionamiento. Implementar el sistema en un circuito impreso. Haciendo el diseo cad, etc. Posibilidad de crear una estacin meteorolgica completa aadiendo diferentes sensores (humedad, presin, velocidad del viento, etc.) cada uno con un subprograma e identificador distinto. Desarrollar funciones de ahorro de energa. En las pruebas iniciales del microcontrolador se ha investigado alguna funcin como SLEEP, pero habra que investigar como utilizarlo para que el microcontrolador pueda permanecer en standby durante 1 min. por lo menos (entre emisin y emisin). Posibilidad de alimentar el emisor con una placa solar.

36

SENSORES INALMBRICOS DE BAJO CONSUMO

4. CONCLUSIONES Y BIBLIOGRAFA
4.1. Conclusiones
En este trabajo se ha comprobado una de las posibles aplicaciones de los microcontroladores, en concreto una aplicacin inalmbrica. Al utilizar un microcontrolador que lleva incorporado el circuito de RF se ahorra mucho espacio. A parte de este ahorro de espacio, tambin se ahorra energa. Gracias al poco consumo y a funciones especiales de que dispone, este microcontrolador es idneo para aplicaciones inalmbricas en que el consumo sea vital. Como se ha comentado ya, habra que investigar ms sobre las funciones de ahorro de energa del microcontrolador, ya que aumentara considerablemente la autonoma del emisor. Como conclusin final, decir que este sistema, una vez finalizado, tiene muchas posibilidades en diferentes campos: domtica, automocin, estaciones meteorolgicas, etc. ya que permite tener un sensor separado del equipo principal y, adems sin tener que preocuparse demasiado de su consumo y por tanto de cambiarle la pila.

4. CONCLUSIONES Y BIBLIOGRAFA

37

4.2. Bibliografa
[1] Tutoriales: Microchip, CDROOM PICkit 1 Flash Starter Kit v2.1, 2004 [2] Microchip, Low Frequency Magnetic Transmitter Design, 2002 [3] Microchip, rfPIC12F675K/675F/675H Data Sheet, 2003 [4] Microchip, PIC16F630/676 Data Sheet, 2003 [5] Microchip, rfRXD0420/0920 Data Sheet, 2003 [6] Interfaz USB, elektor, 245, 30 - 35

38

SENSORES INALMBRICOS DE BAJO CONSUMO

ANEXOS

SENSORES INALMBRICOS DE BAJO CONSUMO TITULACI: Sistemes de Telecomunicaci AUTOR: Marc Ralita lvarez DIRECTOR: Francesc Snchez Robert DATA: 25 de febrer de 2005

ANEXO 1

39

ANEXO 1 Sensores
Un sensor es un dispositivo transductor, es decir, es capaz de convertir una magnitud fsica en una magnitud elctrica en funcin de la primera magnitud. El mejor ejemplo de transductor sera un micrfono, que transforma las ondas sonoras generadas por las cuerdas vocales en impulsos elctricos. Otro ejemplo, y este ser el estudiado en este apartado, sera un sensor de temperatura, que transforma la magnitud fsica temperatura en un valor de tensin en funcin de la temperatura a la que est sometido el dispositivo. El sensor propuesto, el TC1047 de la casa Microchip, es un sensor de muy reducidas dimensiones, 3mm de largo por 2mm de ancho. Gracias a su reducido tamao, es ideal para diseos en que el poco espacio es una cosa a tener muy en cuenta. As, en el emisor del sistema que se est diseando, se podr incorporar en el mismo circuito impreso sin suponer una molestia. Este sensor puede ir alimentado desde 2.7v hasta 4.4v y tiene un consumo de entre 35A y 60A. Dado que se intenta disear un sistema de bajo consumo esta caracterstica es muy importante ya que permitir reducir el consumo total del sistema, incluso puede permitir la utilizacin de cualquier fuente de energa de no ms de 3v. Las caractersticas bsicas de este sensor son:

Tabla 1.1 Especificaciones TC1047

40

SENSORES INALMBRICOS DE BAJO CONSUMO

Fig. 1.1 Pins del sensor de temperatura El siguiente grfico muestra la variacin de tensin en la salida en funcin de la temperatura a la que se encuentre el dispositivo.

Fig. 1.2 Vout en funcin de la temperatura

ANEXO 1

41

En este grfico se puede ver la precisin real del sensor. En la escala de la izquierda se muestra la temperatura medida realmente. En la escala inferior se muestra la temperatura ambiente.

Fig. 1.3 Precisin del sensor de temperatura En el siguiente grfico se observa el consumo de corriente en funcin de la temperatura

Fig. 1.4 Consumo en funcin de la temperatura

42

SENSORES INALMBRICOS DE BAJO CONSUMO

ANEXO 2
2.1. Pins del rfPIC12F675

Fig. 2.1 Pins del rfPIC12F675

ANEXO 2

43

2.2. Esquema Transmisor

Fig. 2.2 Esquema emisor Pickit1

44

SENSORES INALMBRICOS DE BAJO CONSUMO

2.3. Memoria del rfPIC12F675


Este PIC dispone de 3 tipos de memoria: Flash para guardar el programa realizado en ensamblador. EEPROM para guardar toda la informacin referente a la configuracin de los diferentes registros RAM para guardar registros de propsito general mapeado a continuacin de la memoria EEPROM.

La memoria de programa esta mapeada tal y como muestra la Fig. 2.3 aunque solo es accesible el espacio comprendido entre las direcciones de memoria 0000h y 03FFh. El resto esta reservado para la pila y los vectores de reset y de interrupcin. La memoria EEPROM o memoria de datos est particionada en dos bancos de memoria distintos. En cada uno hay una parte del total de los registros de propsito general. En la Fig. 2.4 se observan los diferentes registros con que cuenta el rfPIC12F675 para su configuracin de puertos, interrupciones, comparador, conversor A/D, etc. *

Fig. 2.3 Mapa de memoria de programa

NOTA: Para ms informacin acerca de la configuracin de cada registro ver Data Sheet de rfPIC12F675F incluido en esta memoria o ver bibliografa.

ANEXO 2

45

Fig. 2.4 Mapa de memoria de datos

46

SENSORES INALMBRICOS DE BAJO CONSUMO

2.4. Juego de instrucciones del rfPIC12F675


Cada microcontrolador dispone de sus propias instrucciones en ensamblador para poder ser programado. El rfPIC12F675 solo dispone de 35 instrucciones, con lo cual es muy sencillo aprender su funcionamiento. Son las mostradas en la Fig. 2.5

Fig. 2.5 Instrucciones del rfPIC12F675

ANEXO 2

47

2.5. Diagrama de bloques receptor

Fig. 2.6 Diagrama de bloques receptor

48

SENSORES INALMBRICOS DE BAJO CONSUMO

2.6. Esquema Receptor

Fig. 2.7 Esquema receptor Pickit1

ANEXO 3

49

ANEXO 3 Programa principal


3.1. Programa emisor
; En este programa se desarrolla la parte de RF del PIC12F675 list p=12f675 #include <p12f675.inc> errorlevel -302 __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT ; Definicin de las diferentes variables cblock 0x20 w_temp status_temp cont DATA0 DATA1 DATA2 DATA3 DATA4 TEMP SYNC BitCont TALTO TBAJO endc #define TX GPIO, 2 #define RFENA GPIO, 5 ; Salida RF (Datos a transmitir) 1/0 ; RF Enable

50

SENSORES INALMBRICOS DE BAJO CONSUMO

RESET nop goto

ORG INIT

0x000

; Vector RESET

; Rutina de Interrupcin ; Primero hay que guardar el estado del registro STATUS y de W ORG 0x004 ; Vector Interrupcion ; Deshabilita las interrupciones globales ; Guarda el registro W ; Banco 0 ; Guarda el registro STATUS

bcf INTCON, GIE movwf w_temp swapf STATUS, W bcf STATUS, RP0 movwf status_temp

; Funciones a realizar durante la interrupcin ;--------------------------------------------------------------------------bcf INTCON, GPIF goto RESET ; borra el flag que avisa de la interrupcin ; Cuando se genera una interrupcin (Pulsador ;GP3) se hace un reset

;--------------------------------------------------------------------------; Vuelve a cargar el estado del registro STATUS y W swapf status_temp, W movwf STATUS swapf w_temp, F swapf w_temp, W bcf STATUS,RP0 bsf INTCON, GIE retfie ; Cargar contador ;**************************************************************************** ; El timer0 es un contador de 8 bits por lo tanto puede contar hasta 256 ; cada instruccin dura 1us y por lo tanto el timer0 puede temporizar 256us ; Con el preescaler del Timer1 puesto como 1:2, cada 2 ciclos solo contar 1. ; de esta manera puede temporizar como mucho hasta 512us ;**************************************************************************** CONTA bcf INTCON,2 ; borra el flag de overflow por si llega activo clrf cont ; En funcin del valor que se le de a W el contador movwf cont ; coger un valor u otro. ; Restaura el registro STATUS ; Restaura el registro W ; banco 0 ; Rehabilita las interrupciones globales

ANEXO 3

51

TIMER0 btfss INTCON, 2 ;Esta activo el flag de overflow del Timer0? goto TIMER0 ;Si esta activo el flag no ejecuta esta linea bcf INTCON, 2 ;Borra el flag de overflow decfsz cont,1 goto TIMER0 return ;************************************************************************* ;* Aqu se realiza la conversin analgico-digital de la tensin que hay * ;* en el potenciometro GP0. * ;* El resultado de 10 bits se guarda en los registros ADRESH y ADRESL ;************************************************************************* LECTURA_ANALOG bsf ADCON0, ADON ; Turn on ADC module

; Temporizacin para dar tiempo al condensador del conversor a que se cargue movlw D'6' movwf TEMP decfsz TEMP, F goto $-1 bcf bsf bsf STATUS, RP0 ADCON0, ADON ADCON0, GO ; At 4 MHz, a 22us delay ; (22us = 2us + 6 * 3us + 1us)

;banco 0 ;enciende el A/D ;Empieza la conversin ;Ha acabado la conversin?

btfsc ADCON0, GO goto $-1 bcf return

ADCON0, ADON ;Apaga el A/D

; Inicializacin de los diferentes registros INIT ; Calibracin del oscilador local bsf STATUS, RP0 ; Banco 1

52

SENSORES INALMBRICOS DE BAJO CONSUMO

call 0x3FF movwf OSCCAL bcf STATUS, RP0

; Centra en su frecuencia central ; Banco 0

; Configuracin de puertos bcf INTCON, GIE ; Deshabilita las interrupciones globales bcf INTCON, PEIE ; Deshabilita Interrupcin de Perifericos bsf STATUS, RP0 movlw b'00011011' movwf TRISIO ; Banco 1 ;configura puerto 0,1,3 y 4 como entrada y 2 y 5 ;como salida

; Configuracin interrupcin puertos bsf INTCON, GPIE ; Activa interrupcin por cambio de estado en ; puertos ; Activa interrupcin por cambio de estado ; puerto 3

movlw b'00001000' movwf IOC ; Configuracin del Timer0 bsf STATUS, RP0 movlw b'11000000' movwf OPTION_REG bcf INTCON, 2

;banco 1 ; Configura el registro para usar el Timer0 ; preescaler a 1:2 (Tiempo mximo 512us) ; Borra el flag de overflow del Timer0

; Configuracin del mdulo A/D ;********************************************************************************* ; Seleccionando la frecuencia del reloj del conversor como Fosc/8 estamos haciendo ; que el A/D tarde 2 ciclos en realizar la conversin. ;********************************************************************************* bcf STATUS, RP0 movlw b'10000000' movwf ADCON0 bsf STATUS,RP0 movlw b'00010011' movwf ANSEL bcf STATUS, RP0 ; banco 0 ; Configura el registro del A/D para que el ; resultado quede alineado a la derecha y ; selecciona canal AN0 ; selecciona banco 1 ; selecciona Fosc/8 y puertos 3,2 como I/O ; digitales ; Configura puertos 0,1 como entrada ; analogica (pot) ; banco 0

ANEXO 3

53

MAIN bsf bsf call INTCON, GIE INTCON, PEIE ; Habilita todas las interr. globales ; Habilita Interrupcin de Perifericos

LECTURA_ANALOG

; A partir de aqu se rellena el buffer de transmisin con todo lo que se enviar ; Primero se enva el ID del emisor. De esta manera puede haber ms de un ; emisor. ; A continuacin se envan los datos BUFFER_TX bsf RFENA movlw 0x73 movwf DATA0 bsf STATUS, RP0 movfw ADRESL bcf STATUS, RP0 movwf DATA1 movfw ADRESH movwf DATA2 movlw movwf 0x55 DATA3 ; Activa el Transmisor ; N de identificacin del emisor ; Banco 1 ; Banco 0 ; Guarda los 8 bits de menor peso de la ; conversin A/D ; Guarda los 8 bits(2 en realidad) de ; mayor peso ; Flags de comprobacin de final de ; Datos (Lo utiliza el RX)

; A partir de aqu ya se empieza a TX ;********************** ;* Sincronismo * ;********************** movlw d'16' ; N de pulsos de sincronismo movwf SYNC Sincro bsf TX movlw d'1' clrf TMR0 call bcf CONTA TX ; DATA ON ; Pone el Timer0 a 0. A partir de aqu el Timer0 tarda ; dos ciclos en empezar a contar ; Temporizacin de 512us ; DATA OFF

54

SENSORES INALMBRICOS DE BAJO CONSUMO

movlw d'1' clrf TMR0 call CONTA decfsz SYNC goto Sincro

; Una vez sincronizado hace una pausa de 2.56ms para que el receptor sepa ; que a continuacin bienen los datos Pausa movlw d'5' clrf TMR0 call CONTA movlw DATA0 movwf FSR Byte movlw d'8' movwf BitCont Bit rrf rrf BC CERO movlw d'2' movwf TALTO movlw d'1' movwf TBAJO goto TXbit UNO movlw d'1' movwf TALTO movlw d'2' movwf TBAJO TXbit bsf TX movf TALTO,w clrf TMR0 call CONTA bcf TX movf TBAJO,w clrf TMR0 ;DATA ON ;TX durante TALTO ;DATA OFF INDF,w INDF,f UNO ;Recorre los 8 bits de un Byte ;pausa de 2.56ms ;Mueve el puntero a los primeros datos a enviar ;Direccionamiento indirecto

ANEXO 3

55

call

CONTA

;No TX durante TBAJO ; Salta para TX el siguiente bit de los 8 ; que tiene cada variable

decfsz BitCont,F goto Bit incf FSR,F movlw DATA4 xorwf FSR,W andlw 0x1F BNZ Byte

;Mira si es el ltimo byte de datos ; 0x55 -> DATA3?

; Todos los datos ya estan enviados. Ahora se deja un tiempo de guarda ; para que el receptor sepa que ya se han acabado los datos. movlw d'30' clrf TMR0 call CONTA bcf goto MAIN ; Configuracin del reloj interno del microprocesador org 0x3ff retlw 0x40 end RFENA

;Tiempo de guarda de 15.36ms ; Apaga el Transmisor

3.2 Programa receptor


list p=16f676 #include <p16f676.inc> errorlevel -302 ; suprime mensajes de compilacin

__CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_OFF & _PWRTE_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT

56

SENSORES INALMBRICOS DE BAJO CONSUMO

cblock 0x20 TEMP DATA0 DATA1 DATA2 INICIO TBAJO TALTO TOTAL_BAJ TOTAL_ALT CONTROL conta FLAGS ; 1er byte de los datos recibidos ; 2o byte de los datos recibidos ; 3er byte de los datos recibidos ; Variable para ir incrementando el contador de tiempo ; Temporiza el tiempo que esta en estado bajo ; Temporiza el tiempo que esta en estado alto ; Guarda el tiempo total que ha estado en estado bajo ; Guarda el tiempo total que ha estado en estado alto ; Controla en que estado del programa est ; Contador de bits ; flags

; Variables de control de visualizacin de los datos recibidos ; Extraido tal cual de un programa de muestra ; Los datos son mostrados en una matriz de leds de los cuales nunca habr ; ms de uno encendido. ; La visualizacin se realiza por multiplexacin de dicha matriz. SX1TMR SX2TMR LEDREG LEDREGBUF LEDSTATE endc ; LED timer (low order) ; LED timer (high order) ; LED Array Register ; LED Array Register Buffer ; LED Array State Counter

#define RX PORTC, 1

; Datos recibidos por el puerto RC1 procedentes ;del demodulador ASK rfRXD0420

; Definicin de los diferentes estados del programa ; El programa consta de diferentes estados. En funcin de los datos recibidos ; pasar o no al siguiente estado. #define #define #define #define INICIAR 0x00 INICIAR1 0x01 PAUSA 0x02 PAUSA1 0x03

ANEXO 3

57

#define #define #define #define #define #define ; Flags

UNO CERO 0x05 GUARDAR TGUARDA VALIDAR MOSTRAR

0x04 0x06 0x07 0x08 0x09

#define FLAG1 FLAGS, 0 #define FLAG2 FLAGS, 1

; Flag utilizado en la rutina de temporizacin ; Flag utilizado en la rutina de finalizacin de ;TX

; Definiciones para las subrutinas de activacin de los leds #define LED0 #define LED1 #define LED2 #define LED3 #define LED4 #define LED5 #define LED6 #define LED7 LEDREG, 0 LEDREG, 1 LEDREG, 2 LEDREG, 3 LEDREG, 4 LEDREG, 5 LEDREG, 6 LEDREG, 7 ; S0 LED ; S1 LED ; S2 LED

; GPIO Pins = xx543210 #define LED0TRIS b'00001111' #define LED1TRIS b'00001111' #define LED2TRIS b'00101011' #define LED3TRIS b'00101011' #define LED4TRIS b'00011011' #define LED5TRIS b'00011011' #define LED6TRIS b'00111001' #define LED7TRIS b'00111001' #define LEDOFFTRIS b'00111111' ; GPIO Pins = xx543210 #define LED0ON b'00010000' #define LED1ON b'00100000' #define LED2ON b'00010000' #define LED3ON b'00000100' #define LED4ON b'00100000' #define LED5ON b'00000100' #define LED6ON b'00000100' #define LED7ON b'00000010'

58

SENSORES INALMBRICOS DE BAJO CONSUMO

ORG nop goto

0x000 RESET

; Vector RESET

DATA_EEPROM_READ bsf STATUS, RP0 movwf EEADR bsf EECON1, RD movf EEDATA, W bcf STATUS, RP0 return DATA_EEPROM_WRITE bsf bsf STATUS, RP0 EECON1, WREN ; Banco 1 ; Activa el permiso de escritura ; Configuracin del registro de control de la ; EEPROM ; Inicia la escritura ; Comprueba si la escritura ha finalizado. Si ;esta a 0 ha finalizado. ; Desactiva el permiso de escritura ; Banco 0 ; Banco 1 ; Mueve W a EEADR. En W esta la direccin de ;memoria a leer ; inicia la lectura ; Mueve el dato leido a W ; Banco 0

movlw 0x55 movwf EECON2 movlw 0xAA movwf EECON2 bsf EECON1, WR btfsc EECON1, WR goto bcf bcf return INI ; Calibracin del oscilador local bsf STATUS, RP0 $-1 EECON1, WREN STATUS, RP0

; Banco 1

ANEXO 3

59

call 0x3FF movwf OSCCAL bcf STATUS, RP0

; Centra en su frecuencia central ; Banco 0

; Configuracin de puertos A y C bsf STATUS, RP0 ; Banco 1 ; Configura todos los puertos A como entradas ; Configura todos los puertos C como entradas ; Configura todos los puertos como I/O digitales ; Banco 0

movlw b'00111111' movwf TRISA movlw movwf movlw movwf bcf b'00111111' TRISC b'00000000' ANSEL

STATUS, RP0

; Configuracin del Timer0 bsf STATUS, RP0 ; Banco 1 ; Preescaler a 1:4 ; Banco 0

movlw b'11000001' movwf OPTION_REG bcf STATUS, RP0

retlw 0 ; La subrutina TIMER sirve para controlar el tiempo que los leds estn ; encendidos TIMER btfss FLAG1 goto TIMER1 movlw B'01111111' addwf TMR0, W btfss STATUS, C retlw 0 bcf FLAG1 incfsz SX1TMR, F retlw 0 incf SX2TMR, F

60

SENSORES INALMBRICOS DE BAJO CONSUMO

retlw 0 TIMER1 movlw B'01111111' addwf TMR0, W btfsc STATUS, C retlw 0 bsf FLAG1 retlw 0 ; Control de temporizadores TBAJO - TALTO ; TBAJO temporiza hasta 1,024ms (2^8us*4) ; TALTO temporiza hasta 0,262s (2^8*1,024ms) con saltos de 1,024ms ; Cada vez que TBAJO llega a su mximo TALTO se incrementa en una unidad ; por lo tanto juntando los dos como un solo temporizador se puede llegar ; a contar hasta 0,262sec CLOCK movf INICIO, W subwf TMR0, W addwf TBAJO, F btfsc STATUS, C incf TALTO, F movf TMR0, W movwf INICIO retlw 0

; El tiempo que lleva el contador TMR0 menos el ; tiempo que se inici se va aadiendo a la ;variable ; TBAJO hasta que desborde. ; en caso que desborde TBAJO se incrementa ;TALTO ; Nueva cuenta de TBAJO

; Inicializa variables de temporizacin INICIALIZACION movf TMR0, W movwf INICIO clrf TBAJO clrf TALTO retlw 0

; Inicializa variables de temporizacin de led's SXON btfss SX2TMR, 0

ANEXO 3

61

retlw 0 clrf LEDREG ; Apaga todos los led's

retlw 0

; Subrutina de control del encendido de los leds (Mquina de estado) LEDStateMachine movlw HIGH LEDStateMachineStart movwf PCLATH movf LEDSTATE, W andlw B'00000111' addwf PCL, F LEDStateMachineStart goto LEDSTATE0 goto LEDSTATE1 goto LEDSTATE2 goto LEDSTATE3 goto LEDSTATE4 goto LEDSTATE5 goto LEDSTATE6 goto LEDSTATE7 LEDSTATE0 call LITELED0 goto EndLEDStateMachine LEDSTATE1 call LITELED1 goto EndLEDStateMachine LEDSTATE2 call LITELED2 goto EndLEDStateMachine LEDSTATE3 call LITELED3 goto EndLEDStateMachine LEDSTATE4 call LITELED4 goto EndLEDStateMachine LEDSTATE5 call LITELED5

62

SENSORES INALMBRICOS DE BAJO CONSUMO

goto

EndLEDStateMachine

LEDSTATE6 call LITELED6 goto EndLEDStateMachine LEDSTATE7 call LITELED7 EndLEDStateMachine return ;---------------------------------------LITELED0 bsf STATUS, RP0 movlw LED0TRIS movwf TRISA bcf STATUS, RP0 movlw LED0ON movwf PORTA return LITELED1 bsf STATUS, RP0 movlw LED1TRIS movwf TRISA bcf STATUS, RP0 movlw LED1ON movwf PORTA return LITELED2 bsf STATUS, RP0 movlw LED2TRIS movwf TRISA bcf STATUS, RP0 movlw LED2ON movwf PORTA return LITELED3 bsf STATUS, RP0 movlw LED3TRIS movwf TRISA bcf STATUS, RP0 movlw LED3ON movwf PORTA return

ANEXO 3

63

LITELED4 bsf STATUS, RP0 movlw LED4TRIS movwf TRISA bcf STATUS, RP0 movlw LED4ON movwf PORTA return LITELED5 bsf STATUS, RP0 movlw LED5TRIS movwf TRISA bcf STATUS, RP0 movlw LED5ON movwf PORTA return LITELED6 bsf STATUS, RP0 movlw LED6TRIS movwf TRISA bcf STATUS, RP0 movlw LED6ON movwf PORTA return LITELED7 bsf STATUS, RP0 movlw LED7TRIS movwf TRISA bcf STATUS, RP0 movlw LED7ON movwf PORTA return ;Subrutina de encendido de led's DISPLAY movf btfsc goto btfss goto LEDSTATE, W STATUS, Z ; Are we at state 0? BUFFERRESET ; Yes LEDSTATE, 3 ; No, did we pass the last state? BUFFERLOADED ; No ; Yes ; is LEDREG = 0?

BUFFERRESET movf LEDREG, W btfss STATUS, Z

64

SENSORES INALMBRICOS DE BAJO CONSUMO

goto BUFFERRESET1 bsf STATUS, RP0 movlw LEDOFFTRIS movwf TRISA bcf STATUS, RP0 clrf PORTA BUFFERRESET1 movf LEDREG, W movwf LEDREGBUF LEDREGISTER clrf LEDSTATE BUFFERLOADED bcf STATUS, C rrf LEDREGBUF, F btfsc STATUS, C goto UPDATELED goto CONTINUE UPDATELED call LEDStateMachine CONTINUE incf LEDSTATE, F return

; no, jump over ; yes, turn off LEDs ; ---- Select Bank 1 ----; ---- Select Bank 0 -----

; Reload with the current value in ; Ensure State Zero ; Ensure Carry Is Clear ; Is The Next Bit a '1' ; Yes, Update The LED Array ; No ; Update LED Array ; Point To Next State

; Programa Principal ; Inicializacin de las diferentes variables y puertos RESET clrf FLAGS clrf PORTA clrf PORTC clrf LEDREG clrf LEDSTATE clrf LEDREGBUF movlw INICIAR movwf CONTROL call INI MAIN call call call TIMER CLOCK DISPLAY ; Control de iluminacin de leds ; Control de Contadores ; Actualizacin de matriz de led's

ANEXO 3

65

movlw B'00000111' andwf LEDREG, W btfss STATUS, Z call SXON movlw HIGH ESTADO movwf PCLATH movf CONTROL, W andlw B'00001111' addwf PCL, F

; Control de estado de led's

; Filtra la variable CONTROL ya que solo ; habrn ; 10 posibles estados

; Mediante la variable control se incrementa el ; contador de programa para pasar de un estado a ;otro

ESTADO goto goto goto goto goto goto goto goto goto goto INICI INICI1 SILEN SILEN1 UNO1 CERO0 SALVAR ESPERA OK IL_LEDS

; A la espera de trama de sincronismo INICI btfsc RX incf CONTROL, F goto MAIN INICI1 btfsc RX goto MAIN INICIALIZACION CONTROL, F ; Pasa a monitorizar el silencio para determinar ; si est en estado de sincronismo o pausa antes de goto MAIN ; estado DATOS ; Si hay un cero durante 1,25ms pasa a SILEN1 SILEN btfsc RX call incf

66

SENSORES INALMBRICOS DE BAJO CONSUMO

goto RESTART btfss TALTO, 0 goto MAIN movlw D'64' andwf TBAJO, W btfsc STATUS, C goto MAIN incf goto CONTROL, F MAIN ; Temporiza 1,024ms. Entonces hay overflow ; que se ve reflejado en TALTO bit 0 ; Ahora hay que temporizar los 0,25ms restantes ; Por eso 64 * 4us = 0,25ms ; Cuando hay overflow se acaba la temporizacin

; SILEN 1 y 2 Comprueba que no este ms de 6ms en estado bajo SILEN1 movlw D'6' subwf TALTO, W btfss STATUS, C goto SILEN2 goto RESTART

; Si hay carry es que lleva mas de 6ms a cero ; y reinicia el programa

SILEN2 btfss RX goto MAIN call INICIALIZACION

movlw D'24' movwf conta incf CONTROL, F goto MAIN

; Vuelve a pasar por SILEN1 y comprueba ; el tiempo que lleva en estado bajo ; Cuando llega un 1 se reinician todos los ; contadores ; y se prepara para recibir los 24 bits de datos ; Pone CONTROL a estado UNO1

; Recibe pulso alto UNO1 btfsc TALTO, 0 goto RESTART btfsc RX goto MAIN movf TBAJO, W ; Cuando pasa a estado bajo guarda el tiempo movwf TOTAL_ALT ; que ha estado en estado alto call INICIALIZACION ; Si esta ms de 1,024ms (dos 1's) no es un dato ;vlido ; y reinicia

ANEXO 3

67

incf goto

CONTROL, F MAIN

; Pasa a estado CERO0 porque despus de un 1 ;o dos 1's siempre se enviar un 0 o 2 0's

; Recibe pulso bajo CERO0 btfsc TALTO, 0 vlido goto CERO2 btfss RX goto MAIN movf TBAJO, W ; Cuando pasa a estado alto guarda el tiempo movwf TOTAL_BAJ ; que ha estado en estado bajo call INICIALIZACION incf CONTROL, F ; Pasa a estado SALVAR goto MAIN ; Pasa a estado PAUSA ; Si esta ms de 1,024ms (dos 0's) no es un dato ; y pasa a estado PAUSA

CERO2 movlw PAUSA movwf CONTROL goto MAIN

; Guarda cada uno de los bits recibidos en el byte que le corresponde SALVAR movf TOTAL_ALT, W subwf TOTAL_BAJ, W ; Para saber que bit se ha recibido se hace ; la resta entre el tiempo que ha estado en 0 ; menos el tiempo que ha estado en 1 ; El carry de esta operacin es el bit recibido

rrf DATA2, F rrf DATA1, F ; Se rota bit a bit a traves de las 3 variables rrf DATA0, F ; hasta completar los 24 bits de datos. movlw UNO movwf CONTROL ; Pasa a estado UNO ya que el siguiente dato decfsz conta, F ; se sabe que empieza por 1 (Todos empiezan por 1) goto MAIN movlw TGUARDA movwf CONTROL goto MAIN ; Pasa a estado de ESPERA.

; Esta subrutina recibe el ltimo byte de datos que enva el emisor para

68

SENSORES INALMBRICOS DE BAJO CONSUMO

; asegurar que se ha finalizado correctamente la TX. Y por ltimo comprueba ; que se recibe un silencio mayor de 8ms ESPERA btfsc FLAG2 goto ESPERA1 btfsc RX goto MAIN call bsf INICIALIZACION FLAG2 ; Monitoriza los bits recibidos para comprobar si llega ; un 0 y poder contar el tiempo que esta a 0.

ESPERA1 btfss RX goto ESPERA2 bcf goto FLAG2 MAIN ; Si lleva mas de 8ms pasa a estado OK (VALIDAR)

ESPERA2 btfss TALTO, 3 goto MAIN bcf incf goto FLAG2 CONTROL, F MAIN

; Primero de todo comprueba la identidad del emisor. ; Si no reconoce al emisor no acepta la repcin. OK movlw 0x00 call DATA_EEPROM_READ xorwf DATA0, W btfss STATUS, Z goto RESTART movlw 0x01 movwf EEADR ; lee el n de ID guardado en la EEPROM

; si el n recibido y el de la EEPROM son ; iguales, continuar ; Guarda el primer byte recibido en la ; posicin 0x01 de la EEPROM para su ; posterior ; analisis.

movlw DATA1 movwf EEDAT call DATA_EEPROM_WRITE

ANEXO 3

69

movlw movwf movlw movwf call incf goto

0x02 ; Guarda el segundo byte en la posicin 0x02 EEADR DATA2 EEDAT DATA_EEPROM_WRITE ; Pasa a estado IL_LEDS (MOSTRAR) para ;mostrar el resultado en los leds

CONTROL, F MAIN

IL_LEDS movfw DATA1 movwf LEDREG clrf clrf goto SX1TMR SX2TMR RESTART ; Se reinicia el programa

; Subrutina de reinicio del programa RESTART movlw INICIO movwf CONTROL goto MAIN

; Memoria EEPROM ORG 0x2100 DE 0x73 ; Se guarda el valor del n de ID del emisor en la ; EEPROM para posteriores comprobaciones

; Configuracin del reloj interno del microprocesador org 0x3ff retlw 0x40 end

You might also like