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



Documentos relacionados
COMUNICACIÓN I2C (INTER-INTEGRATED CIRCUIT)

Curso sobre Microcontroladores Familia HC9S08 de Freescale

BUS I2C: IMPLEMENTACIÓN PRÁCTICA CON MICROCONTROLADORES PIC MEMORIAS EEPROM SERIE

I2C. Ing. Pablo Martín Gomez

Comunicación Serie IIC: Inter-Integrated Circuit

AUTOMATIZACIÓN - CURSO: Práctica 4: Sistema de Monitorización de tiempo mediante Arduino

BUS I2C. IES Los Viveros Sevilla Dpto. Electrónica. 1

Memoria 24LC256 I. I NTRODUCCIÓN

Curso sobre Microcontroladores Familia HC9S08 de Freescale

Actividad 4: Comunicación entre PLC s vía Ethernet

Tema 7. SISTEMAS SECUENCIALES SISTEMAS SECUENCIALES SÍNCRONOS

Microprocesadores, Tema 8:

3. FUNCIONAMIENTO DE LA FUNCIONES TXD Y RXD 4. EJEMPLO DE ENVÍO DE SMS DESDE EL PLC 5. EJEMPLO DE RECEPCIÓN DE SMS EN EL PLC

TEMA EL BUS I 2 C (Inter Integrated Circuit Bus) I2C EN C

INTRODUCCION A LOS SISTEMAS R.F.I.D.

Temporizadores y contadores en tiempo real: El módulo Timer0 y el prescaler del PIC

SPI. Teoría y Aplicaciones. INGENIERIA EN MICROCONTROLADORES Protocolo SPI( Serial Peripherical Interface) Protocolo

ÍNDICE DISEÑO DE CONTADORES SÍNCRONOS JESÚS PIZARRO PELÁEZ

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Familias de microcontroladores de radio frecuencia.

Placa de control MCC03

AUTOMATIZACION. Reconocer la arquitectura y características de un PLC Diferenciar los tipos de entradas y salidas

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

CAPÍTULO III SISTEMA PAGING. breves mensajes a una terminal portátil. Este sistema es conveniente para personas que

REGISTROS DE DESPLAZAMIENTO

ACTIVIDADES TEMA 1. EL LENGUAJE DE LOS ORDENADORES. 4º E.S.O- SOLUCIONES.

Departamento técnico. Guía rápida CC-LINK. Autómatas serie Q con variadores FR-E 1 / 33

Los mayores cambios se dieron en las décadas de los setenta, atribuidos principalmente a dos causas:

COMUNICACION DE PLC S MEDIANTE EL PUERTO RS- 485 Y MONITOREADO POR PANTALLA.

Puesto que la trama consta de 32 intervalos de tiempo iguales, la duración de cada intervalo o canal será de:

INGENIERIA EN MICROCONTROLADORES. Protocolo RS-485. Introducción

(decimal) (hexadecimal) 80.0A.02.1E (binario)

Nociones básicas sobre adquisición de señales

MANUAL DE AYUDA. SAT Móvil (Movilidad del Servicio Técnico)

Anexo B. Comunicaciones entre mc y PC

UNIVERSIDAD DE SALAMANCA

Movilidad. Pasa demasiado tiempo fuera de la oficina? Solución móvil Dynamics NAV

Tema 4. Gestión de entrada/salida

TEMA7. SISTEMAS SECUENCIALES

Tecnología IP para videovigilancia... Los últimos avances han hecho posible conectar cámaras directamente a una red de ordenadores basada en el

Problemas sobre Dispositivos de Interconexión Sistemas Telemáticos I

TELEOPERACIÓN DE UN ROBOT MOVIL CON MANEJO DIFERENCIAL A BAJO COSTO

El grupo de trabajo IEEE ha definido tres clases de WPANs que se

DESCRIPCION DEL SITEMA MASTER.

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

SEWERIN. Pre Localización De Fugas de Agua

INTERRUPCIONES. La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE MECANICA ELECTRICA LABORATORIO DE ELECTRONICA PENSUM COMUNICACIONES 3

TEMA 5. ELECTRÓNICA DIGITAL

Manual de Palm BlueChat 2.0

La forma de manejar esta controladora es mediante un ordenador utilizando algún lenguaje de programación (Por ejemplo.: C, Visual Basic, Logo,...).

INGENIERIA EN MICROCONTROLADORES. Maquinas de Estado. Introducción

Reprogramación de módulos de control

Notas para la instalación de un lector de tarjetas inteligentes.

En el presente capítulo se describe la programación del instrumento virtual y cómo

2 Sea una unidad de disco duro de brazo móvil con las siguientes características:

CAN BUS Controller Area Network:

podemos enfocar al funcionamiento del robot, es decir la parte de electrónica. Para que el

La informática es el conjunto de técnicas y conocimientos necesarios para el tratamiento automático de la información mediante el ordenador.

LINEAMIENTOS ESTÁNDARES APLICATIVOS DE VIRTUALIZACIÓN

UNIVERSIDAD TECNICA DEL NORTE

Tema. Módulo Captura Comparación Modulación n de Achura de Pulsos. C. F. G.S. D.P.E. Módulo de Proyectos 1

Curso Completo de Electrónica Digital

Laboratorio III de Sistemas de Telecomunicaciones Departamento de Telemática

UNIDADES DE ALMACENAMIENTO DE DATOS

1. Topología de BUS / Linear Bus. 2. Topología de Estrella / Star. 3. Topología de Estrella Cableada / Star Wired Ring. 4. Topología de Árbol / Tree

GUÍA TÉCNICA PARA LA DEFINICIÓN DE COMPROMISOS DE CALIDAD Y SUS INDICADORES

Pines de entrada/salida (I/O) de propósito general. Mediante ellos, el micro PIC puede monitorizar y controlar otros dispositivos.

Capítulo Comunicaciones de datos 1. Conexión de dos unidades 2. Conectando la unidad con una computadora personal

6. DESCRIPCIÓN DEL SOFTWARE

En caso de que el cliente nunca haya obtenido una concesión de licencia de un servidor DHCP:

MikroProgrammer 22 Clave: F502 Programador USB de Microcontroladores PIC y Memorias EEPROM Manual de Referencia v1.1

Uso de la red telefónica

Tema 1. Curso 2015/16 Semestre 1. Supuesto 1. Supuesto 2.

Manual de Palm BlueBoard 2.0

Conmutación. Conmutación telefónica. Justificación y definición.

INTRODUCCION. Ing. Camilo Zapata Universidad de Antioquia

Matemática de redes Representación binaria de datos Bits y bytes

UNIVERSIDAD DE IBAGUÉ INGENIERÍA ELECTRÓNICA MANUAL PRACTICO OSCILOSCOPIO DIGITAL HP 54600B

CAPÍTULO 3 TOPOLOGÍA DE RED MESH

MANUAL COPIAS DE SEGURIDAD

Arquitectura Von Neumann

Direcciones IP IMPLANTACIÓN DE SISTEMAS OPERATIVOS 1º ASIR. En redes IPv4.

TERMOMED Cl. Uruguay, 11 7º despacho Valencia ( Valencia ) Tel. / Fax info@termomed.net

ANTENAS: Teledistribución y televisión por cable

CELERINET ENERO-JUNIO 2013 ESPECIAL

by Tim Tran:

DISCOS RAID. Se considera que todos los discos físicos tienen la misma capacidad, y de no ser así, en el que sea mayor se desperdicia la diferencia.

HARDWARE DE SISTEMA AUTOMÁTICO DE RASTREO DE VEHÍCULOS MEDIANTE TECNOLOGÍAS GPRS Y GPS

V Manual de Portafirmas V.2.3.1

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Memoria La memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos).

DISEÑO E IMPLEMENTACIÓN DE UNA TARJETA DE ADQUISICIÓN DE DATOS PARA EL LABORATORIO DE TELECOMUNICACIONES DE LA FIEC.

T3-Rondas V 1.1. Help-Pc, S.L. C/ Pintor Pau Roig, 39 L Premià de Mar Barcelona Tel. (93) Fax marketing@t2app.

Ahorro de energía visualizando páginas Web en dispositivos móviles heterogéneos

KW x hora. on/off

Gestión digital sencilla de controladores de fuentes de alimentación analógicas

Tema 3. TOPOLOGÍAS INALÁMBRICAS. Alejandro Carrasco Muñoz Jorge Ropero Rodríguez

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

Transcripción:

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. FECHA: Junio del 2012.

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

Í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 I 2 C... 7 1.4. OBJETIVOS DEL PROYECTO... 7 1.5. ORGANIZACIÓN DE LA MEMORIA... 8 1.6. REFERENCIAS... 8 2. BUS I 2 C IMPLEMENTADO CON PIC... 11 2.1. PROTOCOLO I 2 C... 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 I 2 C.... 15 2.3.1. SSPxSTAT, Registro de Estado (Habilitado para I 2 C)... 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 I 2 C.... 20 3.1. PLACA PERSONALIZADA.... 20 3.2. EEPROM 24LC256.... 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 3.4. REFERENCIAS.... 35

4. APLICACIÓN PARA LECTURA DE UN ACELERÓMETRO MMA8453Q.... 38 4.1. ACELERÓMETRO MMA8453Q.... 38 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 6.1. CÓDIGO DEL PROGRAMA... 60

Capítulo I. Introducción CAPITULO I Introducción 1

Capítulo I. Introducción 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 DE MEDIA ON - OFF ANALÓGICO DIGITAL TEMPORAL DISCRETOS INTEGRADOS INTELIGENTES Figura 1.1. Características de los sensores 2

Capítulo I. Introducción 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: Facilidad de despliegue. 3

Capítulo I. Introducción 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. 4

Capítulo I. Introducción 1.2. Sensores inalámbricos UWB Figura 1.3. Representación de una Smart City 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. Figura 1.4. Espectro de comunicaciones 5

Capítulo I. Introducción 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. 6

Capítulo I. Introducción Figura 1.6. Fotografía de la etiqueta 1.3. Integración de EEPROM y sensores con el bus I 2 C Una gran cantidad de sensores que se pueden encontrar en el mercado trabajan a través del bus I 2 C. Como consecuencia, surgen dos necesidades: la de implementar la comunicación vía I 2 C 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 I 2 C 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 I 2 C, de un microcontrolador de bajo consumo con una memoria EEPROM 24LC256 y con diferentes sensores que trabajen con el bus I 2 C. Actualmente ya existen dispositivos que realicen este tipo de comunicación mediante el bus I 2 C pero ninguno orientado al bajo consumo para ser integrado en una etiqueta de RFID. 7

Capítulo I. Introducción Una parte fundamental de este proyecto es explicar en detalle el bus I 2 C, 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 I 2 C. Por este motivo, entender su funcionamiento y conocer sus principales características es un aspecto esencial para la posterior implementación del bus I 2 C. Se explicarán en detalle las operaciones de lectura y escritura. Una vez implementado el bus, la integración de sensores con el bus I 2 C 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 I 2 C en etiquetas RFID. - El Capítulo 2 se centrará en el bus I 2 C, expondrá tanto el funcionamiento como los requerimientos del bus. Además, ofrecerá una explicación detallada de cómo implementar el bus I 2 C 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 8

Capítulo I. Introducción [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 9

Capítulo II. Bus I 2 C implementado con PIC CAPITULO II Bus I 2 C implementado con PIC 10

Capítulo II. Bus I 2 C implementado con PIC 2. Bus I 2 C implementado con PIC 2.1. Protocolo I 2 C El bus I 2 C (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 I 2 C, 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 I 2 C permite la comunicación chip-to-chip bidireccional, utilizando solamente dos líneas en una conexión en serie. I 2 C 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. Figura 2.1. Esquema de conexión I 2 C Master-Slave 11

Capítulo II. Bus I 2 C implementado con PIC Las líneas del bus I 2 C 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 I 2 C 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. 12

Capítulo II. Bus I 2 C implementado con PIC 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. 2.1.5. Transferencia de datos. Figura 2.4. Condición de ACK 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. 13

Capítulo II. Bus I 2 C implementado con PIC 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 I 2 C 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. 14

Capítulo II. Bus I 2 C implementado con PIC El módulo MSSP puede operar en dos modos: Interfaz Periférica Serie (SPI) Inter-Circuito Integrado (I 2 C) El módulo SSP en modo I 2 C 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 I 2 C. 2.3.1. SSPxSTAT, Registro de Estado (Habilitado para I 2 C) Este registro nos permite configurar y controlar el estado de diferentes aspectos importantes en una comunicación I 2 C, 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 I 2 C. 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 I 2 C, 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). 15

Capítulo II. Bus I 2 C implementado con PIC 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 I 2 C 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. 16

Capítulo II. Bus I 2 C implementado con PIC 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 I 2 C. Este registro fija la frecuencia de reloj del bus f clk. Dado que hemos escogido el modo SSP I 2 C master (ver sección 2.3.2), la frecuencia se calculará mediante la expresión (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 f clk 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] (1) (2) Figura 2.10. Registro SSPxADD 17

Capítulo II. Bus I 2 C implementado con PIC 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). I 2 C 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 18

Capítulo III. Aplicación para escritura de EEPROM externa con I2C CAPITULO III Aplicación para escritura de EEPROM externa con I 2 C 19

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 I 2 C serán de 10 kω (ver Figura 3.3). Según las especificaciones de la memoria EEPROM, los valores típicos requeridos por 20

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 Figura 3.8.Conexión de pin WP (Write Protect). 21

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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. ALIMENTACIÓN USB REGULADOR LINEAL UA78M33CDCYG3 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. 22

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 I 2 C 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 I 2 C 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. 23

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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. Figura 3.10.Formato del byte de control. 24

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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. 25

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 I 2 C 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 I 2 C. 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 26

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 I 2 C. 3.3.1. Función INIT. Init bcf bsf bsf bsf ;CONFIGURACIÓN DE PUERTOS ;PORTB movlw movwf ;PORTA clrf ;CONFIGURACIÓN I2C MSSP1 ;SSP1STAT movlw movwf ;SSP1ADD movlw movwf ;SSP1CON2 clrf ;SSP1CON1 movlw movwf OSCCON OSCCON,6 OSCCON,5 OSCCON,4 OSCCON,3 TRISB B'00010010' TRISB PORTA PORTA SSP1STAT B'10000000' SSP1STAT SSP1ADD B'00001001' SSP1ADD SSP1CON2 SSP1CON2 SSP1CON1 B'00101000' SSP1CON1 ;CONFIGURACIÓN DE POSICIONES DE MEMORIA ad_low_counter movlw.255 movwf ad_low_counter 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 I 2 C. Primeramente, se ha configurado la frecuencia del oscilador interno del micro controlador a través del registro OSCCON (Oscillator Control Register) indicando la 27

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 I 2 C 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 bcf bsf btfss goto $-1 retlw 0 PIR1 PIR1,SSP1IF SSP1CON2 SSP1CON2,SEN PIR1 PIR1,SSP1IF 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. 28

Capítulo III. Aplicación para escritura de EEPROM externa con I2C Start Condition 3 Amplitude (V) 2.5 2 1.5 1 0.5 0 28.24 28.25 28.26 28.27 28.28 28.29 28.3 28.31 28.32 28.33 Time (ms) 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 bcf bsf btfss goto $-1 retlw 0 PIR1 PIR1,SSP1IF SSP1CON2 SSP1CON2,RSEN PIR1 PIR1,SSP1IF 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 bcf bsf btfss goto $-1 retlw 0 PIR1 PIR1,SSP1IF SSP1CON2 SSP1CON2,PEN PIR1 PIR1,SSP1IF Código 3.4.Función que genera la condición de parada (STOP CONDITION). 29

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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. Stop Condition 3 Amplitude (V) 2.5 2 1.5 1 0.50 29.52 29.53 29.54 29.55 29.56 29.57 29.58 29.59 29.6 29.61 Time (ms) 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 retlw 0 PIR1 bcf PIR1,SSP1IF datao movf datao,w SSP1BUF movwf SSP1BUF PIR1 btfss PIR1,SSP1IF goto $-1 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 30

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 retlw 0 PIR1 bcf PIR1,SSP1IF SSP1CON2 bsf SSP1CON2,RCEN PIR1 btfss PIR1,SSP1IF goto $-1 SSP1BUF movf SSP1BUF,W datai movwf datai PIR1 bcf PIR1,SSP1IF SSP1CON2 bsf SSP1CON2,ACKEN PIR1 btfss PIR1,SSP1IF goto $-1 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 pollcnt movlw.40 movwf pollcnt polling call BRESTART WRITE_ADDR movlw WRITE_ADDR datao movwf datao 31

Capítulo III. Aplicación para escritura de EEPROM externa con I2C exitpoll retlw 0 call btfss goto decfsz goto call TX SSP1CON2 SSP1CON2,ACKSTAT exitpoll pollcnt pollcnt,f polling BSTOP 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 address_low incf address_low,1 goto fin inc_high 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. 32

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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) WRITE_ADDR movlw WRITE_ADDR datao movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN ALTA address_high movf address_high,0 movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN BAJA address_low movf address_low,0 movwf datao call TX ; SE ENVIA EL BYTE DE DATOS 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. 33

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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) WRITE_ADDR movlw WRITE_ADDR datao movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN ALTA address_high movf address_high,0 movwf datao call TX ; SE ENVIA EL BYTE CON LA DIRECCIÓN BAJA 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) READ_ADDR movlw READ_ADDR datao movwf datao call TX ; LECTURA DEL BYTE DE DATOS 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. 34

Capítulo III. Aplicación para escritura de EEPROM externa con I2C 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 ; OPERACIÓN DE ESCRITURA movlw movwf movlw movwf movf movwf call ; OPERACIÓN DE LECTURA call movlw movwf movlw movwf call Init address_high 0x00 address_high 0x00 address_low orientacion,0 data_to_write ByteWrite Init address_high 0x00 address_high 0x00 address_low 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: http://en.wikipedia.org/wiki/eeprom 35

Capítulo III. Aplicación para escritura de EEPROM externa con I2C [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 36

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

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q 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 I 2 C. 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 I 2 C 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 I 2 C 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). Control en caso de golpe o vibración. 38

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q 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 Figura 4.2.Esquema de transición de vertical a horizontal 39

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q 4.1.4. Conexión de los pines para el dispositivo MMA8453Q En este apartado se describirá el conexionado de los diferentes pines del acelerómetro sobre la placa externa en la que se encuentra (vista anteriormente en la Figura 3.7) y también sobre la placa que se ha diseñado para conectar el acelerómetro con el resto de componentes a través de bus I 2 C. A continuación se expondrán las conexiones para los diferentes pines del dispositivo recomendadas por el fabricante [2]. En la Figura 4.3 se puede apreciar el esquema con las directrices para montar la placa y la disposición de los pines. Figura 4.3.Esquema de conexión recomendad para los dispositivos MMA8451, 2 y 3Q En la Tabla 4.1 se expone la conexión recomendada para cada pin: Número de MMA8453Q Conexión recomendada pin 1 VDDIO Alimentación de entre 1.62 a 3.6 V 2 BYPASS Condensador de 0.1μF conectado a GND 3 NC Mantener desconectado 4 SCL Resistor de Pull-up de 4.7Ω requerida por el bus I 2 C 5 GND Conectar a GND 6 SDA Resistor de Pull-up de 4.7Ω requerida por el bus I 2 C 7 SA0 Conectar a GND o a VDD dependiendo de la dirección I2C que se quiera asignar, en este caso se ha decidido conectar a GND. 8 EN Dejar desconectado, conectar a VDD o a GND 9 INT2 Conectar al MCU 10 GND Conectar a GND 11 INT1 Conectar al MCU 12 GND Conectar a GND 13 NC Dejar desconectado, conectar a VDD o a GND 14 VDD Entrada analógica de entre 1.95 y 3.6 V 15 NC Dejar desconectado, conectar a VDD o a GND 16 NC Dejar desconectado, conectar a VDD o a GND 40

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q Tabla 4.1. Conexiones del acelerómetro MMA8453Q 4.2. Configuración del dispositivo MMA8453Q En este apartado explicará en detalle la configuración de los registros necesarios para el acoplamiento entre el acelerómetro y el microcontrolador a través del bus I 2 C. En principio no existen incompatibilidades de configuración entre los requerimientos (por ejemplo, la velocidad del bus de 100 khz) de los diferentes dispositivos que actúan en condición de esclavo (Microchip EEPROM 24LC256 y acelerómetro). El dispositivo MMA8453Q dispone de un gran número de registros configurables, tanto de lectura como de escritura, que sirven para controlar, activar, desactivar y configurar el acelerómetro a gusto del usuario. Para realizar la prueba de concepto utilizando el acelerómetro se utilizarán solamente algunos de estos registros, los cuales serán explicados en detalle. Para más información sobre la descripción de los registros consultar Freescale Semiconductor MMA8453Q [1]. 4.2.1. Registro de control Existen 5 registros de control que permiten llevar el control del sistema (activar, desactivar, velocidad, modo SLEEP, etc.) y configurar los diferentes tipos de interrupciones posibles. A continuación se explicara el registro CTRL_REG1 ya que es el que se ha utilizado. Registro de control del sistema 1 (0x2A).- En la Figura 4.4 se puede apreciar la distribución del byte de registro. Este registro permite llevar el control del dispositivo, es decir, cambiar entre modo activo y modo de espera, seleccionar entre el modo de lectura rápida y el modo normal, seleccionar la velocidad de salida de datos (ODR) del sistema y configurar la frecuencia de muestreo cuando el dispositivo está en modo inactivo. Figura 4.4. Distribución del byte del registro de control del sistema 1, CTRL_REG1 Los bits 6 y 7 permiten seleccionar la frecuencia de muestreo cuando el dispositivo se encuentra en modo inactivo. Además, cuando el dispositivo se encuentra en modo inactivo o auto-sleep, el sistema ODR y la velocidad de datos para todo el sistema de bloques funcionales son reemplazados por la velocidad de datos establecida por el campo ASLP_RATE. En la Tabla 4.2 se indican las diferentes combinaciones con sus respectivos valores en frecuencia: ASLP_RATE1 ASLP_RATE2 Frecuencia (Hz) 0 0 50 0 1 12.5 41

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q 1 0 6.25 1 1 1.56 Tabla 4.2. Combinaciones para la velocidad durante el modo sleep del acelerómetro Los bits 3, 4 y 5 (DR[2:0]) sirven para seleccionar al velocidad de salida de datos (ODR) para las muestras de aceleración. El valor predeterminado es 000 para una velocidad de 800 Hz. A continuación se muestran en la Tabla 4.3 las diferentes combinaciones y sus valores de ODR y periodo correspondiente: DR2 DR1 DR0 ODR Periodo 0 0 0 800 Hz 1.25 ms 0 0 1 400 Hz 2.5 ms 0 1 0 200 Hz 5 ms 0 1 1 100 Hz 10 ms 1 0 0 50 Hz 20 ms 1 0 1 12.5 Hz 80 ms 1 1 0 6.25 Hz 160 ms 1 1 1 1.56 Hz 640 ms Tabla 4.3. Combinaciones para la velocidad durante el modo normal del acelerómetro El bit 2 (LNOISE) sirve para reducir el rango máximo de ruido. Su valor por defecto es 0 (Normal Mode) pero si se desea reducir el ruido su valor seria 1 (Reduced Noise Mode). El bit 1 (F_READ) permite elegir entre un modo de lectura rápido (1) y el modo normal (0). El valor por defecto es 1. Finalmente, el bit 0 (ACTIVE) permite activar el dispositivo o pasar de modo activo (1) a modo STANDBY (0). El valor por defecto es 0. Es importante saber que excepto para la selección del modo STANDBY, el dispositivo se debe encontrar en modo STANDBY para cambiar cualquiera de los campos o manipular cualquier registro. 4.2.2. Registro de configuración vertical/horizontal (0x11) Este registro se utiliza para habilitar la función de PORTRAIT/LANDSCAPE (vertical/horizontal) y también para indicar el comportamiento del contador de rebote. En la Figura 4.5 se puede ver la asignación de cada bit del registro. Figura 4.5. Distribución del byte del registro de configuración vertical/horizontal. PL_CFG El bit 7 indica el modo del contador de rebote. Cuando se le asigna el valor 0 disminuye el contador cada vez que la condición de interés ya no es válida. En cambio, cuando se le asigna el valor 1 (valor por defecto) borra el contador cada vez que la condición de interés ya no es válida. 42

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q El bit 6 habilita o deshabilita la detección de posición vertical/horizontal. Cuando se le asigna el valor 0 (valor por defecto) se deshabilita la detección de orientación vertical/horizontal. En cambio, cuando se le asigna el valor 1 se habilita dicha función. 4.2.3. Registro de estado Vertical/Horizontal (0x10) Este registro nos informa sobre la orientación actual o de cualquier cambio en la orientación del acelerómetro. En la Figura 4.6 se puede observar la distribución del byte del registro de estado vertical/horizontal. Figura 4.6. Distribución del byte del registro de estado Portrait/Landscape El bit número 7, NEWLP, indica si ha habido algún cambio en la orientación del dispositivo. Un 0 indica que no ha habido ningún cambio, un 1 indica que ha habido algún cambio en los bits de BAFRO y/o LAPO. El bit 6, LO, indica si se ha excedido el ángulo de inclinación en el eje Z, es decir, se ha cumplido la condición de Lockout. Un 0 indica que la condición de Lockout no ha sido detectada. Un 1 indica que la condición de Lockout ha sido detectada. Los bits 5, 4 y 3 no se utilizan por lo que mantendrán un valor constante 0. Los bits 1 y 2, LAPO[1:0], indican la orientación vertical/horizontal del dispositivo. A continuación se muestran en la Tabla 4.4 las diferentes combinaciones y sus valores de orientación correspondientes: LAPO [1] LAPO [0] Descripción 0 0 Portrait Up. Dispositivo en posición vertical respecto a la orientación normal. Valor por defecto. 0 1 Portrait Down. Dispositivo en posición vertical invertida 1 0 Landscape right. Dispositivo en modo horizontal hacia la derecha Landscape Left. Dispositivo en modo horizontal hacia la 1 1 izquierda Tabla 4.4. Combinaciones para la orientación vertical/horizontal del acelerómetro El bit 0, BAFRO, indica si el dispositivo se encuentra en posición frontal o posterior. Un 0 indica que el dispositivo se encuentra en posición frontal (valor por defecto) y un 1 que está en posición posterior. Con la Figura 4.7 se puede entender mejor las posiciones Portrait Up, Portrait Down, Landscape Right, Landscape Left, Back y Front. 43

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q Figura 4.7. Gráfico de orientaciones del dispositivo 4.2.4. Registros de datos Estos registros contienen los datos de muestra de salida de los ejes X, Y y Z expresados en complemento a 2 y en una longitud de 10 bits. Los registros de muestra almacenan los datos de la muestra actual. Se ha decidido utilizar solamente los 8 bits más significativos de cada eje para su posterior análisis. Registro de datos. OUT_X_MSB (0x01) Este registro nos ofrece los 8 bits más significativos del eje X. En la Figura 4.8 podemos ver la distribución del byte. Figura 4.8. Distribución del byte de MSB del eje X Registro de datos. OUT_Y_MSB (0x03) Este registro nos ofrece los 8 bits más significativos del eje Y. En la Figura 4.9 podemos ver la distribución del byte. Figura 4.9. Distribución del byte de MSB del eje Y Registro de datos. OUT_Z_MSB (0x05) Este registro nos ofrece los 8 bits más significativos del eje Z. En la Figura 4.10 podemos ver la distribución del byte. Figura 4.10. Distribución del byte de MSB del eje Z 44

Capítulo IV. Aplicación para lectura de un acelerómetro MMA8453Q 4.3. Implementación de funciones de lectura y escritura en el dispositivo En este apartado se describirá la implementación de las dos funciones que han sido diseñadas para la escritura y la lectura del dispositivo. 4.3.1. Función WRITE_ACCEL Write_accel call movlw movwf call BSTART WRITE_ACCEL_ADDR WRITE_ACCEL_ADDR datao datao TX ; Se envia la dirección del registro reg_addr movf reg_addr,0 movwf datao call TX ; Se envía el valor que se desea escribir data_to_write movf data_to_write,0 movwf datao call TX ; Señal de STOP retlw 0 call BSTOP Código 4.1.Función de escritura en el acelerómetro Esta función es muy similar a la función ByteWrite descrita anteriormente en el apartado 3.3.9. Como se puede ver en la Figura 4.11 el fabricante especifica la secuencia de transmisión de datos para establecer la comunicación vía I 2 C con el acelerómetro. Se ha de tener en cuenta que el byte de control para esta operación es 00111000, este valor se encuentra guardado en el registro WRITE_ACCEL_ADDR. Figura 4.11. Secuencia de escritura en el acelerómetro Esta función requiere únicamente de dos valores: el número del registro en el cual se desea escribir y el valor que se desea escribir, estos valores deben ser guardados previamente en las variables reg_addr y data_to_write respectivamente. Siguiendo las directrices vistas en la Figura 4.11 se realiza la operación de escritura. Se siguen los siguientes pasos: Se inicia la transmisión enviando la señal de Start. Se envía el byte de control de escritura 00111000 para indicar que se desea escribir en el dispositivo. 45