• No se han encontrado resultados

Implementación de interfaz I 2 C con microcontroladores PIC para sensores

N/A
N/A
Protected

Academic year: 2021

Share "Implementación de interfaz I 2 C con microcontroladores PIC para sensores"

Copied!
73
0
0

Texto completo

(1)

Implementación de interfaz I

2

C con

microcontroladores PIC para sensores

TITULACIÓN:

Ingeniería Técnica en Telecomunicaciones. Especialidad Telemática.

AUTOR: Yul Silva Rodríguez.

DIRECTOR: David Girbau.

PONENTE: Ángel Ramos.

(2)

“Como no tenemos nada más precioso que el tiempo, no hay mayor generosidad que perderlo sin tenerlo en cuenta”

(3)

ÍNDICE

1. INTRODUCCIÓN... 2

1.1.WSN Y SMART CITIES ... 2

1.1.1. Sensores inalámbricos ... 2

1.1.2. Redes de sensores inalámbricos (WSN) convencionales: Zigbee ... 3

1.1.3. Smart Cities... 4

1.2.SENSORES INALÁMBRICOS UWB ... 5

1.2.1. UWB, Definición y características ... 5

1.2.2. Sistema RFID pasivo UWB conmutado con códigos de tiempo ... 6

1.3.INTEGRACIÓN DE EEPROM Y SENSORES CON EL BUS I2C ... 7

1.4.OBJETIVOS DEL PROYECTO ... 7

1.5.ORGANIZACIÓN DE LA MEMORIA ... 8

1.6.REFERENCIAS ... 8

2. BUS I2C IMPLEMENTADO CON PIC ... 11

2.1.PROTOCOLO I2C ... 11 2.1.1. Start Condition ... 12 2.1.2. Stop Condition ... 12 2.1.3. Restart condition ... 12 2.1.4. ACK Condition. ... 13 2.1.5. Transferencia de datos ... 13

2.2.BUS I2C IMPLEMENTADO CON PIC16F1827 ... 14

2.3.REGISTROS PARA LAS OPERACIONES CON I2C. ... 15

2.3.1. SSPxSTAT, Registro de Estado (Habilitado para I2C) ... 15

2.3.2. SSPxCON1, Registro de Control SSP1 ... 15

2.3.3. SSPxCON2, Registro de Control SSP2 ... 16

2.3.4. SSPxADD Registro de Velocidad de Transmisión y Dirección. ... 17

2.4.REFERENCIAS. ... 18

3. APLICACIÓN PARA ESCRITURA DE EEPROM EXTERNA CON I2C. ... 20

3.1. PLACA PERSONALIZADA. ... 20

3.2.EEPROM24LC256. ... 23

3.2.1. Configuración inicial de la memoria. ... 24

3.2.2. Operación de escritura. ... 25

3.2.3. Operación de lectura. ... 25

3.3.IMPLEMENTACIÓN DEL PROGRAMA. ... 26

3.3.1. Función INIT. ... 27 3.3.2. Función BSTART. ... 28 3.3.3. Función BRESTART. ... 29 3.3.4. Función BSTOP. ... 29 3.3.5. Función TX. ... 30 3.3.6. Función RX. ... 31 3.3.7. Función POLL. ... 31 3.3.8. Función ADD_MANNAGER. ... 32 3.3.9. Función BYTEWRITE. ... 33 3.3.10. Función BYTEREAD. ... 34

3.3.11. Ejemplo de escritura y lectura... 35

(4)

4.1.1. Descripción del dispositivo... 38

4.1.2. Aplicaciones del dispositivo. ... 38

4.1.3. Funciones principales. ... 39

4.1.4. Conexión de los pines para el dispositivo MMA8453Q ... 40

4.2.CONFIGURACIÓN DEL DISPOSITIVO MMA8453Q ... 41

4.2.1. Registro de control ... 41

4.2.2. Registro de configuración vertical/horizontal (0x11) ... 42

4.2.3. Registro de estado Vertical/Horizontal (0x10) ... 43

4.2.4. Registros de datos ... 44

4.3.IMPLEMENTACIÓN DE FUNCIONES DE LECTURA Y ESCRITURA EN EL DISPOSITIVO ... 45

4.3.1. Función WRITE_ACCEL ... 45

4.3.2. Función READ_ACCEL ... 46

4.4.IMPLEMENTACIÓN Y PRUEBA DE APLICACIÓN CON EL DISPOSITIVO MMA8453Q ... 48

4.3.1. Implementación de lectura de la posición Vertical/Horizontal del dispositivo ... 49

4.3.2. Prueba de funcionamiento PL_STATUS ... 49

4.3.3. Implementación de lectura del valor de los ejes X, Y y Z del dispositivo ... 52

4.3.4. Prueba de funcionamiento DATA REGISTERS... 54

4.4.REFERENCIAS ... 55

5. CONCLUSIONES Y LÍNEAS FUTURAS ... 58

6. APÉNDICE ... 60

(5)

Capítulo I. Introducción

1

CAPITULO I

Introducción

(6)

2

1. Introducción

En la actualidad, el uso de sensores inalámbricos para la monitorización de diferentes parámetros se ha extendido de forma considerable. Una de las posibles aplicaciones consiste en las ciudades inteligentes (“Smart cities”). Éstas permitirían aumentar la

eficiencia energética de una ciudad, monitorizando parámetros tan sencillos y cotidianos como pueden ser la temperatura, la presión atmosférica, la humedad, si hay movimiento o no en una determinada zona, etc. El estudio de estos parámetros puede mejorar la eficiencia global de la ciudad y desembocar en que la misma se convierta en un entorno medioambientalmente responsable. Otra aplicación del uso de sensores inalámbricos es la monitorización y seguimiento de productos. Existen productos que requieren estar en un margen de temperaturas, productos que no pueden sufrir golpes durante su transporte, y otros que no pueden estar en ambientes con demasiada humedad.

1.1. WSN y Smart Cities

En esta sección se expondrán diferentes conceptos necesarios para introducir el tema de sensores inalámbricos. Se describirán las características y el funcionamiento de las redes de sensores inalámbricos (WSN, wireless sensor networtks). Finalmente, como aplicación práctica, se explicará el concepto de smart cities.

1.1.1. Sensores inalámbricos

Un sensor es un dispositivo que produce un registro cuantitativo en respuesta a cambios físicos o químicos en las condiciones de un sistema. Un sensor puede medir diferentes parámetros, como por ejemplo: presión, temperatura, sonido, vibraciones, movimiento, aceleración y tensión dinámica, humedad, etc [1]

En la Figura 1.1 se puede observar un mapa conceptual en el que se indican las principales características de los sensores.

SENSORES

FUNCIONAMIENTO SEÑAL ELÉCTRICA QUE GENERAN RANGO DE VALORES QUE PROPORCIONAN NIVEL DE INTEGRACIÓN TIPO DE VARIABLE FÍSICA ACTIVO PASIVO

ANALÓGICO DIGITAL TEMPORAL

DE MEDIA ON - OFF

DISCRETOS INTEGRADOS INTELIGENTES

(7)

Capítulo I. Introducción

3

Los sensores inalámbricos (wireless sensors, WS) son dispositivos que básicamente están compuestos de cuatro elementos:

 Procesamiento y memoria para procesar los datos recogidos.

 Unidad de comunicación para transmitir y recibir datos usando alguna técnica de modulación e interfaz aire.

 Sensor que registra una variable física y la convierte en un dato que entrega al microcontrolador, que posteriormente enviará.

 Batería que alimenta los diferentes componentes del nodo sensor.

En la Figura 1.2 se puede observar la distribución de los elementos de un sensor inalámbrico.

Figura 1.2. Elementos en un sensor inalámbrico

Las principales ventajas que presentan este tipo de dispositivos son: el tiempo de vida, la cobertura, los costes y la facilidad de instalación, el tiempo de respuesta, el bajo consumo de potencia, la precisión y frecuencia de las mediciones y la seguridad. Por otro lado, entre las principales desventajas se puede destacar la capacidad de cómputo, limitaciones en memoria. [2]

1.1.2. Redes de sensores inalámbricos (WSN) convencionales: Zigbee

Una red de sensores inalámbricos es una gran cantidad de pequeños dispositivos autónomos, distribuidos físicamente a los cuales se les llama “nodos de sensores”, que se instalan alrededor de un fenómeno para monitorizarlo. Presentan una capacidad de almacenamiento y de comunicar datos en una red de forma inalámbrica.

Es importante mencionar que este tipo de redes están pensadas para la integración con otras tecnologías, como por ejemplo: agricultura, biología, medicina, etc. Además, se utiliza para muchas aplicaciones que hasta hace relativamente poco tiempo eran impensables como la interacción de los seres humanos con el medio (computación ubicua, inteligencia ambiental, etc.). [3]

Entre las principales características de las WSN se pueden mencionar las siguientes:

(8)

4

 No necesita una infraestructura de red

 Topología dinámica (nodos auto configurables, tolerancia a fallos.).

 Utilización de broadcast.

 Ultra bajo consumo (funcionamiento con pilas, larga autonomía).

 Bajo coste

 Tamaño reducido

 Operación sin necesidad de mantenimiento durante varios meses o incluso años. Las WSN se constituyen en base a los siguientes cinco elementos:

 Sensores: De diferentes tipos y tecnologías los cuales recogen la información del medio y la convierten en señales eléctricas.

 Nodos de sensor: Toman los datos del sensor a través de sus puertas de datos y envían la información a la estación base.

 Gateway: Elementos para la interconexión entre la red de sensores y una red TCP/IP.

 Estación base: Recolector de datos.

 Red inalámbrica: Típicamente basada en el estándar 802.15.4 ZigBee.

ZigBee es el nombre de la especificación de un conjunto de protocolos de alto nivel de comunicación inalámbrica para su utilización con radiodifusión digital de bajo consumo, basada en el estándar IEEE 802.15.4 [4] de redes inalámbricas de área personal (WPAN). Su objetivo son las aplicaciones que requieren comunicaciones seguras con baja tasa de envío de datos y maximización de la vida útil de las baterías. Por este motivo, la aplicación principal es para la domótica. [5]

1.1.3. Smart Cities

Una smart city es un sistema de gran complejidad o un ecosistema en el que coexisten múltiples procesos íntimamente ligados y que resulta difícil abordar de forma individualizada. [6][7] [8] (ver Figura 1.3).

En la práctica, se entiende que una smart city es una ciudad comprometida con su entorno, con elementos arquitectónicos de vanguardia, y donde las infraestructuras están dotadas de las soluciones tecnológicas más avanzadas para facilitar la interacción del ciudadano con los elementos urbanos. Un planteamiento como el descrito exige a aquellas ciudades que aspiren a ser consideradas como “inteligentes” a mejorar y renovarse constantemente, con el fin de mejorar la calidad de vida en su entorno.

Se puede deducir que el papel de los sensores inalámbricos y las redes de sensores inalámbricos (WSN) es crucial para la implementación de una smart city. La recolección y el análisis de datos de los diferentes sensores dispersados a lo largo de la ciudad es imprescindible para convertir a una ciudad en “inteligente”.

(9)

Capítulo I. Introducción

5

Figura 1.3. Representación de una Smart City

1.2. Sensores inalámbricos UWB

1.2.1. UWB, Definición y características

Cuando se habla de UWB (Ultra Wide Band) se hace referencia a una tecnología de transmisión vía radio basada en la transmisión de pulsos con unos tiempos de subida y bajada extremadamente cortos (entre algunas decenas de picosegundos y pocos nanosegundos), con una energía relativamente baja. [9]

La Comisión Federal de Comunicaciones (FCC) asignó a UWB un espectro de 3.1 a 10.6 GHz en el año 2002. Desde entonces, ha surgido un gran interés en el desarrollo de tecnologías que utilicen UWB debido a las ventajas que ofrece, como por ejemplo el gran ancho de banda de estos sistemas. En la Figura 1.4 se puede comparar el espectro UWB con las señales de banda estrecha.

(10)

6

Las aplicaciones actuales de UWB se basan principalmente en tres campos:

 Comunicaciones inalámbricas de alta velocidad como por ejemplo redes PAN (Personal Area Network) con la interconexión de diferentes dispositivos de uso personal o redes WLAN para conexión a Internet o a otros ordenadores.

 Redes de sensores, en donde a partir de diferentes nodos que extraen información pueden obtenerse datos sobre el entorno donde nos encontramos de cara a por ejemplo localización de objetos en una sala o características físicas sobre un objeto desconocido.

 Sistemas de localización en donde se explota la gran resolución temporal que presentan los sistemas UWB, lo que permite un posicionamiento y una localización muy precisa.

1.2.2. Sistema RFID pasivo UWB conmutado con códigos de tiempo

Actualmente en el grupo se está trabajando en una nueva tipología de sensores de tipo UWB la cual presenta como novedad un sistema de chip híbrido que se activa mediante códigos de tiempo UWB y que presenta un enlace de 2.4 GHz. Básicamente, se añade un chip a una etiqueta de tipo “chipless UWB” con código de tiempo para modular el estado de la señal de tipo UWB que se haya recibido del lector. Esta señal rebotará en la etiqueta, lo que permite responder al lector. El chip que contendrá la etiqueta será un micro controlador comercial.

El sistema se compone de un lector y una o varias etiquetas. Dicho lector interroga a la etiqueta mediante una señal de 2.4 GHz (llamada wake-up), la cual pone en macha el circuito lógico que lleva incorporado. Seguidamente, el lector envía una señal UWB a la etiqueta y esta señal rebota hacia el lector. Esta respuesta que ha rebotado es modulada por la circuitería lógica de la etiqueta de acuerdo con la información que se quiera contestar. En la Figura 1.5 se puede observar un esquema del sistema propuesto.

Figura 1.5. Esquema básico del sistema

En la Figura 1.6 se puede observar una fotografía del diseño de la etiqueta. Se diferencian claramente 3 bloques: El detector que recibirá la señal de wake-up, el UWB Backscatterer que devolverá una señal de respuesta y el microcontrolador que se encargará del procesamiento de datos.

(11)

Capítulo I. Introducción

7

Figura 1.6. Fotografía de la etiqueta

1.3. Integración de EEPROM y sensores con el bus I2C

Una gran cantidad de sensores que se pueden encontrar en el mercado trabajan a través del bus I2C. Como consecuencia, surgen dos necesidades: la de implementar la comunicación vía I2C entre dichos sensores y el microcontrolador de bajo consumo, y la de almacenar las lecturas recogidas por los sensores de forma permanente en una memoria externa. Es importante remarcar que se utilizan microcontroladores Microchip PIC de la serie “eXtreme Low Power” (XLP) porque presentan un bajo consumo de energía, ideal para tags RFID donde la energía está muy limitada.

En la Figura 1.7 se puede observar un esquema básico sobre cómo se tendría que implementar el sistema UWB con la incorporación del trabajo de este proyecto (EEPROM y sensores I2C, en este caso como demostrador es un acelerómetro). Se utiliza el módulo MSSP del micro controlador PIC para establecer la comunicación entre el sistema, el sensor I2C y la memoria EEPROM.

Figura 1.7. Esquema de etiqueta una vez incorporado el bloque EEPROM-SENSOR

1.4. Objetivos del proyecto

El propósito principal de este proyecto es la interconexión, mediante el uso del protocolo I2C, de un microcontrolador de bajo consumo con una memoria EEPROM 24LC256 y con diferentes sensores que trabajen con el bus I2C. Actualmente ya existen dispositivos que realicen este tipo de comunicación mediante el bus I2C pero ninguno orientado al bajo consumo para ser integrado en una etiqueta de RFID.

(12)

8

Una parte fundamental de este proyecto es explicar en detalle el bus I2C, sus principales características y sobre todo su modo de funcionamiento; ya que será la herramienta principal para la interacción de los diferentes dispositivos.

El PIC y la memoria EEPROM también juegan un papel fundamental en la comunicación vía I2C. Por este motivo, entender su funcionamiento y conocer sus principales características es un aspecto esencial para la posterior implementación del bus I2C. Se explicarán en detalle las operaciones de lectura y escritura.

Una vez implementado el bus, la integración de sensores con el bus I2C y el poder realizar medidas con estos sensores conforma la parte final de este proyecto. Concretamente, se utilizará un acelerómetro de Freescale MMA8453Q con el que se realizarán diferentes pruebas de orientación.

1.5. Organización de la memoria

A continuación se describirán los capítulos que conforman el proyecto:

- El Capítulo 1 inicia al lector en las ideas básicas del proyecto. Ofrece una visión global de él, informa acerca de la situación actual en cuanto a sensores inalámbricos y el creciente interés que están despertando las Smart Cities. Además se centra en los sensores UWB (Ultra Wide Band) y finalmente, la integración de memorias EEPROM y sensores I2C en etiquetas RFID.

- El Capítulo 2 se centrará en el bus I2C, expondrá tanto el funcionamiento como los requerimientos del bus. Además, ofrecerá una explicación detallada de cómo implementar el bus I2C con un microcontrolador Microchip PIC16F1827.

- El Capítulo 3 describirá la placa personalizada, explicará el funcionamiento de la memoria EEPROM 24LC256 y expondrá la implementación del programa para leer y escribir datos en la memoria.

- El Capítulo 4 describirá las características, aplicaciones y funciones principales del acelerómetro. Además, expondrá la implementación de las funciones de lectura y escritura en este dispositivo, así como también mostrará las diferentes pruebas realizadas para comprobar que el programa funciona correctamente.

1.6. Referencias

[1] Dr. Mónica Huerta. (2010, Julio). Sensores inalámbricos. Avances y aplicaciones en telemedicina [Online]. Disponible en: http://es.scribd.com/doc/35166626/SENSORES-INALAMBRICOS [2] Francisco Ortiz Tapia. Redes de sensores inalámbricos [Online]. Disponible en:

http://profesores.elo.utfsm.cl/~tarredondo/info/networks/Presentacion_sensores.pdf

[3] Francisco Gómez Mula. (2007, Julio 13). Redes de sensores inalámbricos [Online]. Disponible en: http://atc.ugr.es/~aprieto/TIC_socio_sanitario/A11_4_05_Redes_sensores.pdf

[4] Wikipedia. (2012, Febrero 23). IEEE 802.115.4 [Online]. Disponible en: http://es.wikipedia.org/wiki/IEEE_802.15.4

[5] Wikipedia. (2012, Mayo 18). ZigBee [Online]. Disponible en: http://es.wikipedia.org/wiki/ZigBee [6] IBM. The Smarter City [Online]. Disponible en: http://www.ibm.com/thesmartercity

[7] Profesor William F. Mitchell. Smart Cities: Vision [Online]. Disponible en: http://cities.media.mit.edu

(13)

Capítulo I. Introducción

9

[8] Wikipedia. (2012, Mayo 22). Smart City [Online]. Disponible en: http://en.wikipedia.org/wiki/Smart_city

[9] Andrés Martínez García (2010, Julio). Estudio de canal para sistemas UWB [Online]. Disponible en: http://upcommons.upc.edu/pfc/bitstream/2099.1/13288/2/PFC.pdf

(14)

10

CAPITULO II

Bus I

2

C implementado con PIC

(15)

Capítulo II. Bus I2C implementado con PIC

11

2. Bus I

2

C implementado con PIC

2.1. Protocolo I2C

El bus I2C (Inter-Integrated Circuit) es un sistema de comunicación en serie, cuyo ámbito de aplicación es la comunicación entre circuitos integrados. Fue desarrollado por Philips a mediados de los años 80, presentaba una velocidad de transmisión baja (100 kHz) y se creó con la finalidad de conectar varios chips de Philips a través de un bus interno simple. Posteriormente, en 1992, se presentó la primera versión estandarizada (Version 1.0) que aumentaba la velocidad a 400 KHz, presentaba un modo de direccionamiento de 10 bits e incrementaba la capacidad a 1008 nodos. [1]

Antes de la aparición del bus I2C, las transferencias de datos entre una memoria y un microprocesador se realizaban de forma paralela y requerían encapsulados en los cuales se necesitaban entre 24 y 28 pines. En contraste con esta gran cantidad de pines, el bus I2C permite la comunicación “chip-to-chip” bidireccional, utilizando solamente dos líneas en una conexión en serie.

I2C es un protocolo síncrono, que permite a un dispositivo MASTER (maestro) iniciar una comunicación con un dispositivo SLAVE (esclavo) a través de dos líneas: SDA (Serial Data) es la encargada del intercambio de datos y SCL (Serial Clock). SDA es la encargada del intercambio de datos y SCL es la encargada de sincronizar al transmisor y al receptor durante la transferencia de datos. La línea SCL habitualmente es controlada por el dispositivo MASTER.

Las dos líneas SCL y SDA están conectadas a la línea de alimentación positiva, a través de resistencias cuya misión es asegurar una mínima carga de la línea, necesaria para que la transmisión sea estable ante posibles ruidos externos. Estas resistencias son llamadas de PULL-UP. Su valor está comprendido entre 1 kΩ y 10 kΩ dependiendo de la tensión de alimentación y de los dispositivos conectados. También tienen la función de permitir que tanto la línea de datos como la de reloj sean bidireccionales, ya que cualquier dispositivo (MASTER o SLAVE) puede forzar a nivel bajo la línea y, por lo tanto, ser leída por otros dispositivos. [2]

La transferencia de datos entre MASTER y SLAVE debe poseer el conexionado de la Figura 2.1.

(16)

12

Las líneas del bus I2C presentan dos posibles estados eléctricos. Estos estados son conocidos como “flanco ascendente” y “flanco descendente”. Cuando la línea de datos y la línea de reloj se encuentran a nivel alto, esto indica que ningún dispositivo está actuando y la línea está en reposo o libre.

El bus I2C envía señales por las líneas SDA y SCL con un formato estandarizado, que son interpretadas como condiciones. Estas condiciones indican cuando una transferencia empieza, para, es reconocida, etc. A continuación se explicarán algunas de estas condiciones. [3]

2.1.1. Start Condition

Se define como una transición de la línea SDA del nivel alto al nivel bajo mientras la línea SCL se mantiene en el nivel alto. La condición de Start es siempre generada por el dispositivo MASTER e indica la transición de bus del estado de reposo a un estado de actividad. Se puede ver en la figura 2.2.

2.1.2. Stop Condition

Se define como una transición de la línea SDA del nivel bajo al nivel bajo mientras la línea SCL se mantiene en el nivel alto. Es generada por el dispositivo que asuma la condición de MASTER dentro del bus. Se puede ver en la figura 2.2.

Figura 2.2. Condiciones de Start y Stop

2.1.3. Restart condition

Esta señal presenta la misma forma que una señal de Start (Figura 2.3.), se puede utilizar en cualquier momento en que una señal de Stop fuera válida. El dispositivo que asuma la condición de MASTER puede emitir un reinicio si desea mantener el bus una vez concluida la transferencia.

(17)

Capítulo II. Bus I2C implementado con PIC

13

Figura 2.3. Condición de Restart

2.1.4. ACK Condition.

Un dispositivo puede enviar una señal de reconocimiento (ACK) despues de la recepción de cada byte emitiendo una transición del nivel alto al nivel bajo de la línea SDA durante el noveno pulso de reloj de la línea SCL. Se puede ver en la figura 2.4.

Figura 2.4. Condición de ACK

2.1.5. Transferencia de datos.

Existen una serie de normas que garantizan que la comunicación entre un MASTER y un SLAVE (o a otro master que trabaje como esclavo) se lleve a cabo de forma correcta. El procedimiento que debe seguir el MASTER para hacerse con el control del bus es inicialmente siempre el mismo.

Primeramente, se envia una señal de START con la finalidad de que todos los demás dispositivos (tanto SLAVES como otros MASTERS) que no la hayan enviado. A partir de aquel momento, actuarán como SLAVES. Seguidamente, se envia la dirección I2C del dispositivo al que se quiere dirigir. La dirección tiene una longitud de 7 bits seguidos de un octavo bit (R/W) que indica si la operación será de lectura o escritura. Esta dirección será única en todo el bus, de manera que todos los demás componentes que no tengan esta dirección se desconectarán.

El dispositivo al cual nos dirigimos enviará al MASTER una señal de reconocimiento (ACK) para notificar que se encuentra a la escucha.

(18)

14

Acto seguido, el MASTER empezará la transmisión de los datos. Se enviarán los primeros 8 bits de datos a transmitir. Una vez recibida la señal de reconocimiento por parte del SLAVE, se vuelven a enviar 8 bits de datos y así sucesivamente hasta que se termine con la información que se desea transmitir.

Llegados a este punto, pueden presentarse dos situaciones: que el MASTER que posee el control de bus acabe con el SLAVE al que se dirigia y seguidamente se dirija a otro SLAVE, o que el MASTER quiera terminar la conexión en el bus.

En el primer caso, una vez enviado el ultimo byte de datos y recibida la ultima señal de reconocimiento (ACK) del SLAVE, se enviará una nueva señal de START seguida de la dirección del nuevo SLAVE siguiendo los pasos explicados anteriormente. Se puede ver en la figura 2.5.

Figura 2.5. Modo de transferencia a varios SLAVES

En el segundo caso, cuando se ha enviado el ultimo byte de datos y se ha recibido la ultima señal de reconocimiento (ACK), el dispositivo que actúa de MASTER enviará una señal de STOP, con lo cual dejará libre el bus. Se puede ver en la figura 2.6.

Figura 2.6. Modo de transferencia

2.2. Bus I2C implementado con PIC16F1827

Se utilizará un microcontrolador PIC16F1827 de Microchip [4] como maestro en el proceso de comunicación I2C debido a que presenta un menor consumo de energía y mayor velocidad (hasta 32 MHz) que un PIC16 normal. El bajo consumo energético es un aspecto primordial de cara a ser integrados en etiquetas de RFID.

El microcontrolador PIC16F1827 utiliza el módulo de puerto serie síncrono MSSP, ya que se trata de una interfaz serie muy utilizada para comunicarse con otros dispositivos periféricos o microcontroladores. Estos dispositivos pueden ser memorias EEPROM, registros de desplazamiento, displays, acelerómetros, drivers, convertidores A/D, etc.

(19)

Capítulo II. Bus I2C implementado con PIC

15 El módulo MSSP puede operar en dos modos:

 Interfaz Periférica Serie (SPI)

 Inter-Circuito Integrado (I2C)

El módulo SSP en modo I2C implementa completamente todas las funciones MASTER y SLAVE y provoca interrupciones en los bits de START y STOP en hardware, para determinar el estado del bus. [4]

2.3. Registros para las operaciones con I2C.

2.3.1. SSPxSTAT, Registro de Estado (Habilitado para I2C)

Este registro nos permite configurar y controlar el estado de diferentes aspectos importantes en una comunicación I2C, por ejemplo: detectar si una señal de START o STOP ha sido transmitida satisfactoriamente, conocer el estado del buffer, saber si una transmisión está en progreso o no, etc. En la Figura 2.7 podemos ver la distribución del registro.

Utilizaremos este registro para configurar la velocidad de respuesta con la que realizaremos la comunicación I2C.

En este caso solo modificaremos el bit de muestra (SMP) que corresponde al séptimo bit del registro. Debe estar configurado para funcionar con una velocidad estándar (100 kHz y 1 MHz), en nuestro caso trabajaremos a una velocidad de 100 kHz.

 Bit 7: SMP. Bit de muestra.

0- Control slew rate habilitado para modo High- speed (400 kHz)

1- Control slew rate deshabilitado para modo estándar (100 kHz y 1MHz)

Figura 2.7. Registro SSPxSTAT

2.3.2. SSPxCON1, Registro de Control SSP1

Este registro nos permite configurar y controlar aspectos importantes en la comunicación I2C, como por ejemplo: detectar si ha habido una colisión durante el proceso de escritura (WCOL), saber si ha habido overflow en la conexión (SSPxOV), habilitar el módulo SSP (SSPxEN) o seleccionar el modo SSP (SSPxM). En la Figura 2.8 podemos ver la distribución del registro.

En este caso, el registro será utilizado para indicar que no habrá overflow en la recepción (SSPxOV = 0), también se habilitará el SSP (SSPxEN = 1) e indicará el modo de SSP (SSPxM <3:0> = 1000).

(20)

16

El modo de SSP seleccionado con los bits ‘1000’ significa que se ha seleccionado el modo I2C master. Se ampliará en detalle en la sección 2.3.4. SSPxADD Registro de Velocidad de Transmisión y Dirección.

Figura 2.8. Registro SSPxCON1

2.3.3. SSPxCON2, Registro de Control SSP2

Este registro nos permite habilitar o deshabilitar opciones tales como: habilitar secuencia de ACK (ACKEN), habilitar o deshabilitar la recepción (RCEN), habilitar o deshabilitar la condición de STOP (PEN), habilitar o deshabilitar la recepción de la condición de START (RSEN) y habilitar o deshabilitar la condición de START (SEN). También permite conocer el estado del ACK (ACKSTAT). En la Figura 2.9 podemos ver la distribución del registro.

Para la configuración inicial de una comunicación en I2C necesitamos que todos los bits se encuentren a cero, en especial:

 Bit 4: ACKEN. Habilitación de la secuencia de ACK (solo en modo MASTER).

0- Secuencia ACK inactivada.

1- Inicia secuencia de reconocimiento en los pines SDA y SCL y transmite el bit ACKDT. Se limpia automáticamente por hardware.

 Bit 3: RCEN. Bit de habilitación de recepción (solo modo MASTER). 0- Recepción desactivada.

1- Habilita recepción por I2C

 Bit 2: PEN. Bit de habilitación de condición de STOP (solo modo MASTER) 0- Condición de STOP desactivada.

1- Inicia la condición de STOP en los pines SDA y SCL. Se limpian automáticamente por hardware.

 Bit 1: RSEN. Bit de habilitación de repetición de la condición de START (solo en modo MASTER).

0- Condición de repetición de START desactivada.

1- Inicia la condición de repetición de START en los pines SDA y SCL. Se limpian automáticamente por hardware.

(21)

Capítulo II. Bus I2C implementado con PIC

17

 Bit 0: SEN. Bit de habilitación de condición de START (solo en modo MASTER).

0- Condición START inactiva.

1- Inicia la condición de START en SDA y SCL. Se limpia automáticamente por hardware.

Figura 2.9. Registro SSPxCON2

2.3.4. SSPxADD Registro de Velocidad de Transmisión y Dirección.

La correcta configuración de este registro (mostrado en la Figura 2.10) es muy importante ya que controla la velocidad de las transmisiones en el bus I2C. Este registro fija la frecuencia de reloj del bus fclk. Dado que hemos escogido el modo SSP I2C master

(ver sección 2.3.2), la frecuencia se calculará mediante la expresión (1):

(1) Donde Fosc es la frecuencia del oscilador de programa, y SSPxADD es el valor en decimal de dicho registro. En nuestro caso trabajaremos a una frecuencia fclk de 100 kHz

y una frecuencia de oscilador de programa de 4 MHz. Por lo tanto, el valor que será cargado en este registro SSPADD será (2): [3]

(2)

(22)

18

2.4. Referencias.

[1] Wikipedia. (2012, Abril 23). I2C [Online]. Disponible en: http://en.wikipedia.org/wiki/I%C2%B2C

[2] Valleverde. (2012, Abril 23). El bus serie I2C [Online]. Disponible en: http://webs.ono.com/valleverde/

[3] Microchip. (2001). I2C Master Mode [Online]. Disponible en: http://ww1.microchip.com/downloads/en/DeviceDoc/i2c.pdf

[4] Microchip Technology Inc. (2011). PIC16(L)F1826/27 Data Sheet [Online]. Disponible en: http://ww1.microchip.com/downloads/en/devicedoc/41391b.pdf

(23)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

19

CAPITULO III

Aplicación para escritura de

EEPROM externa con I

2

C

(24)

20

3. Aplicación para escritura de EEPROM externa con I

2

C

3.1. Placa personalizada.

La necesidad de interconectar el microcontrolador, la memoria EEPROM y el sensor (acelerómetro) nos obliga a diseñar una placa personalizada en la cual podamos interconectar estos elementos siguiendo el esquema de conexionado de la Figura 3.1.

Figura 3.1. Esquema de conexionado.

Se ha implementado la placa personalizada utilizando el programa RIMU PCB [5] para diseñar el layout. Podemos ver el diseño final en la Figura 3.2, posteriormente se explicara en detalle y se especificaran algunas decisiones de diseño.

Figura 3.2. Layout de la placa personalizada.

Los resistores de pull-up necesarios para el bus I2C serán de 10 kΩ (ver Figura 3.3). Según las especificaciones de la memoria EEPROM, los valores típicos requeridos por

(25)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

21

la línea SDA (Serial Data) son: 10 kΩ para trabajar a una frecuencia de 100 kHz y 2 kΩ para trabajar a 400 kHz o 1 MHz.

RESISTORES DE PULL-UP

(10 KΩ)

Figura 3.3.Resistores de pull-up.

Con motivo de simplificar el conexionado a la hora de implementar la placa personalizada se han tomado las siguientes decisiones de diseño:

 Se han conectado los pines A0, A1 y A2 de la memoria EEPROM, correspondientes a los 3 bits de direccionamiento, directamente a tierra como podemos apreciar en la Figura 3.4. Con esto se consigue que estos 3 pins de la memoria EEPROM tomen el valor de cero.

BITS DE DIRECCIONAMIENTO

Figura 3.4.Conexión de los bits de direccionamiento de la EEPROM.

 El pin correspondiente al bit WP (Write Protect) de la memoria EEPROM estará conectado a tierra (figura 3.8), ya que la acción de escritura estará permitida.

Bit WP

(26)

22

 Se han añadido pines de programación, en este caso se han utilizado los pines RB6 y RB7 del PIC como reloj y datos, también el pin RA5 como MCLR para activar el modo de programación y los pines alimentación (VDD) y masa (VSS), como se puede observar en la Figura 3.5.

PINES DE PROGRAMACIÓN

Figura 3.5. Pines de programación.

 La alimentación tanto del micro controlador, la EEPROM como del acelerómetro ha sido implementada mediante una toma de corriente USB, como se muestra en la Figura 3.6. De esta manera obtenemos una alimentación de 5 V que posteriormente será reducida a 3,3 V utilizando un regulador lineal Texas Instruments UA78M33CDCYG3 con un encapsulado tipo SOT-223 [1], ya que el acelerómetro solamente permite trabajar en un margen de voltaje entre 1.95 V y 3.6 V.

REGULADOR LINEAL UA78M33CDCYG3 ALIMENTACIÓN

USB

Figura 3.6. A la izquierda el esquema de la alimentación vía USB. A la derecha el distribuidor lineal tipo SOT-223.

 Se han diseñado unas ranuras para la posterior conexión del acelerómetro MMA8453Q de Freescale Semiconductor [2]desde una placa externa como se puede ver en la Figura 3.7. Posteriormente, en el Capítulo 4, se especificaran las características y la distribución del acelerómetro en la placa externa.

(27)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

23

Figura 3.7. A la izquierda se pueden observar las ranuras destinadas al acelerómetro y a la derecha el acelerómetro en una placa externa.

En la Figura 3.8 podemos ver la placa fabricada con el acelerómetro conectado.

Figura 3.8. Placa final con los componentes principales: PIC, EEPROM y acelerómetro

3.2. EEPROM 24LC256.

EEPROM 24LC256 son las siglas de “Electrically Erasable Programmable Read-Only Memory”. Se trata de un dispositivo de almacenamiento no volátil de tipo ROM que puede ser programada, borrada y reprogramada eléctricamente. Dispone de una capacidad de 256kbits (32K x 8), es decir, es capaz de almacenar aproximadamente 32.000 palabras de 8 bits y además puede operar a través de un amplio rango de voltaje (1.7 a 5.5 V). [3]

La característica principal de esta memoria es que implementa la interfaz I2C para su comunicación serie con otros dispositivos electrónicos. Además, este tipo de memorias han sido desarrolladas para trabajar con aplicaciones de bajo consumo de energía, con lo cual se convierte en un elemento idóneo para la comunicación mediante el bus I2C ya que el objetivo de este proyecto es trabajar a nivel de etiquetas (tags) RFID en donde el bajo consumo de energía es un aspecto primordial.

(28)

24

Se puede observar en la Figura 3.9 que la memoria que se utilizará (Microchip 24LC256 con encapsulado tipo SOIC) dispone de 8 pines. Los tres primeros, A0, A1, y A2, son utilizadas para cambiar la dirección de memoria y poder utilizar hasta 8 memorias (3 bits) simultáneas en el mismo bus. Las pines de VSS y VCC se conectan a masa y a un voltaje de entre 1.7 a 5.5V respectivamente. La pin WP (Write-Protect input) se utiliza para habilitar o deshabilitar la operación de escritura conectándola a VSS o VCC respectivamente. Finalmente, las entradas de SDA y SCL son las utilizadas para transferir las direcciones y los datos en el caso del pin SDA, y para sincronizar la transferencia de datos en el caso del pin SCL. [4]

Figura 3.9.Esquema de una memoria EEPROM 24LC256.

3.2.1. Configuración inicial de la memoria.

En cuanto a configuración, inmediatamente después de la condición de Start, el dispositivo MASTER envía al SLAVE el primer byte llamado byte de control (ver Figura 3.10). El formato de este byte de control es la siguiente: los 4 bits más significativos indican en código de control, para las memorias EEPROM 24XX256 viene asignado el valor en binario “1010” para operaciones de lectura y escritura; los siguientes 3 bits corresponden a los bits de selección de chip (A2, A1, y A0), estos bits pueden ser utilizados para ampliar la memoria total hasta 2Mbits ya que nos permiten poner 8 memorias en el mismo bus. En nuestro caso se les ha asignado el valor “0” ya que solamente se trabajará con una memoria. Finalmente, el último bit permite seleccionar la función de lectura o escritura (Read/Write bit). [4]

De esta manera, una vez enviada la condición de Start, el dispositivo 24LC256 monitorea el bus SDA para comprobar el identificador del tipo de dispositivo al cual se transmitirá. Al recibir el código “1010” y los bits de selección de chip apropiados, el dispositivo SLAVE 24LC256 envía una señal de reconocimiento ACK hacia el dispositivo MASTER. Dependiendo del estado del bit Read/Write, el dispositivo 24LC256 seleccionará la función de lectura o escritura.

(29)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

25

3.2.2. Operación de escritura.

La operación de escritura se lleva a cabo siguiendo 6 pasos. El protocolo de comunicación es el siguiente:

1. Se inicia el proceso de comunicación entre MASTER y SLAVE mediante el envío de la condición de START.

2. Se envía el primer byte, Byte de control, en la sección 3.2.1. se ha explicado detalladamente el formato de este byte, lógicamente el bit R/W presentará un nivel bajo “0”. Se espera la señal de reconocimiento ACK.

3. En el siguiente byte a transmitir por el dispositivo MASTER se envían los 7 bits más significativos de la dirección en donde se desea escribir (Address High Byte). Dado que la distribución de memoria proporciona aproximadamente 32 mil posiciones posibles, se necesitan 15 bits (32768 valores) para identificar cada posición; por lo tanto, se utilizan palabras de 16 bits (WORD) que serán enviadas en 2 grupos de 8 bits. De esta manera, se obviará el bit 7 ya que solo se necesitan 7 bits. En la Figura 3.11 se puede ver como se distribuyen los 15 bits de direccionamiento. Se espera la señal de reconocimiento ACK.

4. Se envían los 8 bits que completan la dirección de memoria (Address Low Byte) y se espera la señal de reconocimiento ACK.

5. Se envía el byte de información que se desea escribir en la posición de memoria seleccionada anteriormente. Se espera la señal de reconocimiento ACK.

6. Finalmente, una vez concluida la operación de escritura, el dispositivo MASTER genera la condición de STOP.

Nota: Lógicamente el pin WP (Write-Protect) debe estar conectado a nivel de tensión bajo de manera que permita la escritura sobre la memoria EEPROM (nivel bajo “0”). De no ser así, el dispositivo enviará señales de reconocimiento correctamente pero el ciclo de escritura no se llevara a cabo.

Figura 3.11.Proceso de escritura en un dispositivo EEPROM 24LC256.

3.2.3. Operación de lectura.

La operación de escritura se lleva a cabo siguiendo 8 pasos (ver Figura 3.12). El protocolo de comunicación es el siguiente:

1. Se inicia el proceso de comunicación entre MASTER y SLAVE mediante una operación de escritura. Se envia la condición de START.

(30)

26

2. Se envía el primer byte, Byte de control. En la sección 3.2.1. se ha explicado detalladamente el formato de este byte, lógicamente el bit R/W presentará un nivel bajo “0”. Se espera la señal de reconocimiento ACK.

3. En el siguiente byte a transmitir por el dispositivo MASTER se envían los 7 bits más significativos de la dirección que se desea leer (Address High Byte). Se espera la señal de reconocimiento ACK.

4. Se envían los 8 bits que completan la dirección de memoria (Address Low Byte) y se espera la señal de reconocimiento ACK.

5. Finaliza el proceso de escritura cuando el dispositivo MASTER genera una

condición de START inmediatamente después de haber recibido la señal de ACK.

6. Se inicia la operación de lectura, el dispositivo MASTER emite el byte de control pero con el bit R/W a uno. Se espera la señal de reconocimiento por parte del SLAVE.

7. El dispositivo SLAVE transmitirá el dato en una palabra de 8bits. El dispositivo MASTER no emitirá la señal de reconocimiento ACK. Esto hace que el dispositivo 24LC256 interrumpa la transmisión.

8. Finalmente, una vez concluida la operación de lectura, el dispositivo MASTER genera la condición de STOP.

Figura 3.12.Proceso de lectura en un dispositivo EEPROM 24LC256.

Nota: Después de una operación de lectura de una posición de memoria aleatoria, el contador de dirección interno de la memoria apuntará a la dirección que viene inmediatamente después de la que se acaba de leer.

3.3. Implementación del programa.

En este punto se expondrá el código utilizado para la comunicación I2C entre el micro controlador PIC16F1827 y la memoria EEPROM 24LC256.

Se ha decidido utilizar el lenguaje ensamblador de bajo nivel por el hecho de que es necesario trabajar a bajo nivel para poder configurar los registros. Las instrucciones necesarias vienen detalladas en el datasheet del microcontrolador [6]

Se han creado 3 funciones principales para el correcto funcionamiento de la comunicación a través del bus I2C.

 Función “Init”. Esta función es la encargada de la configuración inicial del programa, la inicialización de los registros. Aquí se configuran diferentes parámetros del micro controlador como pueden ser: La velocidad del oscilador

(31)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

27

interno, la velocidad de transmisión del bus, habilita el puerto serie del controlador, etc.

 Función “ByteWrite”. Esta función se encarga de la escritura en la EEPROM 24LC256 a través de otras funciones secundarias como: BSTART, BRESTART, BSTOP, TX, RX, etc. Las cuales serán explicadas en detalle posteriormente.

 Función “ByteRead”. Esta función se encarga de la lectura byte a byte de la EEPROM 24LC256.

A continuación se presentan al detalle las funciones básicas creadas para la comunicación a través del bus I2C.

3.3.1. Función INIT. Init banksel OSCCON bcf OSCCON,6 bsf OSCCON,5 bsf OSCCON,4 bsf OSCCON,3 ;CONFIGURACIÓN DE PUERTOS ;PORTB banksel TRISB movlw B'00010010' movwf TRISB ;PORTA banksel PORTA clrf PORTA ;CONFIGURACIÓN I2C MSSP1 ;SSP1STAT banksel SSP1STAT movlw B'10000000' movwf SSP1STAT ;SSP1ADD banksel SSP1ADD movlw B'00001001' movwf SSP1ADD ;SSP1CON2 banksel SSP1CON2 clrf SSP1CON2 ;SSP1CON1 banksel SSP1CON1 movlw B'00101000' movwf SSP1CON1 ;CONFIGURACIÓN DE POSICIONES DE MEMORIA

banksel ad_low_counter movlw .255 movwf ad_low_counter banksel ad_high_counter movlw .127 movwf ad_high_counter retlw 0

Código 3.1.Función de inicialización y configuración inicial de registros I2C.

Primeramente, se ha configurado la frecuencia del oscilador interno del micro controlador a través del registro OSCCON (Oscillator Control Register) indicando la

(32)

28

frecuencia mediante los bits 6-3 (IRCF<3:0>) en donde se indica el valor “0111” que corresponde a una frecuencia de 500 kHz.

En segundo lugar, se configuran los puertos. En la comunicación a través del bus I2C es necesario que los puertos RB1/SDA y RB4/SCL del puerto B estén configurados como entradas, por lo tanto, se indica dicha situación a través del registro TRISB.

En tercer lugar, se configura el módulo del puerto serie síncrono MSSP a través de los siguientes registros: SSPxSTAT (Registro de estado) en donde se indica que se utilizará el modo de velocidad estándar (100 kHz o 1 MHz), SSPxADD (Registro de Velocidad de transmisión y dirección) en donde se indica un valor y en función de este se calcula la velocidad de transmisión (se explica detalladamente en la sección 2.3.4), SSPxCON1 (Registro de control) en donde habilitamos el puerto serie (SSPxEN) e indicamos el modo del puerto serie (se explica detalladamente en la sección 2.3.2) y SSPxCON2 (Registro de control 2) del que se precisa que esté a cero (se explica detalladamente en la sección 2.3.3).

Finalmente, se hace la configuración inicial de los contadores de dirección. Se han definido dos variables (ad_low_counter y ad_high_counter) a través de las cuales se controlará el estado de la memoria (vacio / lleno). Se explicará en detalle en la sección 3.3.8. Add_mannager. 3.3.2. Función BSTART. BSTART banksel PIR1 bcf PIR1,SSP1IF banksel SSP1CON2 bsf SSP1CON2,SEN banksel PIR1 btfss PIR1,SSP1IF goto $-1 retlw 0

Código 3.2.Función que genera la condición de inicio (START CONDITION).

Esta función se encarga de generar la condición de START. El procedimiento es el siguiente: se indica que no hay ninguna interrupción pendiente limpiando el flag de interrupción SSP1IF (bit del flag de interrupción del SSP) del registro PIR1, seguidamente se habilita la condición de START poniendo a uno el valor del bit SEN (Start Condition Enabled bit) del registro SSPxCON2 y finalmente se consulta por encuesta el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción, en tal caso la operación se habrá llevado a cabo correctamente.

(33)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 29 28.24 28.25 28.26 28.27 28.28 28.29 28.3 28.31 28.32 28.33 0 0.5 1 1.5 2 2.5 3 Time (ms) A m p lit u d e (V ) Start Condition

Figura 3.13.Señal de start vista desde un osciloscopio.

En la Figura 3.13 se puede observar una condición de Start generada por nuestro programa y que ha sido capturada desde un osciloscopio. Se puede observar en la parte central de la imagen una transición de la línea SDA (señal roja) del nivel alto al nivel bajo mientras la línea SCL (señal azul) se mantiene en el nivel alto.

3.3.3. Función BRESTART. BRESTART banksel PIR1 bcf PIR1,SSP1IF banksel SSP1CON2 bsf SSP1CON2,RSEN banksel PIR1 btfss PIR1,SSP1IF goto $-1 retlw 0

Código 3.3.Función que genera la condición de reinicio (RESTART CONDITION).

Esta función se encarga de generar la condición de RESTART. El procedimiento es el siguiente: se indica que no hay ninguna interrupción pendiente limpiando el flag de interrupción SSP1IF (bit del flag de interrupción del SSP) del registro PIR1, seguidamente se habilita la condición de RESTART poniendo a uno el valor del bit RSEN (Repeated Start Condition Enabled bit) del registro SSPxCON2 y finalmente se consulta por encuesta el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción, en tal caso la operación se habrá llevado a cabo correctamente. 3.3.4. Función BSTOP. BSTOP banksel PIR1 bcf PIR1,SSP1IF banksel SSP1CON2 bsf SSP1CON2,PEN banksel PIR1 btfss PIR1,SSP1IF goto $-1 retlw 0

(34)

30

Esta función es la encargada de generar la condición de STOP. El procedimiento es el siguiente: se indica que no hay ninguna interrupción limpiando el flag de interrupción SSP1IF (bit del flag de interrupción del SSP) del registro PIR1, a continuación se habilita la condición de STOP poniendo a uno el valor del bit PEN (Stop Condition Enabled bit) del registro SSPxCON2 y finalmente se consulta por encuesta el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción, en tal caso la operación se habrá llevado a cabo correctamente.

29.52 29.53 29.54 29.55 29.56 29.57 29.58 29.59 29.6 29.61 0 0.5 1 1.5 2 2.5 3 Time (ms) A m p lit u d e (V ) Stop Condition Figura 3.14.Señal de stop vista desde un osciloscopio.

En la Figura 3.14 se puede observar una condición de Stop generada por nuestro programa y que ha sido capturada desde un osciloscopio. Se puede observar en la parte central de la imagen una transición de la línea SDA (señal roja) del nivel bajo al nivel bajo mientras la línea SCL (señal azul) se mantiene en el nivel alto.

3.3.5. Función TX. TX banksel PIR1 bcf PIR1,SSP1IF banksel datao movf datao,W banksel SSP1BUF movwf SSP1BUF banksel PIR1 btfss PIR1,SSP1IF goto $-1 retlw 0

Código 3.5.Función de transmisión de datos.

Esta función es la encargada de la transmisión de datos, transmite el byte guardado en la variable “datao” al dispositivo EEPROM. El procedimiento es el siguiente: se indica que no hay ninguna interrupción pendiente limpiando el flag de interrupción SSP1IF (bit del flag de interrupción del SSP) del registro PIR1, a continuación se copia el valor de la variable “datao” al registro W para luego ser puesto en el registro SSP1BUF (SSP Recieve Buffer/Transmit Register). Cada vez que este registro se carga con un valor, automáticamente se inicia la transmisión de datos. Finalmente, se consulta por encuesta

(35)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

31

el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción, en tal caso la operación se habrá llevado a cabo correctamente.

3.3.6. Función RX. RX banksel PIR1 bcf PIR1,SSP1IF banksel SSP1CON2 bsf SSP1CON2,RCEN banksel PIR1 btfss PIR1,SSP1IF goto $-1 banksel SSP1BUF movf SSP1BUF,W banksel datai movwf datai banksel PIR1 bcf PIR1,SSP1IF banksel SSP1CON2 bsf SSP1CON2,ACKEN banksel PIR1 btfss PIR1,SSP1IF goto $-1 retlw 0

Código 3.6.Función de recepción de datos.

Esta función es la encargada de la recepción de datos, lee un byte del dispositivo EEPROM y lo guarda en la variable “datai”. El procedimiento es el siguiente: se indica que no hay ninguna interrupción pendiente limpiando el flag de interrupción SSP1IF (bit del flag de interrupción del SSP) del registro PIR1. Seguidamente se inicia la recepción de un byte habilitando el bit RCEN (Recieve Enable bit) del registro SSPxCON2. Por último, se comprueba que la operación se haya completado correctamente consultando consulta por encuesta el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción.

El siguiente paso es copiar al registro W el valor de la recepción que se encuentra en el registro SSP1BUF (SSP Recieve Buffer/Transmit Register) para luego ponerlo en la variable “datai”. Acto seguido, se limpia el bit de interrupción SSP1IF y se genera una secuencia de reconocimiento ACK mediante el bit ACKEN del registro SSPxCON2. Finalmente, se consulta por encuesta el bit SSP1IF del registro PIR1 hasta que detecte que se ha producido una interrupción, en tal caso la operación se habrá llevado a cabo correctamente. 3.3.7. Función POLL. Poll banksel pollcnt movlw .40 movwf pollcnt polling call BRESTART banksel WRITE_ADDR movlw WRITE_ADDR banksel datao movwf datao

(36)

32 call TX banksel SSP1CON2 btfss SSP1CON2,ACKSTAT goto exitpoll banksel pollcnt decfsz pollcnt,F goto polling exitpoll call BSTOP retlw 0

Código 3.7.Función de encuesta de señal de reconocimiento.

Esta función se encarga de sondear el dispositivo EEPROM para así controlar el estado del bit de reconocimiento ACK. Este bit indica que el ciclo de escritura interno en el dispositivo se ha completado. El procedimiento es el siguiente. Primero, se define un número máximo de encuestas de 40 veces y se genera una señal de RESTART, de esta manera se indica que se llevara a cabo una nueva transmisión. Utilizando la función TX se transmite el byte de control de escritura del dispositivo EEPROM (almacenado en WRITE_ADDR). Después se sondea el valor del bit ACKSTAT (Acknowledge Status bit) del registro SSPxCON2 hasta que presente un valor de cero (1=ACK no recibido / 0=ACK recibido). Finalmente, se genera una señal de STOP para indicar que el procedimiento ha finalizado. 3.3.8. Función ADD_MANNAGER. Add_mannager decfsz ad_low_counter,F goto inc_low decfsz ad_high_counter,F goto inc_high goto full_memory full_memory sleep inc_low banksel address_low incf address_low,1 goto fin inc_high banksel address_high incf address_high,1 clrf address_low goto fin fin retlw 0

Código 3.8.Función de gestión de posiciones de memoria.

Esta función se encarga de gestionar las posiciones de memoria en el proceso de escritura en el dispositivo EEPROM. Incrementa en uno el valor del contador de posiciones de memoria para que después de una escritura, la siguiente se haga en la posición inmediatamente continua a la anterior. También controla el estado de la memoria; cuando se han escrito en todas las posiciones posibles de la memoria, se ejecuta la instrucción de SLEEP, de esta manera el microprocesador se pondrá en modo de bajo consumo.

(37)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

33

Se han definido dos variables (ad_low_counter y ad_high_counter) que han sido previamente inicializadas con los valores 255(11111111) y 127 (01111111) respectivamente, que representan los 15 bits de posiciones de memoria posibles. Esta función, en cada escritura, decrementa en uno el valor de la variable ad_low_counter e incrementa en uno el valor de la variable address_low (esta variable corresponde al byte de la parte baja de la posición de memoria donde se desea escribir o leer), cuando el valor de esta variable ad_low_counter llega a cero (después de 255 escrituras) se decrementa en uno el valor de variable ad_high_counter y se incrementa en uno el valor de la variable address_high (esta variable corresponde al byte de la parte alta de la posición de memoria donde se desea escribir o leer) y así sucesivamente hasta agotar las 32768 posiciones de memoria, entonces el micro controlador se pondrá en estado de SLEEP.

3.3.9. Función BYTEWRITE. ByteWrite

call BSTART

; SE GENERA EL BYTE DE CONTROL (ESCRITURA) banksel WRITE_ADDR movlw WRITE_ADDR

banksel datao

movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN ALTA

banksel address_high

movf address_high,0 movwf datao call TX

; SE ENVIA EL BYTE CON LA DIRECCIÓN BAJA banksel address_low

movf address_low,0 movwf datao call TX ; SE ENVIA EL BYTE DE DATOS

banksel data_to_write

movf data_to_write,0 movwf datao

call TX ; SE GENERA LA CONDICION DE STOP

call BSTOP call Poll

call Add_mannager retlw 0

Código 3.9.Función de escritura.

Esta función se encarga del proceso de escritura en el dispositivo EEPROM, requiere de tres parámetros: el byte a escribir guardado en la variable data_to_write, la dirección alta guardada en la variable address_high y la dirección baja guardada en la variable address_low.

(38)

34

Para realizar dicha operación se sigue el proceso de escritura explicado en detalle en la sección 2.2.3, en donde el byte de control para escritura se encontrará en la variable WRITE_ADDR, la dirección de memoria se encontrará en las variables address_low y address_high y el byte a escribir se encontrará en la variable data_to_write. Finalmente, se ejecuta la función de POLL y se gestiona la siguiente posición de memoria a través de la función ADD_MANNAGER.

3.3.10. Función BYTEREAD. ByteRead

call BSTART ; SE GENERA EL BYTE DE CONTROL (ESCRITURA) banksel WRITE_ADDR

movlw WRITE_ADDR banksel datao

movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN ALTA banksel address_high

movf address_high,0 movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN BAJA banksel address_low

movf address_low,0 movwf datao call TX

; SE GENERA LA CONDICIÓN DE RESTART

call BRESTART ; SE GENERA EL BYTE DE CONTROL (LECTURA) banksel READ_ADDR

movlw READ_ADDR banksel datao

movwf datao call TX ; LECTURA DEL BYTE DE DATOS

banksel SSP1CON2

bsf SSP1CON2,ACKDT call RX

; SE GENERA LA CONDICIÓN DE STOP

call BSTOP retlw 0

Código 3.10.Función de lectura.

Esta función se encarga del proceso de lectura en el dispositivo EEPROM. Requiere de dos parámetros: la dirección alta guardada en la variable address_high y la dirección baja guardada en la variable address_low. Retorna el resultado en la variable datai. Para llevar a cabo esta operación se sigue el protocolo de escritura explicado en detalle en la sección 2.2.4. Los bytes de control de escritura y de lectura se encuentran en las constantes WRITE_ADDR y READ_ADDR respectivamente.

(39)

Capítulo III. Aplicación para escritura de EEPROM externa con I2C

35

3.3.11. Ejemplo de escritura y lectura.

En este apartado se mostrará el proceso de escritura y lectura, entre el micro controlador y la memoria, que se debe seguir para el correcto funcionamiento del programa.

El código es el siguiente: call Init ; OPERACIÓN DE ESCRITURA banksel address_high movlw 0x00 movwf address_high movlw 0x00 movwf address_low movf orientacion,0 movwf data_to_write call ByteWrite ; OPERACIÓN DE LECTURA call Init banksel address_high movlw 0x00 movwf address_high movlw 0x00 movwf address_low call ByteRead

Código 3.11.Ejemplo de escritura y lectura.

Podemos ver que las tres funciones principales son INT, ByteWrite y ByteRead. Para empezar, se inicializan los registros necesarios a través de la función INIT, seguidamente se inicia el proceso de escritura indicando la dirección alta y baja de la memoria (en este caso se escribirá en la posición 0x00 en ambos valores, es decir, se escribirá en la posición 00000000 00000000).

A efectos prácticos que serán expuestos más adelante, la variable orientacion contendrá el byte que se desea guardar en memoria. Por lo tanto, la variable orientacion es copiada a la variable data_to_write y posteriormente se llama a la función ByteWrite para iniciar el proceso de escritura.

En cuanto a la operación de lectura, se vuelve a llamar a la función INIT para con el fin de reiniciar los valores necesarios para la gestión de las posiciones de memoria. Se indica la posición de memoria de la cual se desea leer el byte y finalmente se llama a la función ByteRead, el valor de la lectura será guardado en la variable datai.

3.4. Referencias.

[1] Texas Instruments. (2010, Abril). POSITIVE-VOLTAGE REGULATORS [Online]. Disponible en: http://www.ti.com/lit/ds/symlink/ua78m33.pdf

[2] Freescale Semiconductor. (2011, Agosto). MMA8453Q [Online]. Disponible en: http://cache.freescale.com/files/sensors/doc/data_sheet/MMA8453Q.pdf?fpsp=1 [3] Wikipedia. (2012, Abril 26). EEPROM [Online]. Disponible en:

(40)

36

[4] Microchip Technology Inc. (2004). 256k I2C CMOS Serial EEPROM [Online]. Disponible en:

http://ww1.microchip.com/downloads/en/devicedoc/21203m.pdf

[5] Hutson Systems. (2009, Mayo 2). Rimu PCB [Online]. Disponible en: http://www.hutson.co.nz/rimupcb.htm

[6] Microchip Technology Inc. (2011). PIC16(L)F1826/27 Data Sheet [Online]. Disponible en: http://ww1.microchip.com/downloads/en/devicedoc/41391b.pdf

(41)

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q

37

CAPITULO IV

Aplicación para lectura de un

acelerómetro MMA8453Q

(42)

38

4. Aplicación para lectura de un acelerómetro MMA8453Q

4.1. Acelerómetro MMA8453Q.

En esta sección se explicaran en detalle las principales características del acelerómetro MMA8453Q, sus principales aplicaciones y se mencionan algunas de las funciones más importantes. Además, se hará especial énfasis en la función de orientación llamada “Portrait/Landscape embedded function” que ofrece dicho dispositivo, ya que con ella se probará la aplicación de comunicación mediante el bus I2C.

4.1.1. Descripción del dispositivo.

El dispositivo MMA8453Q [1] es un acelerómetro micromecanizado de bajo consumo, de tres ejes y con 10 bits de resolución. Presenta diversas funciones integradas con múltiples opciones que pueden ser programadas y/o configuradas por el usuario. Este dispositivo puede ser configurado para generar señales de interrupción inerciales “wakeup” de cualquier combinación de las funciones integradas mencionadas anteriormente. De esta manera, el dispositivo puede controlar eventos y permanecer en modo de ahorro de energía durante los periodos de inactividad.

La principal característica de este dispositivo, por el cual ha sido elegido para formar parte de este proyecto, es que presenta una interfaz de salida digital I2C a través de la cual se controlará mediante el dispositivo Microchip PIC16(L)F1826/27. Además, trabaja a con una tensión de alimentación de entre 1.95 V y 3.6 V, ofrece una salida digital de 8 y 10 bits y dispone de tres canales integrados de detección de movimiento (detección de movimiento, detección de un pulso y detección de sacudida), entre otras características.

4.1.2. Aplicaciones del dispositivo.

Existe una gran diversidad de aplicaciones para este tipo de dispositivos, en este proyecto se utilizará, en términos generales, para leer la orientación del dispositivo en un byte para luego ser transmitido al micro controlador a través del bus I2C y así realizar una prueba de concepto.

Entre las aplicaciones típicas de este tipo de acelerómetro se encuentran:

 Aplicaciones de eCompass.

 Detección estática de la orientación (horizontal/vertical, arriba/abajo, izquierda/derecha, delate/detrás).

 Detección de caída libre para ordenadores portátiles, eReader y notebooks.

 Detección de orientación en tiempo real.

 Análisis de actividad en tiempo real.

 Detección de movimiento para ahorro de energía en dispositivos portátiles (Modalidad Auto-Sleep y Auto-Wake para teléfonos móviles, PDAs, GPS, etc).

(43)

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q

39

4.1.3. Funciones principales.

 Detección de caída libre y movimiento. El dispositivo cuenta con una arquitectura flexible para la detección de interrupciones, ya sean caídas libres o simples movimientos. La configuración de movimiento tiene la opción de activar o desactivar un filtro paso alto para eliminar los datos de inclinación (estática offset). La caída libre no utiliza este filtro.

La detección de caída libre implica el seguimiento de los ejes X, Y y Z para controlar si la magnitud de aceleración está por debajo de un umbral para una cantidad de tiempo, ambos definidos por el usuario.

 Detección transitoria. El dispositivo pasa por el filtro paso alto los datos de aceleración, lo que elimina el offset (DC) y las bajas frecuencias. La frecuencia de corte del filtro paso alto puede ser definida por el usuario.

La función integrada de detección transitoria utiliza los datos filtrados, lo cual permite al usuario ajustar el umbral de rebote y el contador.

 Detección de orientación. El dispositivo presenta un algoritmo de detección de orientación con la posibilidad de detectar hasta 6 orientaciones. La transición de vertical a horizontal es fijada por un ángulo a partir de 45º y un ángulo de histéresis de ± 14º. Esto permite que haya una transición sin problemas de vertical a horizontal de 30º, y de horizontal a vertical de aproximadamente 60º. El ángulo en el que el dispositivo ya no detecta el cambio de orientación se denomina “ángulo Z de bloqueo”. El dispositivo funciona hasta 29º desde la posición plana. Todos los ángulos tienen una precisión de ±2º. La Figura 4.1 y la Figura 4.2 ilustran la región del ángulo Z de bloqueo.

Figura 4.1.Esquema de transición de horizontal a vertical

Referencias

Documento similar

E Clamades andaua sienpre sobre el caua- 11o de madera, y en poco tienpo fue tan lexos, que el no sabia en donde estaña; pero el tomo muy gran esfuergo en si, y pensó yendo assi

Sanz (Universidad Carlos III-IUNE): &#34;El papel de las fuentes de datos en los ranking nacionales de universidades&#34;.. Reuniones científicas 75 Los días 12 y 13 de noviembre

(Banco de España) Mancebo, Pascual (U. de Alicante) Marco, Mariluz (U. de València) Marhuenda, Francisco (U. de Alicante) Marhuenda, Joaquín (U. de Alicante) Marquerie,

Dada la endogeneidad de la respuesta de la política monetaria a la evolución prevista para la economía, esta evolución de las cotizaciones bancarias ante sorpresas monetarias puede

[r]

SVP, EXECUTIVE CREATIVE DIRECTOR JACK MORTON

Social Media, Email Marketing, Workflows, Smart CTA’s, Video Marketing. Blog, Social Media, SEO, SEM, Mobile Marketing,

Proporcione esta nota de seguridad y las copias de la versión para pacientes junto con el documento Preguntas frecuentes sobre contraindicaciones y