• No se han encontrado resultados

RED DE SENSORES INALÁMBRICOS: COMUNICACIÓN INALÁMBRICA

N/A
N/A
Protected

Academic year: 2021

Share "RED DE SENSORES INALÁMBRICOS: COMUNICACIÓN INALÁMBRICA"

Copied!
69
0
0

Texto completo

(1)

“RED DE SENSORES INALÁMBRICOS:

COMUNICACIÓN INALÁMBRICA

LÓPEZ HUERTA JORGE IVÁN

DR. RICARDO MARCELÍ

M. EN C. MAURICIO LÓPEZ VILLASEÑOR

DEPARTAMENTO DE

INGENIERÍA ELÉCTRICA.

RED DE SENSORES INALÁMBRICOS:

COMUNICACIÓN INALÁMBRICA

REPORTE DE PROYECTO DE INGENIERÍA ELECTRÓNICA II

PRESENTADO POR:

LÓPEZ HUERTA JORGE IVÁN

ARROYO GÓMEZ YUKIO

ASESORES:

DR. RICARDO MARCELÍN JIMÉNEZ

C. MAURICIO LÓPEZ VILLASEÑOR

Diciembre 2008

RED DE SENSORES INALÁMBRICOS:

COMUNICACIÓN INALÁMBRICA”

(2)

2 PROYECTO DE INGENIERÍA ELECTRÓNICA II

CONTENIDO

INTRODUCCIÓN 4

CAPÍTULO 1. HARDWARE Y TECNOLOGÍAS EN LAS WSN 1.1 Microcontrolador PIC16F877 6 1.1.1 Memoria de datos 6 1.1.2 MSSP 8 1.1.3 USART 11 1.2 Módulo CC1000PP-868 12 1.2.1 Transceiver CC1000 12 1.2.2 Interfaz de configuración 14 1.2.3 Interfaz de datos 15 1.2.4 Codificación Manchester 18

CAPÍTULO 2. ESTADO INICIAL DEL PROYECTO 2.1 Información heredada 19

2.2 Decisión sobre los componentes a usar 20

2.3 Punto de partida para la implementación 20

CAPÍTULO 3. DISEÑO MODULAR 3.1 Segmentación del nodo en módulos 22

3.2 Objetivos del diseño modular 22

3.3 Módulo de enlace de datos 23

(3)

CAPÍTULO 4. IMPLEMENTACIÓN

4.1 Buffers circulares 25

4.2 Registro de Banderas 26

4.3 Funcionamiento del nodo y flujo de datos 27

4.4 Función Control 27

4.5 Función ISR 30

4.6 Funciones TX_DIO y RX_DIO 31

4.7 Cronología y detalles de la implementación 34

4.7.1 Configuración del transceiver 34

4.7.2 Comunicación con el transceiver 35

4.7.3 Flujo de datos en el PIC de control 35

4.7.4 Modo de operación 36

4.7.5 Sincronización 36

4.7.5.1 Frecuencia de operación de los dispositivos 36

4.7.5.2 Sincronización de los dispositivos 37

CAPÍTULO 5. NOTAS FINALES

5.1 Estado final de la implementación 38

5.2 Lo que falta por hacer 39

5.3 Conclusiones 39

BIBLIOGRAFÍA 41

(4)

4 PROYECTO DE INGENIERÍA ELECTRÓNICA II

______________________________________________

Introducción.

______________________________________________

Las redes de sensores inalámbricos (WSN: Wireless Sensor Network) son una tecnología que ha tomado una gran fuerza en los últimos años resultado de los avances en la microelectrónica y la computación y son fuente de inspiración para múltiples proyectos de investigación y desarrollo. La implementación y desarrollo de una red de sensores inalámbricos para propósitos específicos ofrece una serie de ventajas tales como la capacidad de adaptación, escalabilidad y robustez. Por estas razones, una red de este tipo puede encontrar un amplio espectro de aplicaciones. Sin embargo, dado que los nodos de la red deben tener una arquitectura lo más simple posible, también implica que una serie de problemas de instrumentación y comunicación deben ser resueltos primero a fin de tener una tecnología madura que pueda ser aplicada.

Para tener una red inalámbrica de sensores en operación, es necesario cumplir con requerimientos de hardware y software muy específicos y que inherentemente acarrean limitaciones. En una red de sensores, lo ideal es que la colaboración entre nodos sea eficiente y que funcionen a partir de cantidades mínimas de información ya que los nodos son carentes de recursos, además de que la topología puede cambiar muy rápidamente provocando que los nodos en la red continuamente tengan nuevos vecinos con los cuales colaborar.

Se sabe que en una red de sensores, en términos de energía, la transmisión de un bit puede ser mucho más costosa que su procesamiento y/o almacenamiento. De ahí que sea muy importante el uso de técnicas bien establecidas para el desarrollo e implementación de los circuitos que formen cada uno de los nodos de la red.

El objetivo general del proyecto es desarrollar e implementar una red de sensores inalámbricos ad-hoc donde cada nodo está compuesto de un protocolo de comunicación y un sistema de hardware basado en microcontrolador. Cada nodo en la red sirve como interfaz de un sensor y a su vez puede interactuar con otros sistemas del mismo tipo para intercambiar y/o transmitir información. La red así obtenida debe ser autoconfigurable, escalable y tolerante a fallas, debe ser capaz de recolectar información de cada sensor considerado y concentrarla para su procesamiento e interpretación en un punto designado para tal fin.

Para que exista una comunicación entre dos puntos (nodos) cualesquiera de la red, se necesita de un canal de comunicación que pueda transportar la información que un emisor envíe a un destinatario(s) especifico(s), para la red de sensores inalámbricos es el espacio libre a través de la radiofrecuencia. El objetivo principal de este proyecto y de la información descrita en los capítulos posteriores de este documento, se centra en el estudio e implementación de una interfaz de comunicación inalámbrica que proporcionará a los nodos de la red un medio de

(5)

transporte para el intercambio de información. Para cumplir con el objetivo se seleccionaran y propondrán métodos adecuados para su implementación en un sistema con recursos de cómputo limitados.

Cabe mencionar que el protocolo de comunicación (protocolo cross-layer) ya fue implementado en una primera versión por pasadas colaboraciones del proyecto general, dicha implementación fue con un medio de comunicación guiado (cableado) y a través del hardware embebido en los microcontroladores para la comunicación serial (USART). Ahora el trabajo principal consiste en sustituir el medio de comunicación alambrado entre nodos por un medio de comunicación inalámbrico y dotar al protocolo de esa capacidad de comunicación.

Para evaluar los objetivos planteados en este proyecto, el presente trabajo documenta el desarrollo e implementación de un sistema de comunicación inalámbrico basado en dispositivos de lógica reconfigurable. El sistema desarrollado posee una estructura modular para permitir la fácil adaptación a diferentes (o nuevos) componentes y posibilita la utilización de diferentes bandas de comunicación libres en función de los requerimientos de velocidad de transmisión y alcance, así como en el consumo de energía.

(6)

6 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Capítulo 1.

Hardware y tecnologías en las WSN

______________________________________________

1.1 Microcontrolador PIC16F877

El núcleo de un nodo en una red de sensores inalámbricos, desde el punto de vista del hardware, debe ser un dispositivo ligero en cuanto al consumo de energía, pero con recursos suficientes que le proporcionen la capacidad para procesar información. Los microcontroladores han sido una muy buena opción para satisfacer dichas necesidades. Para el desarrollo e implementación del proyecto se utilizó el microcontrolador PIC16F877, es un microcontrolador de propósito general desarrollado por Microchip, dentro de sus características principales se puede destacar que está diseñado bajo una arquitectura Harvard , tiene 8Kb de memoria programa, cinco puertos de entrada/salida, módulo USART, módulo MSSP (SPI), 4 temporizadores y convertidor analógico-digital. Se trata de un dispositivo con las características suficientes para los propósitos que se siguen en este proyecto y en general el uso de estos dispositivos es lo más común en las WSN.

La documentación completa de las características técnicas y de las múltiples configuraciones de los periféricos del microcontrolador PIC16F877 se puede encontrar en la hoja de datos del microcontrolador y en las notas de aplicación de Microchip. Para los fines prácticos de este reporte, en esta parte del documento sólo se hace referencia a las características básicas de los periféricos y de los recursos y configuraciones que son relevantes para el desarrollo e implementación del protocolo y la comunicación inalámbrica.

1.1.1 Memoria de datos

Debido a la arquitectura Harvard sobre la que está diseñado el PIC16F877, en él podemos encontrar dos bloques de memoria principales, un primer bloque (8k) consiste en una memoria programa no volátil (ROM Flash) que contiene las instrucciones que ejecutará el microcontrolador y un segundo bloque (512 bytes) de memoria volátil (EEPROM) que funciona como memoria de datos.

La memoria de datos (memoria RAM) se organiza en múltiples bancos de registros. Existen 4 bancos, cada uno contiene registros de funciones especiales (SFR: Special Function Registers) y registros de propósito general. En la figura 1.1 se puede observar la organización de la memoria de datos del microcontrolador. Por ejemplo, para el primer banco (Bank 0 en la figura 1.1), se tiene que el bloque de registros de funciones especiales va de la localidad 01h a la 1Fh, mientras que los registros de propósito general se encuentran de la localidad 20h a la 7Fh. Este último bloque nos da un total de 96 localidades de un byte que se pueden utilizar

(7)

libremente para el almacenamiento de datos y variables. Los registros de funciones especiales son registros que sirven para configurar los recursos del microcontrolador.

Figura 1.1 Organización de la Memoria del PIC16f877

El diseño de la memoria de datos del microcontrolador tiene como consecuencia que el acceso a sus localidades sea de dos maneras muy especificas, un método de direccionamiento directo y otro indirecto. En el método directo la posición de la memoria con la que se trabaja viene directamente definida en el código de la instrucción; en el método indirecto la posición de la

(8)

8 PROYECTO DE INGENIERÍA ELECTRÓNICA II

memoria con la que se trabaja viene definida en un registro de función especial llamado FSR (File Select Register). El método usado en este proyecto será el direccionamiento directo.

1.1.2 MSSP (Master Synchronous Serial Port)

El MSSP es un módulo útil para la comunicación serial con dispositivos periféricos u otros microcontroladores. Estos dispositivos periféricos pueden ser EEPROM, registros de corrimiento, displays, convertidores A/D, etc. El módulo MSSP puede operar en dos formas, puede ser en un modo I2C (Inter-Integrated Circuit) o en modo SPI (Serial Peripheral

Interface). De estos, el último es el de interés para nosotros, pues es el protocolo de comunicación que se ocupará para la configuración del transceiver CC1000, dispositivo del cual más adelante se profundizará.

El módulo MSSP cuando es configurado en modo SPI permite que 8 bits de datos puedan ser síncronamente transmitidos y recibidos de forma simultánea. Para lograr una comunicación operando en modo SPI, típicamente se dispone de los siguientes pines del PIC16F877:

• Serial Data Out(SDO)

• Serial Data In(SDI)

• Serial Clock(SCK)

El bus SPI es una forma de comunicación serial síncrona estándar que opera en modo full-dúplex. Los dispositivos se comunican tanto en modo maestro como en modo esclavo, donde el maestro es el que inicia la comunicación. El bus SPI es capaz de operar con un sólo maestro y uno o más esclavos. Para empezar la comunicación, el maestro configura el reloj (escogiendo una frecuencia que sea menor o igual a la que el esclavo puede soportar) a frecuencias que comúnmente están en el rango de 1 a 70 Mhz. El maestro entonces selecciona al esclavo (si es el caso de varios esclavos) con la línea “chip select” y comienza el envío de la señal de reloj y con ello la transmisión y recepción de datos. La figura 1.2 muestra un diagrama simplificado del módulo MSSP del PIC16F877.

Las transmisiones por medio del bus SPI en el PIC16F877 involucran dos registros de corrimiento de ocho bits (SSPSR), uno en el maestro y otro en el esclavo; y estos están conectados en forma de anillo. Los datos son transmitidos comenzando con el bit más significativo y haciendo un corrimiento a la izquierda, de forma simultánea por el lado de los menos significativos el espacio que queda libre después del corrimiento es ocupado por un nuevo bit proveniente de la recepción, dando lugar a la comunicación full-dúplex.

Después de que el procedimiento anterior ocurre para todos los bits del dato, el maestro y el esclavo habrán intercambiado los datos de sus registros y cada una de las partes puede disponer de dichos datos para su procesamiento. Si hay más datos que transmitir o recibir (intercambiar), los registros son cargados con nuevos datos y el proceso se repite.

(9)

Figura 1.2 Módulo MSSP del PIC16F877

La comunicación por medio del bus SPI en el PIC16F877 involucra un ciclo de reloj por cada bit de información que se desea transmitir o recibir. Cuando no hay más datos que transmitir o recibir, el maestro para de enviar la señal de reloj (SDK) y la comunicación finaliza. La figura 1.3 muestra un ejemplo de comunicación por el puerto MSSP en modo SPI entre dos microcontroladores.

(10)

10 PROYECTO DE INGENIERÍA ELECTRÓNICA II

(11)

La utilización del módulo MSSP es relativamente sencilla y sólo requiere de configurar los bits de control en los SFR (Special Function Registers) correspondientes del PIC para que la interfaz serial funcione en modo SPI. Los SFR a configurar son:

• SSPCON1 - Control Register • SSPSTAT - Status Register

La figura 1.4 muestra más detalles de los registros SSPCON1 y SSPSTAT y sobre los bits que determinan la configuración del módulo MSSP.

1.1.3 USART

La USART (Universal Synchronous Asynchronous Receiver Transmiter) es una interfaz de comunicación serial que posee el PIC16F877 y que permite la comunicación serial con otros dispositivos tales como computadoras personales, EEPROM’s serie, circuitos integrados, convertidores A/D o D/A, otros microcontroladores, etc. La USART puede ser configurada para establecer una comunicación serial en los siguientes modos:

• Full-dúplex (modo asíncrono).

• Half-dúplex (modo síncrono).

El modo asíncrono permite una comunicación full-dúplex puesto que los recursos de hardware para transmisión y recepción son independientes. En modo asíncrono se utiliza un formato estándar en el que se deben definir parámetros como: velocidad de transmisión (bps), bits de datos (8 ó 9), bit de paridad, etc. El formato de datos más común es: un bit de inicio, ocho (o nueve) bits de datos y un bit de paro. Una característica importante de la USART es que la velocidad de transmisión de la comunicación serial puede ser configurada (generador de baudios BRG) para trabajar en un amplio rango de valores (dependiendo del reloj del sistema) permitiendo flexibilidad en la comunicación con otros dispositivos.

En el desarrollo de este proyecto, la velocidad de transmisión que se utilizará para la comunicación de dispositivos con este medio será de 9600 bps. En la figura 1.5 se muestran diagramas que revelan la versatilidad de la USART.

1.2 Módulo CC1000PP-868

El CC1000PP-868 es un módulo plug-and-play fabricado por Chipcon (Texas Instruments) que tiene como componente principal el transceiver CC1000 del mismo fabricante. La característica principal del CC1000PP-868 es que es un módulo que puede trabajar en conjunto con otros prototipos, ya que posee todos los componentes (componentes con valores muy específicos) necesarios para que el transceiver CC1000 opere adecuadamente. Las bandas de radiofrecuencia en las que el CC1000PP-868 puede trabajar es 868 y de a 902 a 928 MHz y un voltaje de 2.1 a 3.6 volts.

(12)

12 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Figura

Aunque el módulo CC1000PP

frecuencias determinadas por el fabricante

ciertos valores de frecuencia óptimos, uno de es frecuencia con la que se tra

frecuencias en las cuales puede operar el CC1000PP de frecuencia óptimo, ya que

operación se puede ver afectado el rendimiento del dispositivo ya sea en el consumo de corriente, en la potencia de la señal al transmitir o en la sensibilidad de la recepción debido a la tolerancia en los valores de los componentes del mó

La breve descripción que se hizo

aplicación muy específica para la correcta operación del CC1000 en un rango determinado de frecuencias; sin embargo el CC1000 es la parte de hardware que realmente se encargará de la transmisión y recepción (física)

siguientes se da una vista más importantes. Una documentación como del CC1000 se puede consultar en documentación se encuentra

este apartado del documento proyecto.

1.2.1 Transceiver CC1000

El transceiver CC1000 es un chip

bajo consumo de voltaje, características vitales en las redes de sensores PROYECTO DE INGENIERÍA ELECTRÓNICA II

Figura 1.5 Versatilidad de la USART del PIC16F877.

CC1000PP-868 está diseñado para trabajar en un determinado rango de frecuencias determinadas por el fabricante, la hoja de especificaciones del prototipo indica ciertos valores de frecuencia óptimos, uno de estos valores es 868.297200 MHz y es la frecuencia con la que se trabajara a lo largo del proyecto. Aunque existe un rango de frecuencias en las cuales puede operar el CC1000PP-868, es preferible la elección de un valor ya que con la elección de una frecuencia arbitraria dentro del rango de ver afectado el rendimiento del dispositivo ya sea en el consumo de corriente, en la potencia de la señal al transmitir o en la sensibilidad de la recepción debido a

alores de los componentes del módulo.

que se hizo del módulo CC1000PP-868 deja ver que es simplemente una aplicación muy específica para la correcta operación del CC1000 en un rango determinado de sin embargo el CC1000 es la parte de hardware que realmente se encargará de la

(física) de datos de forma inalámbrica, por lo que

siguientes se da una vista más general de dicho componente y de sus características documentación extensa y bien detallada del módulo CC1000PP

se puede consultar en la hoja de datos técnicos de ambos dispositivos, dicha documentación se encuentra en la página principal de Chipcon. Los datos técnicos citados en este apartado del documento con respecto al CC1000 son sólo los más

CC1000

es un chip diseñado para aplicaciones inalámbricas de baja potencia y , características vitales en las redes de sensores

determinado rango de ficaciones del prototipo indica os valores es 868.297200 MHz y es la Aunque existe un rango de es preferible la elección de un valor con la elección de una frecuencia arbitraria dentro del rango de ver afectado el rendimiento del dispositivo ya sea en el consumo de corriente, en la potencia de la señal al transmitir o en la sensibilidad de la recepción debido a

868 deja ver que es simplemente una aplicación muy específica para la correcta operación del CC1000 en un rango determinado de sin embargo el CC1000 es la parte de hardware que realmente se encargará de la de datos de forma inalámbrica, por lo que en los párrafos y de sus características más dulo CC1000PP-868 así ambos dispositivos, dicha os datos técnicos citados en los más relevantes para el

inalámbricas de baja potencia y , características vitales en las redes de sensores. Está diseñado para

(13)

funcionar en las bandas ISM (Industrial, Scientific and Medical) y las bandas de frecuencia SRD (Short Range Device) que comprenden las bandas de frecuencia de 315, 433, 868 y 915 MHz. Los variables de configuración para el funcionamiento del CC1000 se pueden programar por medio de un bus serial (SPI), razón por la cual se convierte en un dispositivo muy flexible y fácil de usar.

En una aplicación típica, el CC1000 estará acompañado de un microcontrolador que se encargará de enviarle las variables de configuración y usará pocos componentes externos pasivos. La figura 1.6 muestra el diagrama de un circuito de aplicación (sobre el que está basado el módulo CC1000PP-868) para el CC1000, los valores de los componentes pueden variar de acuerdo a la frecuencia o rango de frecuencias en que vaya a operar el dispositivo.

Figura 1.6 Circuito de aplicación del CC1000

A continuación se enlistan las características más importantes del CC1000 con las cuales se puede tener una visión más clara del porque es una buena elección para implementar una WSN.

• Bajo consumo de corriente y voltaje de operación de 2.1 a 3.6 volts

• Rango de frecuencias de 300 a 1000 MHz

• Salida RSSI (Received Signal Strength Indicator)

(14)

14 PROYECTO DE INGENIERÍA ELECTRÓNICA II • Modo de transmisión: UART, NRZ y Manchester

Algunos de los parámetros configurables en el CC1000 y que son importantes para el desarrollo del proyecto son la frecuencia, la potencia de la señal de transmisión, el formato de los datos transmitidos (UART, NRZ o Manchester) y el modo de operación (transmisor, receptor y bajo consumo).

En la figura 1.7 se muestra un diagrama a bloques con la arquitectura interna del CC1000. Cuando el transceiver funciona como transmisor, la señal que se quiere transmitir se introduce por el pin DIO (Digital I/O), posteriormente el oscilador controlado por voltaje (VCO) envía la señal directamente al amplificador de potencia (PA). La señal que entra por el pin DIO es modulada en FSK.

Figura 1.7 Arquitectura interna del CC1000

Cuando el CC1000 es configurado como receptor, la circuitería interna del transceiver funciona como un receptor superheterodino, la señal de entrada RF_IN es amplificada por el amplificador LNA (amplificador de bajo ruido) y posteriormente convertida a una frecuencia intermedia (IF) por el mezclador (mixer). En la etapa IF (IF stage) la señal es amplificada y filtrada antes de ser demodulada. Ya en la etapa de demodulación se trata la señal de acuerdo a la codificación que se éste usando (NRZ o Manchester).

1.2.2 Interfaz de Configuración (configuración del CC1000)

Para llevar a cabo la configuración del CC1000, el fabricante Chipcon provee el software SmartRF Studio, dicho software permite a los usuarios generar los datos con los valores necesarios para la correcta configuración del CC1000, los datos generados son basados en la selección de varios parámetros (como los mencionados en el apartado anterior 1.2.1) por parte del usuario. Los datos que genera el software SmartRF Studio son valores en hexadecimal que deben ser cargados en los registros de configuración del CC1000.

(15)

Para cargar los parámetros de configuración en los registros del CC1000, se usa una conexión (figura 1.12) de tres líneas seriales: PDATA, PALE y PCLK y el protocolo de comunicación estándar SPI.

Hay 28 registros de 8 bits cada uno, direccionados con 7 bits. El bit Read/Write inicia la operación indicando el modo de lectura o escritura. La configuración completa del transceiver requiere que sean enviadas 22 tramas de 16 bits cada una (un bit para indicar lectura o escritura, 7 bits para la dirección y 8 bits de datos). El PCLK es la señal de reloj generada por el microcontrolador, pues lleva la función de maestro en la comunicación serial que se gesta entre éste y el CC1000 permitiendo la sincronía en la comunicación; el tiempo necesario para la configuración completa del transceiver dependerá de la frecuencia de la señal PCLK. En cada ciclo de escritura, 16 bits son enviados por la línea PDATA. La figura 1.8 ejemplifica muy bien el procedimiento para el envío de las tramas de configuración del CC1000.

Los datos que determinan la configuración deseada son guardados en la RAM del CC1000. Los datos también son retenidos durante el modo de bajo consumo de energía, pero no cuando se deja sin alimentación. Los registros pueden ser configurados en cualquier orden y también pueden ser leídos por el microcontrolador por la misma interfaz de configuración. Para los fines de este proyecto no es necesaria la lectura de los registros del transceiver.

Figura 1.8 Formato de las tramas de configuración del CC1000

De la figura 1.8 puede observarse que cuando se envía la trama de direcciones, la señal PALE se mantiene en un nivel bajo; caso contrario con la trama de datos. La señal PALE no es parte del protocolo SPI, sin embargo es necesaria para la correcta configuración del CC1000, ya que es la señal que indica al transceiver cuando se trata de una trama que especifica un dato de configuración o la dirección de alguno de sus registros.

Cuando se ha llevado a cabo la configuración exitosa del transceiver, las líneas que forman la interfaz de configuración (del lado del microcontrolador) pueden ser ocupadas para otro propósito. De cualquier forma para el presente proyecto las líneas de la interfaz de configuración así como las líneas de todas las conexiones de los componentes que forman el nodo son totalmente dedicadas, pues entre las múltiples características del PIC16F877 está la

(16)

16 PROYECTO DE INGENIERÍA ELECTRÓNICA II

de contar con 5 puertos de entrada salida, que son una cantidad más que suficiente para la implementación de los nodos.

1.2.3 Interfaz de Datos (comunicación con el CC1000)

Las líneas PDATA, PCLK y PALE son las líneas que forman la interfaz de configuración del CC1000, mientras que las líneas correspondientes al DIO y al DCLK forman la interfaz de comunicación. La línea DIO es bidireccional, debido a que la transmisión y recepción de datos se hace por el mismo canal, es decir, puede haber transmisión de datos del microcontrolador hacia el CC1000 y viceversa. En la línea de DCLK se genera una señal de reloj por parte del CC1000, ésta es enviada al microcontrolador y cada flanco de subida (inicio de un nuevo ciclo) del reloj es la indicación de que el transceiver está listo para la trasmisión o recepción de un nuevo bit según sea el modo de operación.

El formato de los datos a transmitir o recibir por el CC1000 es un parámetro configurable, el formato puede ser elegido de los tres siguientes formatos:

 Modo NRZ síncrono (figura 1.9)

 Modo síncrono codificación Manchester (figura 1.10)  Modo asíncrono UART (figura 1.11)

(17)

Figura 1.10 Formato de datos en modo síncrono codificación Manchester

(18)

18 PROYECTO DE INGENIERÍA ELECTRÓNICA II

En un sistema típico, el CC1000 tendrá la interfaz de configuración y la interfaz de datos conectadas a un microcontrolador, la primera para transferir direcciones y parámetros que determinan el modo de operación y la segunda para los datos que se desean transmitir o recibir del medio inalámbrico. En la figura 1.12 se puede apreciar el diagrama de conexión con un microcontrolador.

Figura 1.12 Conexión de la interfaz de datos y de la interfaz de configuración en el CC1000

1.2.4 Codificación Manchester.

Debido a que el CC1000 hace una modulación FSK a las tramas que se desean transmitir, es necesario introducir algún sistema de codificación que garantice transiciones periódicas en la señal de salida. La codificación Manchester es el formato de los datos de salida que se eligió para el presente proyecto por ser una de las codificaciones más fiables en los sistemas de comunicación digital, además de que es una de las opciones que brinda el CC1000 para el formato de los datos de salida.

La codificación Manchester es un método de codificación de señales binarias en donde por cada tiempo de bit hay una transición entre dos niveles de señal. La transición se da a la mitad del período de cada bit, estas transiciones sirven como mecanismos de reloj y también son datos. La convención Manchester (figura 1.13) indica que una transición que va de un nivel bajo a un alto representa un “0”, y la transición de un nivel alto a un bajo representa un “1”.

(19)

La principal ventaja de la codificación Manchester es que la señal de los datos y la de sincronía se combinan en una sola, de manera que el flujo de datos se sincroniza por sí mismo. El único inconveniente en éste tipo de codificación es que el ancho de banda que consume es el doble en comparación con las comunicaciones asíncronas, pues por cada bit que se desea transmitir se necesitan dos para codificarlo (figura 1.13). Internamente el CC1000 cuenta con el hardware necesario para la codificación (modo transmisor) y decodificación (modo receptor) de los datos.

(20)

20 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Capítulo 2.

Estado inicial del proyecto.

______________________________________________

Llevar a cabo la implementación de una red de sensores inalámbricos es una tarea con un grado de dificultad alto y que requiere de trabajo conjunto, este proyecto no es la excepción. A partir de este capítulo nos enfocaremos en el proceso de desarrollo e implementación de la interfaz inalámbrica que permitirá al protocolo cross-layer dejar de depender de un medio dirigido (comunicación serial por la USART) para su funcionamiento.

Proveer al protocolo cross-layer la capacidad de comunicación por radiofrecuencia nos permite acercarnos mas a una verdadera WSN, de modo que nos dedicaremos a resolver los problemas de comunicación a nivel físico para que los próximos participantes del proyecto se concentren totalmente en los problemas de las capas superiores.

2.1 Información heredada (proyectos previos)

La información contenida en este capítulo es resultado de la recopilación de dos trabajos que se realizaron por separado. Por un lado el equipo predecesor de este proyecto realizó una versión del protocolo cross-layer [2], este protocolo es el software que soporta la comunicación entre los nodos de la red a nivel de enlace de datos, proveyendo a los nodos de mecanismos de enrutamiento y control de acceso al medio. Para esta primera versión de cross-layer, la capa física se resolvió ocupando como medio de comunicación la interfaz serial (USART) de los microcontroladores, de modo que el hardware embebido en el microcontrolador se ocupa de la correcta transmisión y recepción de los datos. Por otro lado, se retoma parte de la información de un proyecto alterno y que trata de la “Comunicación a nivel de enlace de datos con unidades de radiofrecuencia” [1]. De dicho proyecto se hace uso principalmente de las funciones y parámetros necesarios para la configuración del módulo CC1000PP-868. El módulo CC1000PP-868, ya descrito en el capítulo anterior, es el transceiver sobre el cual se basa la interfaz de comunicación inalámbrica que se implementará para el protocolo cross-layer.

Como se puede ver, la situación inicial es aprovechar el trabajo que ya se realizó con el CC1000PP-868, para de ahí partir e integrar al protocolo cross-layer el código (software) necesario para configurar y controlar la operación del módulo CC1000PP-868. Una vez planteada la situación inicial del proyecto, daremos paso a detallar los problemas surgidos al iniciar con la implementación de la interfaz inalámbrica del cross-layer así como la manera en que se les dio solución.

(21)

En el apartado 1.2 del capítulo 1, se mencionan las características del módulo CC1000PP-868 y se hace notar que su componente principal (los demás sólo son componentes de acoplamiento) es el transceiver CC1000; de modo que a partir de este capítulo nos referiremos al módulo CC1000PP-868 como tal, como transceiver o simplemente CC1000. Igualmente para el PIC16F877, de ahora en adelante también nos referiremos a él como microcontrolador o simplemente PIC.

2.2 Decisión sobre los componentes a usar.

El primer problema al que hubo que darle solución es que al conjuntar el trabajo realizado para el protocolo cross-layer y la comunicación por RF, resultó que los proyectos fueron desarrollados con microcontroladores de diferente fabricante, el primero desarrollado con microcontroladores PIC de Microchip y el segundo con microcontroladores AVR de Atmel. La pregunta natural era ¿continuar con el proyecto sobre AVR’s o sobre PIC’s?, ¿hacer una conjunción de ambos?

Se llegó a la conclusión de hacer la implementación con PIC’s por las siguientes razones:

• La mayor parte de código (cross-layer) estaba programada en ensamblador para PIC’s, cambiar a AVR’s requería de tiempo extra para rescribir el mismo código para ensamblador de AVR’s. Con respecto a este punto la única ventaja de los AVR’s sobre los PIC’s es el ahorro de memoria programa, ya que por la arquitectura de uno y otro (Von Neuman y Harvard respectivamente) se requieren más líneas de código en los PIC’s.

• Las características y recursos de hardware de los PIC’s y de los AVR’s son muy similares.

• Aunque el código en ensamblador para la configuración del módulo CC1000PP-868 está hecho para AVR’s, existe un anexo que contiene código ensamblador para PIC’s, en este último, la interfaz de configuración SPI está implementada en software.

2.3 Punto de partida para la implementación.

El primer paso en la implementación del proyecto fue la configuración del módulo CC1000PP-868 y comprobar su correcto funcionamiento. A pesar de que la implementación de las funciones de configuración para el CC1000PP-868 ya estaba realizada, como se comentó anteriormente, fue realizada con una interfaz SPI por software. El problema de esta situación es que el código en ensamblador crecía mucho y los recursos de memoria programa para el PIC16F877 se limitan a 8k. La solución más natural fue hacer uso del módulo MSSP en modo SPI del PIC16F877.

Cabe mencionar que la implementación del protocolo SPI por software fue la solución del proyecto heredado [1] para la configuración de CC1000PP-868, pues en los AVR’s el hardware destinado para este fin presentaba algunos errores al momento de leer los registros del tranceiver. Por ende cuando fueron implementadas las funciones en código ensamblador

(22)

22 PROYECTO DE INGENIERÍA ELECTRÓNICA II para PIC’s en el mismo proye

el modelo de microcontrolador

Para los objetivos de este proyecto, lo único que se necesita es la escritura de los registros de configuración del transceiver, es decir que no requeriremos de la lectura de sus registros. Por lo tanto se usó el módulo MSSP del PIC y e

utilización del módulo MSSP es relativamente sencilla y só control de los SFR (Special Function Re

interfaz serial del PIC funcione en modo SPI (ver figura 1.4 En el anexo A de este documento se encuentra el

documentado donde se puede identificar el código correspondiente (primeras instrucciones ejecutadas al encender el PIC) para la configuración del mó

La información correspondiente a las funciones utilizadas y a los valores grabados en los registros de configuración del CC1000 puede ser c

“Comunicación a nivel de enlace de datos con unidades de radiofrecuencia” datos del fabricante.

A pesar de que el código ensamblador se redujo al utilizar e PIC, al final el tamaño del código resultante tan só

aproximadamente 3K; el tamaño del código se debe a la gran cantidad de constantes definidas (direcciones y datos) con los valores

configuración. El problema radicó

protocolo cross-layer era de 6K y al agregar el código para la configuración del CC1000, la memoria programa del PIC resu

Figura 2.1 Propuesta

La idea en un principio era

conjuntar los códigos del protocolo c

para que sólo un PIC se encargara del control del nodo (con control de la comunicación con otros nodos).

probable, pues además faltaba agregar el código encargado de la transmisión y recepción de los datos inalámbricamente ya que en ésta

por bit (ver apartado 1.2.3 Interfaz de Datos)

PROYECTO DE INGENIERÍA ELECTRÓNICA II

en el mismo proyecto, también se hizo la interfaz SPI por software, además de que de microcontrolador ocupado (PIC16F84) no tenía módulo MSSP.

s de este proyecto, lo único que se necesita es la escritura de los registros de ceiver, es decir que no requeriremos de la lectura de sus registros. Por

MSSP del PIC y el código ensamblador disminuyo de tamaño P es relativamente sencilla y sólo requiere de configurar los b

Function Registers) que configuran el módulo MSSP funcione en modo SPI (ver figura 1.4).

anexo A de este documento se encuentra el código en ensamblador

e puede identificar el código correspondiente (primeras instrucciones IC) para la configuración del módulo MSSP en modo SPI del PIC. La información correspondiente a las funciones utilizadas y a los valores grabados en los ros de configuración del CC1000 puede ser consultada en el reporte del proyecto “Comunicación a nivel de enlace de datos con unidades de radiofrecuencia”

A pesar de que el código ensamblador se redujo al utilizar el hardware

año del código resultante tan sólo para la configuración del CC1000 era de l tamaño del código se debe a la gran cantidad de constantes definidas (direcciones y datos) con los valores que se tienen que enviar al tran

onfiguración. El problema radicó en que la memoria programa ocupada por el cód

de 6K y al agregar el código para la configuración del CC1000, la memoria programa del PIC resultó insuficiente.

2.1 Propuesta inicial para la arquitectura de un nodo.

La idea en un principio era tener un nodo con una arquitectura simple (figura 2.1) y tar los códigos del protocolo cross-layer con el de la configuración

PIC se encargara del control del nodo (configuración de los dispositivos y control de la comunicación con otros nodos). Pensar en la optimización del código

probable, pues además faltaba agregar el código encargado de la transmisión y recepción de nalámbricamente ya que en ésta última parte, el envío y recepción de datos es bit por bit (ver apartado 1.2.3 Interfaz de Datos) y el código que se encargaría del manejo del también se hizo la interfaz SPI por software, además de que

dulo MSSP.

s de este proyecto, lo único que se necesita es la escritura de los registros de ceiver, es decir que no requeriremos de la lectura de sus registros. Por disminuyo de tamaño. La lo requiere de configurar los bits de dulo MSSP para que la

código en ensamblador debidamente e puede identificar el código correspondiente (primeras instrucciones dulo MSSP en modo SPI del PIC. La información correspondiente a las funciones utilizadas y a los valores grabados en los en el reporte del proyecto “Comunicación a nivel de enlace de datos con unidades de radiofrecuencia” [1] y en la hoja de

l hardware del módulo MSSP del lo para la configuración del CC1000 era de l tamaño del código se debe a la gran cantidad de constantes que enviar al transceiver para su en que la memoria programa ocupada por el código del de 6K y al agregar el código para la configuración del CC1000, la

un nodo.

tener un nodo con una arquitectura simple (figura 2.1) y configuración del módulo CC1000 figuración de los dispositivos y ptimización del código era poco probable, pues además faltaba agregar el código encargado de la transmisión y recepción de el envío y recepción de datos es bit y el código que se encargaría del manejo del

(23)

sensor (el punto del manejo del sensor es un tema que no se discute en este proyecto). Puesto que la optimización de código no era la solución, se pensó en que el control del nodo se podía dividir (divide y vencerás) en bloques, optando por la idea de tener dos microcontroladores que realizaran conjuntamente el trabajo.

En el capítulo siguiente se describe una propuesta modular que intenta dividir la arquitectura del nodo en dos bloques bien definidos. Cada bloque tendrá funciones muy específicas y facilitará la implementación del nodo.

(24)

24 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Capítulo 3.

Diseño Modular

______________________________________________

3.1 Segmentación del nodo en módulos.

La solución al problema de la sobrecarga de código ensamblador en un sólo PIC, fue dividir las funciones de control del nodo. Por una parte, un PIC contendría el código del protocolo cross-layer, y otro PIC que se encargaría del control y configuración del CC1000. Con esta solución el problema se simplificó de manera sustancial. Primero se estableció que los dos microcontroladores se comunicarían por medio de la USART, de modo que la comunicación entre ambos PIC’s estaba resuelta, además puesto que la USART es el medio de comunicación original del protocolo cross-layer, éste no sufriría severas modificaciones. La velocidad de transmisión se eligió a 9600 bps por ser uno de los valores estándar más comunes.

Por otro lado la configuración y control del CC1000 se aisló del protocolo cross-layer, permitiendo ver al nodo como dos módulos o capas bien definidas trabajando conjuntamente. Por una parte el PIC que contiene el protocolo cross-layer (de ahora en adelante “PIC de protocolo”) se puede ver como un módulo que provee al nodo las funciones de una capa MAC y de encaminamiento y al PIC que contiene el código para el control y configuración del transceiver (de ahora en adelante “PIC de control”) junto con el CC1000PP-868 como un módulo que ofrece al nodo las funciones de una capa física; tal como se hace en modelos de comunicación más robustos como TCP o el modelo OSI.

3.2 Objetivos del diseño modular.

El objetivo que se persigue con el diseño modular que se plantea, es que el PIC de protocolo se encargue únicamente de los mecanismos MAC y de control de acceso al medio sin tener que ocuparse del modo en que se vayan a transmitir o recibir los datos entre los nodos de la red. La comunicación entre el módulo de enlace de datos (PIC de protocolo) y el módulo de la capa física (en este caso el PIC de control) se hará a través de la USART (ver apartado 1.1.3). El PIC de protocolo enviará los datos que desea transmitir al PIC de control y éste último se encargará de enviar dichos datos al canal de comunicación inalámbrico. La modificación que se tiene que hacer al protocolo cross-layer consiste en implementar la forma en que el PIC de protocolo indicará al PIC de control que desea enviar o recibir datos del canal de comunicación inalámbrico, es decir que requiere de los servicios de la capa física.

(25)

En cuanto al módulo de la capa física, el PIC de control será el encargado de configurar y controlar el envío y recepció

codificación Manchester y serán

es estar atento a las solicitudes del PIC de protocolo para configurar al transceiver como transmisor o receptor y en conjunto brindar

inalámbricamente con otros nodos.

La figura 3.1 muestra un esquema general de la

se aprecian claramente las funciones de cada microcontrolador y la entre los dispositivos que forman el nodo.

técnica del capítulo uno, de manera que la comprensión d

Figura 3.1

3.3 Módulo de enlace de datos

Al hacer un diseño modular

modificaciones. En primera instancia es el mismo modelo de microcontrolador (PIC16F877) y sólo es necesario definir y agregar

control indicando el modo de operación (transmisor, rec Una de las funciones principales de

acceso ordenado y eficiente al canal de c (colisiones) entre transmisiones;

períodos de actividad o ranuras de tiempo [2]

actividad permite disminuir el tráfico de la red y también el ahorro de energía, característica fundamental de las WSN.

dulo de la capa física, el PIC de control será el encargado de configurar y controlar el envío y recepción de datos a través del CC1000PP-868. Los

serán modulados en FSK. La función principal del PIC de control es estar atento a las solicitudes del PIC de protocolo para configurar al transceiver como eptor y en conjunto brindar al nodo la capacidad de comunicarse inalámbricamente con otros nodos.

muestra un esquema general de la nueva arquitectura del nodo. En dicha figura se aprecian claramente las funciones de cada microcontrolador y la forma de comunicación entre los dispositivos que forman el nodo. Se recomienda dar una revisión a l

de manera que la comprensión de la siguiente figura

3.1 Esquema general del funcionamiento un nodo.

dulo de enlace de datos.

l hacer un diseño modular del nodo, el protocolo cross-layer s

n primera instancia es el mismo modelo de microcontrolador (PIC16F877) y agregar al código las terminales que funcionará

control indicando el modo de operación (transmisor, receptor o bajo consumo).

Una de las funciones principales del protocolo cross-layer es proporcionar a cada nodo un acceso ordenado y eficiente al canal de comunicación reduciendo al mínimo las interferencias

colisiones) entre transmisiones; de modo que la forma más eficiente es que funcione o ranuras de tiempo [2]. Un funcionamiento en base a

inuir el tráfico de la red y también el ahorro de energía, característica dulo de la capa física, el PIC de control será el encargado de configurar y 868. Los datos usarán una dos en FSK. La función principal del PIC de control es estar atento a las solicitudes del PIC de protocolo para configurar al transceiver como la capacidad de comunicarse

arquitectura del nodo. En dicha figura forma de comunicación Se recomienda dar una revisión a la documentación

e la siguiente figura sea evidente.

o un nodo.

layer sufrirá muy pocas n primera instancia es el mismo modelo de microcontrolador (PIC16F877) y terminales que funcionarán como bits de

ptor o bajo consumo).

es proporcionar a cada nodo un al mínimo las interferencias de modo que la forma más eficiente es que funcione en base a Un funcionamiento en base a períodos de inuir el tráfico de la red y también el ahorro de energía, característica

(26)

26 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Dicho lo anterior el protocolo cross-layer tendrá períodos de inactividad y períodos en los que transmite o recibe datos del la red, es por eso que el PIC de protocolo debe avisar al PIC de control de dicha situación. Durante el período de inactividad lo más razonable es que el transceiver permanezca en un estado de bajo consumo de energía y que sólo permanezca en modo activo (transmisión o recepción) cuando se requiera.

3.4 Módulo de comunicación inalámbrica (capa física)

El módulo de comunicación inalámbrica formado por el PIC de control y el CC1000PP-868 es la parte medular de este proyecto. El código ensamblador para el PIC de control se divide en dos partes fundamentales:

 Una rutina (función control) para atender las líneas de control (figura 3.1) que indican el modo de operación del transceiver. Después de identificar un cambio en el modo de operación del nodo, la función control ejecuta las instrucciones correspondientes para configurar el nuevo modo sin perturbar la estabilidad del transceiver.

 Una segunda (función ISR) para atender las interrupciones generadas por la USART y por la señal de reloj del transceiver. Si el nodo se encuentra transmitiendo datos al canal inalámbrico, las interrupciones serán originadas por la recepción de un byte por parte de la USART (del PIC de protocolo) o por el transceiver (flanco de subida de la señal de reloj) indicando que está listo para la transmisión de un nuevo bit. Si el nodo se encuentra recibiendo datos del canal inalámbrico, las interrupciones serán originadas por la transmisión de un byte por parte de la USART (al PIC de protocolo) o por el transceiver (flanco de subida de la señal de reloj) indicando que ha recibido un nuevo bit del canal de comunicación inalámbrico.

Los detalles del código en ensamblador para estas funciones y en general para todo el programa se puede consultar en el anexo A al final de este documento. Ya ha quedado listo el diseño del nodo en base a dos bloques o módulos (figura 3.1), ahora lo que resta es la implementación de las funciones en el código y las conexiones de los dispositivos que hagan funcionar al nodo conforme a lo planeado.

(27)

Capítulo 4.

Implementación.

______________________________________________

4.1 Buffers circulares

Un buffer circular es un TDA (Tipo de Dato Abstracto) que funciona como y con un mecanismo muy dinámico para la e

Out). La implementación de buffers circulares, uno de recepción y otro de transmisión en el PIC de protocolo, es una solución que permite un flujo simultáneo de datos del PIC de protocolo al PIC de control y de éste al canal de comunicación inalámbrico

encuentra transmitiendo datos.

datos también es simultaneo pero en sentido contrario.

lectura y otro de escritura, de modo que los datos que son almacenados n sobrescritos cuando el buffer se encuentra lleno.

Los buffers circulares fueron implementados usando los registros de propósito general (memoria RAM) del PIC16F877 y en específico

localidades asignadas al buffer de transmisión

mientras que para el buffer de recepción de la 0xB0 a la 0xEF (64 registros). La figura muestra una abstracción grafica

Fig

Como más adelante se detallará, e

velocidad a la que se pueden procesar los datos que se transmiten

comparación con los datos que se reciben, esto se debe a que cuando se reciben

ejecuta un mayor número de instrucciones para validar el formato de las tramas recibidas y obtener de ellas sólo los datos que son de interés, mientras que cuando se transmite, no se lleva a cabo ninguna validación y lo único que se hace es dar

Implementación.

___________________________________________

Un buffer circular es un TDA (Tipo de Dato Abstracto) que funciona como

muy dinámico para la entrada y salida de datos (FIFO:

mplementación de buffers circulares, uno de recepción y otro de transmisión en el PIC de protocolo, es una solución que permite un flujo simultáneo de datos del PIC de protocolo al PIC de control y de éste al canal de comunicación inalámbrico

encuentra transmitiendo datos. Cuando el nodo se encuentra recibiendo datos

datos también es simultaneo pero en sentido contrario. Cada buffer tiene un apuntador de lectura y otro de escritura, de modo que los datos que son almacenados n

sobrescritos cuando el buffer se encuentra lleno.

Los buffers circulares fueron implementados usando los registros de propósito general (memoria RAM) del PIC16F877 y en específico los registros del banco 1 (figura 1.1

das al buffer de transmisión van de la 0xA0 a la 0xAF (16 registros), mientras que para el buffer de recepción de la 0xB0 a la 0xEF (64 registros). La figura

grafica de dichos buffers.

Figura 4.1 Implementación de buffers circulares.

Como más adelante se detallará, el tamaño de los buffers responde básicamente a que la velocidad a la que se pueden procesar los datos que se transmiten

comparación con los datos que se reciben, esto se debe a que cuando se reciben

ejecuta un mayor número de instrucciones para validar el formato de las tramas recibidas y obtener de ellas sólo los datos que son de interés, mientras que cuando se transmite, no se lleva a cabo ninguna validación y lo único que se hace es dar formato a las tramas de salida.

___________________________________________

Un buffer circular es un TDA (Tipo de Dato Abstracto) que funciona como una lista circular

ntrada y salida de datos (FIFO: First In First mplementación de buffers circulares, uno de recepción y otro de transmisión en el PIC de protocolo, es una solución que permite un flujo simultáneo de datos del PIC de protocolo al PIC de control y de éste al canal de comunicación inalámbrico, cuando el nodo se Cuando el nodo se encuentra recibiendo datos, el flujo de Cada buffer tiene un apuntador de lectura y otro de escritura, de modo que los datos que son almacenados no puedan ser

Los buffers circulares fueron implementados usando los registros de propósito general el banco 1 (figura 1.1). Las van de la 0xA0 a la 0xAF (16 registros), mientras que para el buffer de recepción de la 0xB0 a la 0xEF (64 registros). La figura 4.1

responde básicamente a que la velocidad a la que se pueden procesar los datos que se transmiten es mas rápida en comparación con los datos que se reciben, esto se debe a que cuando se reciben datos, se ejecuta un mayor número de instrucciones para validar el formato de las tramas recibidas y obtener de ellas sólo los datos que son de interés, mientras que cuando se transmite, no se formato a las tramas de salida.

(28)

28 PROYECTO DE INGENIERÍA ELECTRÓNICA II

Es por eso que el tamaño del buffer de transmisión es muy poco probable que se desborde aun cuando tiene un tamaño mas pequeño en comparación con el buffer de recepción, si embargo el tamaño de ambos puede ser el mismo. El tamaño del buffer de recepción debe ser elegido de acuerdo a los recursos de memoria que se tengan y a la velocidad tanto del sistema (instrucciones ejecutadas por unidad de tiempo) como de la transmisión inalámbrica.

Las funciones implementadas en código ensamblador para el manejo de los buffers son INSERTA_TX y OBTIENE_TX para el buffer de transmisión e INSERTA_RX y OBTIENE_RX para el buffer de recepción. Ambas funciones son muy similares, pues como su nombre lo indica, son las encargadas de insertar datos al buffer así como de obtenerlos. La función INSERTA_TX es llamada cuando se ha recibido un dato (por la USART) del PIC de protocolo y se debe insertar en el buffer de transmisión. La función INSERTA_TX primero verifica que el buffer de transmisión no esté lleno (registro de banderas) y de ser así, inserta el dato en la localidad de memoria apuntada por el apuntador de escritura. Por otro lado la función OBTIENE_TX es llamada por la función ISR al iniciar el envío de una nueva trama de datos por parte del CC1000. La función OBTIENE_TX primero verifica que el buffer no esté vacío y de ser así, transfiere el dato de la localidad de memoria señalada por el apuntador de lectura a un registro auxiliar (ENVIAR).

Las funciones INSERTA_RX y OBTIENE_RX realizan funciones similares a las descritas anteriormente, la diferencia únicamente radica en que ahora la función INSERTA_RX inserta un dato recibido del CC1000, mientras que la función OBTIENE_RX transfiere los datos del buffer de recepción al registro TXREG de la USART del PIC de control. En general las funciones para la entrada y salida de datos de ambos buffers son muy parecidas, lo que cambia son los valores de sus respectivas variables debido a la zona de memoria en donde se implementó cada buffer.

En cuanto a los apuntadores de lectura y escritura el mecanismo es sencillo, si el buffer está vacío, ambos apuntadores están en la misma localidad de memoria, conforme se introducen datos al buffer el apuntador de escritura se va incrementando de modo que siempre apunta a la primera localidad de escritura disponible. El buffer se considera lleno cuando no existen localidades de memoria vacías que separen ambos apuntadores. Cuando el buffer contiene datos, el apuntador de lectura siempre “va detrás” del apuntador de escritura, la única manera de que sean iguales es que el buffer esté vacío. El otro ajuste importante en los apuntadores es no dejarlos salir del espacio de memoria donde está definido cada buffer, las rutinas AJUSTA_POINTER_TX y AJUSTA_POINTER_RX cumplen con esa función permitiendo que los buffers se puedan comportar como una lista circular.

4.2 Registro de Banderas

El registro de banderas en un registro de propósito general, habilitado y nombrado así porque sus bits funcionan como banderas de control. El registro de banderas fue implementado con la finalidad de hacer más sencillo el monitoreo de las variables que definen el estado y funcionamiento del PIC de control. Básicamente la información que podemos encontrar en el registro de banderas es el estado (vacío o lleno) de los buffers y el modo de operación del

(29)

transceiver (transmisión, recepción y bajo consumo). El bit que representa cad tiene un valor de “0” para falso y un “1” para cierto.

muestra el registro de banderas y

En el caso de las banderas que vez. Es por eso que cuando la

en las líneas de control (figura 3.1) y antes de proceder a hacer un cambio en el modo de operación del transceiver, primero verifica el estado de opera

banderas). Si el modo de operació control regresa al comienzo de la misma.

La verificación del modo de operación en las líneas de control e está ejecutando en el PIC de control y só

Otro caso en el que se da uso del registro de banderas es en la función encargada de atender las interrupciones del PIC de control (

la transmisión de una nueva trama de datos, la función dato del buffer de transmisión al registro auxiliar “ buffer de transmisión este vací

bandera de buffer de transmisión va de la trama.

Como se puede ver, el uso del registro de banderas simplifica mucho los procedimientos (en el código ensamblador) que realiza el PIC de control, ya que es preferible verific

sólo bit que la verificación de operaciones).

4.3 Funcionamiento del nodo

El funcionamiento del nodo sigue un mecanismo relativamente sencillo. Como primer ejemplo supongamos que en un primer momento el nodo transmitirá datos a la red. El PIC de protocolo indica el modo de operación del transceiver por medio de las líneas de control y posteriormente el PIC de control configura el CC1000 en modo transmisor. Cuando se ha configurado el transceiver, el PIC de control pone a “1

protocolo, señal con la que se da inicio al flujo de datos que serán transmitidos inalámbrico.

ceiver (transmisión, recepción y bajo consumo). El bit que representa cad para falso y un “1” para cierto. En la figura siguiente (figura 4.2 stro de banderas y las variables de control asociadas a cada uno de sus bits

Figura 4.2 Registro de banderas.

En el caso de las banderas que indican el modo de operación, sólo puede estar activa una a la vez. Es por eso que cuando la función control (ver apartado 3.4) después de verificar el valor en las líneas de control (figura 3.1) y antes de proceder a hacer un cambio en el modo de operación del transceiver, primero verifica el estado de operación actual (

do de operación ya está activo, no se hace ningún cambio y la función control regresa al comienzo de la misma.

La verificación del modo de operación en las líneas de control es una rutina que siempre se utando en el PIC de control y sólo se ve interrumpida por la función ISR.

Otro caso en el que se da uso del registro de banderas es en la función encargada de atender las interrupciones del PIC de control (función ISR). Por ejemplo cuando se dará comienzo a la transmisión de una nueva trama de datos, la función ISR es la encargada de transferir un dato del buffer de transmisión al registro auxiliar “ENVIAR”. Se puede dar el caso

buffer de transmisión este vacío, de modo que lo primero que prueba la

transmisión vacío antes de comenzar con la transmisión del primer bit

Como se puede ver, el uso del registro de banderas simplifica mucho los procedimientos (en el código ensamblador) que realiza el PIC de control, ya que es preferible verific

la verificación de registros completos (normalmente se requiere de mucho mas

del nodo y flujo de datos.

El funcionamiento del nodo sigue un mecanismo relativamente sencillo. Como primer ejemplo que en un primer momento el nodo transmitirá datos a la red. El PIC de protocolo indica el modo de operación del transceiver por medio de las líneas de control y posteriormente el PIC de control configura el CC1000 en modo transmisor. Cuando se ha transceiver, el PIC de control pone a “1” la línea de control que va al PIC de protocolo, señal con la que se da inicio al flujo de datos que serán transmitidos

ceiver (transmisión, recepción y bajo consumo). El bit que representa cada bandera ura siguiente (figura 4.2) se

a cada uno de sus bits.

lo puede estar activa una a la después de verificar el valor en las líneas de control (figura 3.1) y antes de proceder a hacer un cambio en el modo de ción actual (registro de activo, no se hace ningún cambio y la función

s una rutina que siempre se función ISR.

Otro caso en el que se da uso del registro de banderas es en la función encargada de atender ). Por ejemplo cuando se dará comienzo a ISR es la encargada de transferir un ”. Se puede dar el caso de que el o, de modo que lo primero que prueba la función ISR es la comenzar con la transmisión del primer bit

Como se puede ver, el uso del registro de banderas simplifica mucho los procedimientos (en el código ensamblador) que realiza el PIC de control, ya que es preferible verificar el valor de un registros completos (normalmente se requiere de mucho mas

El funcionamiento del nodo sigue un mecanismo relativamente sencillo. Como primer ejemplo que en un primer momento el nodo transmitirá datos a la red. El PIC de protocolo indica el modo de operación del transceiver por medio de las líneas de control y posteriormente el PIC de control configura el CC1000 en modo transmisor. Cuando se ha ” la línea de control que va al PIC de protocolo, señal con la que se da inicio al flujo de datos que serán transmitidos hacia el canal

(30)

30 PROYECTO DE INGENIERÍA ELECTRÓNICA II Los datos (registros de 8 bits) que desea enviar el protocol

UART al PIC de control, éste los recibe y los almacena en simultánea y cuando hay por lo menos un dato a

dato localizado al frente del buffer es t

el cual es enviado bit por bit al canal de comunicación inalámbrico a través del CC1000. La señal de reloj generada por el CC1000 es la pauta para la transmisión de cada bit de información en esta última etapa del hardware del nodo. Cuando el nodo está recibiendo datos (transceiver en modo receptor) el mecanismo es exactamente el inverso

buffer de recepción y un registro auxiliar llamado “ de manera clara el flujo de datos

Fig

4.4 Función Control

El código del programa en el PIC de control, comienza con instrucciones que configuran todos los periféricos que se usará para su interacción con los dispositivos que forman el nodo. periféricos a usar por el PIC de control son la USART, el mó

puertos B, C y D de I/O, este último el funcionamiento del PIC de control Inicialmente la función contro

binario leído configura el CC1000 llamando a las funciones MODO_TX, MODO_RX y MODO_PD. Los nombres de las funciones anteriores hacen evidente el modo de operación del transceiver, éstas ocupan la interfaz de configuración (bus SPI) para enviar los parámetros de configuración al CC1000. Los parámetros de configuración son valores constantes que se definen en tablas al inicio del programa, dichos valores configuran al CC1000 para trabajar en

PROYECTO DE INGENIERÍA ELECTRÓNICA II

Los datos (registros de 8 bits) que desea enviar el protocolo cross-layer son enviados por la UART al PIC de control, éste los recibe y los almacena en el buffer de transmisión

simultánea y cuando hay por lo menos un dato almacenado en el buffer dato localizado al frente del buffer es transferido a un registro auxiliar

bit al canal de comunicación inalámbrico a través del CC1000. La señal de reloj generada por el CC1000 es la pauta para la transmisión de cada bit de

a etapa del hardware del nodo. Cuando el nodo está recibiendo datos (transceiver en modo receptor) el mecanismo es exactamente el inverso

y un registro auxiliar llamado “RECIBIR”. En la figura 4 ara el flujo de datos que se da en el PIC de control.

Figura 4.3 Flujo de datos en el PIC de control.

El código del programa en el PIC de control, comienza con instrucciones que configuran todos los periféricos que se usará para su interacción con los dispositivos que forman el nodo.

C de control son la USART, el módulo MSSP en modo SPI y los puertos B, C y D de I/O, este último sólo para desplegar el registro de banderas y monitorear

del PIC de control.

función control verifica el valor en las líneas de control y de

configura el CC1000 llamando a las funciones MODO_TX, MODO_RX y MODO_PD. Los nombres de las funciones anteriores hacen evidente el modo de operación del upan la interfaz de configuración (bus SPI) para enviar los parámetros de configuración al CC1000. Los parámetros de configuración son valores constantes que se definen en tablas al inicio del programa, dichos valores configuran al CC1000 para trabajar en

layer son enviados por la de transmisión. De forma lmacenado en el buffer de transmisión, el llamado “ENVIAR”, bit al canal de comunicación inalámbrico a través del CC1000. La señal de reloj generada por el CC1000 es la pauta para la transmisión de cada bit de

a etapa del hardware del nodo. Cuando el nodo está recibiendo datos (transceiver en modo receptor) el mecanismo es exactamente el inverso pero con el . En la figura 4.3 se ejemplifica

El código del programa en el PIC de control, comienza con instrucciones que configuran todos los periféricos que se usará para su interacción con los dispositivos que forman el nodo. Los dulo MSSP en modo SPI y los desplegar el registro de banderas y monitorear

las líneas de control y de acuerdo al valor configura el CC1000 llamando a las funciones MODO_TX, MODO_RX y MODO_PD. Los nombres de las funciones anteriores hacen evidente el modo de operación del upan la interfaz de configuración (bus SPI) para enviar los parámetros de configuración al CC1000. Los parámetros de configuración son valores constantes que se definen en tablas al inicio del programa, dichos valores configuran al CC1000 para trabajar en

(31)

una frecuencia 868.297200 MHz ya sea como transmisor o receptor. La función control consiste en un ciclo infinito en donde se prueba el valor de los bits de control y únicamente sale de este ciclo infinito cuando hay un cambio en el modo de operación del transceiver. La convención para indicar el modo de operación del transceiver se hizo mediante dos bits de control (líneas de control). En la siguiente figura se muestran los valores binarios de las líneas de control correspondiente a los tres modos de operación del CC1000.

Modo de operación Líneas de control

Transmisión (modo TX) 0 0

Recepción (modo RX) 0 1

Bajo consumo (modo PD) 1 0

1 1

Figura 4.4 Control del modo de operación del CC1000

La lógica de la función control se basa en el siguiente algoritmo para cambiar el modo de operación del transceiver:

 Verificación del modo de operación en que se encuentra el PIC de control: PD, TX o RX.

 Si se encuentra en el modo TX, y los bits de control indican un cambio al modo PD, el cambio se realiza inmediatamente llamando a la función TURNOFF_TX. Si el cambio es al modo RX primero se desactiva el modo TX (función TURNOFF_TX) y posteriormente se activa el modo RX con la función TURNON_RX.

 Si se encuentra en el modo RX, y los bits de control indican un cambio al modo PD, el cambio se realiza inmediatamente llamando a la función TURNOFF_RX. Si el cambio es al modo TX primero se desactiva el modo RX (función TURNOFF_RX) y posteriormente se activa el modo TX con la función TURNON_TX

 Si se encuentra en el modo PD, el cambio al modo TX o RX es inmediato con las funciones TURNON_TX y TURNON_RX respectivamente.

Para seguir de manera gráfica el funcionamiento de la función control, en la figura 4.5 se muestra su diagrama de flujo. Las funciones internas a las que salta la función control después de la validación de las líneas que indican el modo de operación (MODO_TX, MODO_RX y MODO_PD), primero validan el modo de operación actual del transceiver por medio del registro de banderas (ver apartado 4.1), el propósito del registro de banderas es no permitir la misma configuración dos veces (cambio de modo TX a TX por ejemplo) y que no se vea afectado el rendimiento del transceiver reflejándose en la perdida de datos.

Referencias

Documento similar

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

Consejería de Agricultura, Medio Ambiente y Desarrollo Rural

En nuestra opinión, las cuentas anuales de la Entidad Pública Empresarial Red.es correspondientes al ejercicio 2010 representan en todos los aspectos significativos la imagen fiel

En nuestra opinión, las cuentas anuales de la Entidad Pública Empresarial Red.es correspondientes al ejercicio 2012 representan en todos los aspectos

La Intervención General de la Administración del Estado, a través de la Oficina Nacional de Auditoría, en uso de las competencias que le atribuye el artículo 168

La Intervención General de la Administración del Estado, a través de la Oficina Nacional de Auditoría, en uso de las competencias que le atribuye el artículo

D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa