Universidad Técnica Federico Santa María Departamento de Electrónica Técnicas de Diseño con Microcontrolador MSP430 Memoria presentada por Jaime A. Zúñiga Camiruaga Para optar al título de Ingeniero Civil Electrónico Mención Computadores Profesor Guía: Sr. Leopoldo Silva B. Diciembre de 2003 Resumen En el trabajo se realiza una introducción a la familia de microcontroladores MSP430 de Texas Instruments, analizando sus características más avanzadas y su interconexión con diversos periféricos disponibles en la tarjeta de desarrollo EasyWeb de Olimex, tales como memoria eeprom serial, módulo de cristal líquido alfanumérico, puerto serial RS232, y controlador ethernet. El trabajo está orientado a los sistemas digitales y principalmente a la programación de microcontroladores. Se da una visión práctica del diseño con microcontroladores, para lo cual si bien existe abundante documentación disponible, ésta se encuentra dispersa y en algunos casos es demasiado extensa. Esto representa un problema cuando no se tiene demasiado tiempo para comenzar a trabajar. Por ello es de gran ayuda contar con una guía que sirva de introducción al tema del diseño con microcontrolador. Para concretar esta guía se trabajó en laboratorio con la tarjeta de desarrollo apoyado por los manuales y hojas de características de cada componente en particular, así como búsqueda de información en Internet. ii Índice de contenido Resumen............................................................................................... ii Índice de contenido ............................................................................. iii Índice de figuras ................................................................................... v Índice de tablas .................................................................................. vii Prefacio ............................................................................................. viii Introducción ........................................................................................ ix Capítulo 1 El microcontrolador MSP430 ............................................... 1 1.1 Introducción ....................................................................................... 1 1.2 Mapa de memoria e interrupciones ..................................................... 2 1.3 Los puertos de entrada y salida digital ................................................ 4 1.4 El módulo de reloj............................................................................... 6 1.5 El multiplicador por hardware ............................................................ 8 1.6 Modos de bajo consumo...................................................................... 9 1.7 Los temporizadores............................................................................. 9 1.7.1 El temporizador watchdog ............................................................ 9 1.7.2 Los Temporizadores A y B........................................................... 10 1.7.3 El comparador analógico y los conversores análogo a digital ....... 14 Capítulo 2 La tarjeta de desarrollo EasyWeb II .................................... 19 2.1 Descripción del circuito .................................................................... 19 iii Capítulo 3 Introducción a protocolos de comunicación entre dispositivos ........................................................................................ 29 3.1 El protocolo I²C y la memoria EEPROM serial 24LC515..................... 30 3.2 Los dispositivos iButton de Dallas Semiconductors y el protocolo propietario 1-Wire................................................................................... 36 3.3 Control de un módulo de cristal líquido alfanumérico ....................... 42 3.4 Utilización del protocolo TCP/IP en sistemas embebidos ................... 47 3.4.1 El hardware para sistemas embebidos con conexión ethernet ..... 47 3.4.2 El software del microcontrolador................................................. 51 Conclusiones ...................................................................................... 59 Referencias......................................................................................... 60 Anexo ................................................................................................. 62 iv Índice de figuras Figura 1-1 Designación de patillas del microcontrolador .............................. 5 Figura 1-2 Módulo de reloj........................................................................... 7 Figura 1-3 Diagrama del multiplicador por hardware ................................... 8 Figura 1-4 Modos del temporizador A como temporizador/contador. ......... 11 Figura 1-5 Modos del temporizador B como temporizador/contador .......... 12 Figura 1-6 Salidas del temporizador A en modo contador continuo ........... 13 Figura 1-7 Efecto del filtro pasabajos en la salida ..................................... 14 Figura 1-8 Diagrama del comparador analógico ........................................ 15 Figura 1-9 Diagrama del conversor análogo a digital ................................. 16 Figura 1-10 Tiempos de muestreo y conversión......................................... 17 Figura 2-1 Tarjeta de desarrollo ................................................................ 19 Figura 2-2 Esquema de conexiones del microcontrolador .......................... 20 Figura 2-3 Diagrama de fuente de alimentación ........................................ 21 Figura 2-4 Conexión de pulsadores........................................................... 22 Figura 2-5 Esquema de optoacoplador ...................................................... 22 Figura 2-6 Conexión de optoacopladores................................................... 23 Figura 2-7 Conexión de relés .................................................................... 23 Figura 2-8 Conexión a la memoria Flash................................................... 24 Figura 2-9 Conexión del display de cristal líquido ..................................... 24 Figura 2-10 Conexión del puerto serial ..................................................... 25 Figura 2-11 Conexiones de cable serial ..................................................... 25 Figura 2-12 Esquema de conectores ......................................................... 26 Figura 2-13 Conexión del controlador ethernet ......................................... 27 v Figura 2-14 Programador y emulador ....................................................... 28 Figura 2-15 Esquemático del programador ............................................... 28 Figura 3-1 Comunicación I²C .................................................................... 31 Figura 3-2 Byte de control ........................................................................ 32 Figura 3-3 Direccionamiento de la memoria .............................................. 32 Figura 3-4 Escritura de un byte................................................................ 33 Figura 3-5 Escritura de una página de hasta 64 bytes .............................. 33 Figura 3-6 Diagrama de flujo de fin de escritura ....................................... 34 Figura 3-7 Lectura de posición aleatoria ................................................... 35 Figura 3-8 Lectura de posiciones sucesivas............................................... 35 Figura 3-9 Lectura de dirección actual...................................................... 35 Figura 3-10 Esquema eléctrico de iButton ................................................ 36 Figura 3-11 Apariencia de un dispositivo iButton...................................... 37 Figura 3-12 Pulso de reset y presencia...................................................... 38 Figura 3-13 Escritura en dispositivos iButton ........................................... 38 Figura 3-14 Lectura desde dispositivos iButton......................................... 39 Figura 3-15 Generación de reset y estado de dispositivo............................ 39 Figura 3-16 Lectura de un bit desde dispositivo iButton ........................... 40 Figura 3-17 Escritura de un bit en dispositivo iButton.............................. 40 Figura 3-18 Modelo ISO/OSI versus modelo Internet ................................ 47 Figura 3-19 Diagrama esquemático del CS8900A...................................... 49 Figura 3-20 Interconexión microcontrolador a controlador ethernet .......... 49 Figura 3-21 Captura de paquetes arp y echo............................................. 53 Figura 3-22 Transacción http ................................................................... 54 Figura 3-23 Diagrama de programa de usuario usando DoNetworkStuff() . 57 vi Índice de tablas Tabla 1-1 Mapa de memoria del MPS430 ..................................................... 2 Tabla 1-2 Vector de interrupciones .............................................................. 4 Tabla 1-3 Modos del contador .................................................................... 11 Tabla 1-4 Modos de operación del conversor análogo a digital .................... 17 Tabla 3-1 Función de pines del módulo de cristal líquido ........................... 42 Tabla 3-2 Comandos del módulo de cristal líquido ..................................... 43 Tabla 3-3 Caracteres disponibles en el módulo de cristal líquido ................ 46 vii Prefacio El presente trabajo se encuentra estructurado en tres capítulos que introducen los conceptos básicos sobre el trabajo con el microcontrolador MSP430 y la utilización de los periféricos disponibles en la tarjeta de desarrollo Easyweb. El primer capítulo proporciona una visión general sobre los distintos componentes del microcontrolador y de sus diversas capacidades. El segundo capítulo trata sobre el diseño de la tarjeta de desarrollo a utilizar, describiendo el circuito y justificando la elección de los componentes que lo constituyen. En este capítulo sólo se tratan aspectos de hardware por lo que es casi independiente del primer capítulo. El tercer capítulo contiene múltiples referencias a los dos capítulos anteriores por lo que se recomienda su lectura posterior a los dos primeros. En él se describen técnicas de comunicación entre periféricos, básicamente los disponibles en la tarjeta de desarrollo, se describe tanto los requerimientos de hardware como de software para su interconexión. viii Introducción Al diseñar sistemas basados en un microcontrolador habitualmente es necesario interconectar diversos componentes, por lo que es necesario conocer las técnicas utilizadas, los protocolos y estándares utilizados por los distintos fabricantes y por las instituciones que rigen a la industria. Además el conocer distintas técnicas le da al diseñador herramientas adicionales al momento de definir su estrategia o enfrentarse con nuevos procedimientos que aparezcan en el futuro, o que pertenezcan al área de trabajo en que se desarrolla. La variedad de protocolos y técnicas de comunicación entre periféricos se pueden dividir entre seriales y paralelos, a su vez los seriales se dividen en sincrónicos y asincrónicos. La diferencia entre éstos radica en la presencia o no de una señal de reloj en las líneas de comunicación. En el ámbito de la comunicación entre circuitos integrados dentro de la misma placa de circuito impreso o a muy corta distancia, algunos centímetros o metros, la mayor cantidad de protocolos que se encuentran son seriales debido a la poca cantidad de líneas de comunicación que se requieren. De igual forma es necesario que el diseñador conozca las últimas técnicas de trabajo con microcontroladores, como emuladores en línea, interfaces para señales analógicas, ahorro de energía en sistemas portátiles, y otros. Un buen representante de los microcontroladores modernos es la familia de microcontroladores MSP430 de Texas Instruments. Estos microcontroladores de 16 bits son dispositivos de muy bajo consumo de energía (desde pocos µA hasta algunos mA), dependiendo del modo de bajo consumo que el diseñador elija, además cuentan con conversores análogo a digital y comparadores para señales analógicas. El trabajo con este microcontrolador se facilita por su capacidad de utilizar un emulador en línea con una interfaz JTAG, esto permite descargar código a su memoria Flash, leer y escribir el estado de la memoria RAM y sus registros, y ejecutar el código paso a paso desde una interfaz gráfica. El estándar JTAG de IEEE se encuentra presente en cada vez más dispositivos, por lo que resulta conveniente conocerlo. Otra ventaja de este microcontrolador es que debido a su amplia utilización existen variadas herramientas de software para trabajar con él, algunas incluso de libre distribución como el GNU C Compiler portado a la arquitectura. A medida que se expande el uso de Internet y de las redes de computadores toma cada vez más fuerza la idea de tener dispositivos conectados a la red para controlarlos o monitorearlos en forma remota desde cualquier lugar con acceso a Internet. Algo que puede parecer algo oscuro y ix complicado en un principio se logra comprender cuando se trabaja con los protocolos involucrados, al mismo tiempo se logra experiencia en un campo de rápido crecimiento. El hardware utilizado para ello es bastante simple si se utiliza un microcontrolador moderno. Después que el diseñador ha comprobado sus ideas, en un ambiente de desarrollo, puede implementar lo aprendido en sus futuros proyectos, ya que el costo que involucra conectar un dispositivo a la red es menor en comparación al resto del sistema, al mismo tiempo la capacidad de procesamiento del microcontrolador es suficiente para manejar la conexión de red y preocuparse de las otras tareas que requiera el sistema sin mayor penalización en el rendimiento. Debido a que los circuitos integrados de cierta complejidad tienden a venir en encapsulados de montaje superficial se dificulta trabajar con ellos en etapas de prototipos. Por esta razón las tarjetas de desarrollo de propósito general proporcionan al diseñador una herramienta que ahorra un tiempo considerable a la hora de desarrollar un sistema microcontrolado. Una vez que el software se encuentra funcionando correctamente se puede proceder a la fabricación del hardware del prototipo para su depuración final. Una vez más en esta etapa del trabajo los nuevos microcontroladores que permiten programación y depuración una vez montados en el circuito final facilitan en gran medida la actualización o corrección del software, proporcionando una herramienta invaluable al programador. x Capítulo 1 El microcontrolador MSP430 1.1 Introducción El MSP430 de Texas Instruments es un microcontrolador con un conjunto reducido de instrucciones (RISC) de 16 bits diseñado especialmente para aplicaciones que requieran un muy bajo consumo de energía, tales como dispositivos portátiles. Además mezcla señales analógicas y digitales en un solo circuito, lo que simplifica el diseño del hardware, y reduce el costo, debido a que no es necesario instalar conversores análogo a digital por separado. Por el hecho de trabajar con palabras de 16 bits es especialmente indicado para ser programado en lenguajes de alto nivel, por ejemplo C o C++ para sistemas embebidos, generando un código compacto y de rápida ejecución. La principal fuente de información acerca de este dispositivo son: la guía del usuario del MSP430[1] y las hojas de datos del dispositivo en particular, en este caso del MSP430F149[2]. Su arquitectura corresponde a un modelo Von-Neumann en el que tanto la memoria RAM y ROM comparten un solo mapa de memoria de hasta 64KB. Posee un sistema de reloj particularmente flexible que posee 3 osciladores independientes, pensados para ahorrar energía. Además incorpora una serie de periféricos mapeados a memoria, tales como: 3 temporizadores, 8 canales de conversores análogo a digital, dos puertos seriales sincrónicos o asincrónicos de comunicación, un módulo de multiplicación por hardware, un comparador de niveles analógicos, un módulo controlador de memoria Flash que permite que el dispositivo se reprograme a si mismo, o guarde información en un espacio de memoria no volátil. A continuación se detallarán los aspectos más relevantes de este microcontrolador, específicamente del dispositivo MSP430F149, ya que con él se realizará el trabajo posterior. En adelante se hará referencia a los nombres de los registros como figuran en los archivos de definiciones del compilador de C (ver anexo), todos los compiladores utilizan la misma definición entregada por Texas Instruments, de forma de obtener mayor compatibilidad entre ellos; en lugar de la dirección que ocupan en memoria. Cabe recordar que los registros de funciones especiales y generales son de 16 bits, y las direcciones de acceso a periféricos pueden ser de 8 ó 16 bits dependiendo del periférico en cuestión 1 1.2 Mapa de memoria e interrupciones EL microcontrolador MSP430 cuenta con un direccionamiento de memoria de 16 bits por lo que se encuentra limitado a 64 KB de memoria total. El mapa se divide en RAM: registros de funciones especiales, acceso a periféricos de 8 bits, de 16 bits y 2 KB de memoria de uso general, ROM: memoria del cargador de software, y FLASH: memoria no volátil de información de usuario, 60 KB de memoria de código y el vector de interrupciones: Tabla 1-1 Mapa de memoria del MPS430 Tipo de memoria FLASH Uso Tamaño Dirección 60KB FFE0-FFFF 1100-FFFF 256 bytes 1000-10FF Vector de interrupciones Código Memoria de información Tamaño ROM Cargador de software Tamaño 1KB 0C00-0FFF RAM RAM de uso general Tamaño 2KB 0200-09FF 0100-01FF 0010-00FF 0000-000F Periféricos 16 bits Periféricos 8 bits Registros especiales La grabación en la memoria Flash se puede hacer por bits, bytes o palabras. La diferencia entre el sector de código y el sector de memoria de información es que el primero se puede borrar en bloques de 512 bytes, en tanto el segundo se puede borrar en bloques de 128 bytes (2 bloques en total), lo que lo hace más indicado para almacenar información de usuario, pero ello no impide que se pueda utilizar la sección de código no utilizada para almacenar información. El cargador de software[3] es un programa precargado en el microcontrolador que permite descargar código a la memoria FLASH y/o RAM mediante una conexión serial. Para utilizarlo se indica a la CPU que se reinicie y comience la ejecución en la dirección de memoria correspondiente al cargador de software (Bootstrap Loader), esto se consigue aplicando una secuencia especial en los pines RESET y TEST. A continuación se utiliza el puerto serial para acceder a la memoria, ya sea para escribir o leer su 2 contenido. La forma sugerida por Texas Instruments para realizar la conexión al puerto serial de un computador es utilizar los pines DTR y RTS del puerto para manejar los pines RESET y TEST del microcontrolador y proporcionar la secuencia necesaria, mientras los pines RX y TX se utilizan para la comunicación. Por supuesto se deben conectar mediante un cambiador de niveles para adaptar la interfaz RS232 a los niveles de tensión que utiliza el microcontrolador. Los comandos están descritos en la literatura proporcionada por TEXAS[3]. Las interrupciones en el microcontrolador pueden ser de tres tipos, de reset, enmascarables y no enmascarables. La diferencia entre estas últimas es que las enmascarables se pueden habilitar o deshabilitar individualmente o mediante el flag de habilitación general de interrupciones, en tanto las no enmascarables sólo se pueden habilitar o deshabilitar individualmente, el flag de habilitación general no afecta su comportamiento. El vector de interrupciones del microcontrolador cuenta con 16 direcciones, algunas de las cuales tienen múltiples fuentes de interrupción, por ejemplo, cualquiera de los 8 bits de los puertos 1 ó 2 puede generar una interrupción, la rutina de atención de interrupciones debe verificar el estado de los 8 flags del registro de interrupciones del puerto para saber en cual pin se generó la condición de interrupción. En la Tabla 1-2 se puede ver el vector de interrupciones del microcontrolador MSP430F149. 3 Tabla 1-2 Vector de interrupciones Fuente de i nterupci on Encendido Fl ags afectado WDT IFG Reset externo KEYV Ti po de interrupci ón Di rección Pri ori dad Reset 0FFFEh 15, mayor Watchdog Memoria Flash NMI NMIIFG (No)enmascarable Falla del oscilador OFIFG (No)enmascarable 0FFFCh 14 Violación de acceso a Flash ACCVIFG (No)enmascarable T imer_B7 T BCCR0 CCIFG Enmascarable 0FFFAh 13 T imer_B7 T BCCR1 al 6 CCIFGs, Enmascarable 0FFF8h 12 T BIFG Comparador_A CAIFG Enmascarable 0FFF6h 11 Watchdog timer WDT IFG Enmascarable 0FFF4h 10 USART 0 recepción URXIFG0 Enmascarable 0FFF2h 9 USART 0 transmisión UT XIFG0 Enmascarable 0FFF0h 8 ADC12 ADC12IFG Enmascarable 0FFEEh 7 T imer_A3 T ACCR0 CCIFG Enmascarable 0FFECh 6 T imer_A3 T ACCR1 CCIFG, Enmascarable 0FFEAh 5 T ACCR2 CCIFG, T AIFG I/O puerto 1 P 1IFG.0 al P 1IFG.7 Enmascarable 0FFE8h 4 USART 1 recepción URXIFG1 Enmascarable 0FFE6h 3 USART 1 transmisión UT XIFG1 Enmascarable 0FFE4h 2 I/O puerto 2 P 2IFG.0 al P 2IFG.7 Enmascarable 0FFE2h 1 0FFE0h 0, menor 1.3 Los puertos de entrada y salida digital El microcontrolador MSP430F149 tiene 6 puertos de 8 bits de entrada y salida, cuyos terminales se encuentran multiplexados con otros periféricos como se puede ver en la Figura 1-1 [1]. 4 Figura 1-1 Designación de patillas del microcontrolador Cada bit del puerto se puede manejar en forma independiente. El control y acceso a los puertos se realiza mediante 4 registros por cada uno de los n puertos, los que almacenan los datos de entrada (PnIN), de salida (PnOUT), la dirección de entrada o salida (PnDIR) y la función como puerto de entrada y salida o como el periférico correspondiente (PnSEL). Cuando un bit se ocupa para controlar un periférico no se configura automáticamente como de entrada o salida, sino que es trabajo del programador seleccionar el sentido correcto. Los dos primeros puertos tienen capacidad de generar interrupciones en cada uno de sus 8 bits. El registro de habilitación de interrupciones (PnIE) define que patilla del puerto genera interrupciones, el registro de selección de canto (PnIES) selecciona la transición que generará interrupciones (canto de bajada o de subida), y el registro que contiene los flags de interrupción (PnIFG) indica qué patilla generó la interrupción. Cada puerto lleva a un solo vector de interrupciones por lo que la rutina de atención de interrupciones debe verificar el estado del registro PnIFG para saber qué patilla del microcontrolador generó la interrupción. 5 1.4 El módulo de reloj El módulo de reloj del microcontrolador tiene tres fuentes de señal de reloj para alimentar otras tres señales que sincronizan la CPU y los periféricos Las fuentes de reloj son las siguientes: • Un reloj que puede funcionar con cristales o resonadores cerámicos de baja frecuencia o de alta frecuencia (LFXTCLK). El modo se selecciona por software. • Un reloj de alta frecuencia que ocupa cristales o resonadores cerámicos de alta frecuencia (XT2CLK). • Un oscilador interno de características RC controlado digitalmente mediante registros de control (DCOCLK). Con estas fuentes el módulo de reloj genera las siguientes tres señales: • Reloj maestro (MCLK): que alimenta la CPU y el sistema y se puede generar a partir de la señal de baja frecuencia, la de alta frecuencia o el oscilador digital; que pueden dividirse por un factor de 1, 2, 4 u 8. • Reloj de sub sistema (SMCLK): que alimenta a los periféricos seleccionados por software. Se puede generar a partir de la señal de baja frecuencia, la de alta frecuencia o el oscilador digital; que pueden dividirse por un factor de 1, 2, 4 u 8. • Reloj auxiliar (ACLK): que alimenta a los periféricos seleccionados por software. Se genera a partir de la señal de baja frecuencia dividida por un factor de 1, 2, 4 u 8. Esta flexibilidad en el sistema de reloj está especialmente indicada para ahorrar energía, ya que se puede ocupar un cristal de baja frecuencia, por ejemplo 32 KHz, para los periféricos, mientras la CPU se opera mediante el oscilador interno a una frecuencia que puede ir de los 800 KHz a los 8 MHz, dependiendo de la configuración y características del dispositivo en particular. Además para contrarrestar el efecto de corrimiento de frecuencia del oscilador interno se puede corregir periódicamente con la señal más estable proveniente del oscilador de baja frecuencia controlado por cristal. 6 El siguiente es un esquema del módulo generador de reloj [1]: Figura 1-2 Módulo de reloj 7 1.5 El multiplicador por hardware Algunos miembros de la familia de microcontroladores MSP430 cuentan con un módulo de multiplicación de 16 bits incorporado en su hardware, de forma que puede realizar multiplicaciones en tiempos que van desde un ciclo de reloj, dependiendo de la forma de direccionamiento de los parámetros. En particular el MSP430F149 cuenta con este periférico. Puede realizar 4 tipos de operaciones: multiplicaciones con signo (MPYS), sin signo (MPY), multiplicaciones acumuladas con signo (MACS) y multiplicaciones acumuladas sin signo (MAC). El modo se selecciona al escribir el primer operando (OP1) en un registro distinto para cada modo, la multiplicación se ejecuta al escribir el segundo operando (OP2). Dependiendo del modo de direccionamiento del segundo operando el resultado puede estar disponible al siguiente ciclo de máquina. El resultado se obtiene en tres registros de 16 bits, uno almacena los 16 bits más bajos del resultado (RESLO). Los otros dos almacenan información que depende del tipo de operación (RESHI y SUMEXT). El diagrama se muestra en la Figura 1-3 [1]. Figura 1-3 Diagrama del multiplicador por hardware 8 1.6 Modos de bajo consumo La familia de microcontroladores MSP430 tiene 5 modos de operación, uno activo (AM), y 4 de bajo consumo (LPMn) que se seleccionan escribiendo ciertos bits del registro de estado (SR). La diferencia entre cada uno de los modos es la cantidad de periféricos que quedan apagados, y el tiempo que le lleva al microcontrolador retomar su operación normal, que de todas formas no excede los 6 µS. En cuanto al consumo el modo 3 en el que se detiene la CPU pero se mantiene en función un reloj de baja frecuencia para mantener un reloj de tiempo real, el consumo es de alrededor de 2 µA. En el modo 4, en que se detiene toda actividad pero se mantiene el estado de la memoria RAM el consumo es de tan sólo 0,2 µA. Para obtener el mejor rendimiento en sistemas portátiles el microcontrolador es llevado al modo 3 y mediante interrupciones generadas por uno de los temporizadores se activa momentáneamente la CPU para realizar las operaciones del programa, luego se vuelve a llevar al modo de bajo consumo. 1.7 Los temporizadores Existen tres temporizadores disponibles en el microcontrolador MSP430F149, uno que realiza la función de perro guardián (watchdog). Un temporizador/contador que cuenta con 3 registros de captura o comparación y otro que cuenta con 7 registros de captura o comparación. Más detalles a continuación: 1.7.1 El temporizador watchdog La principal función del temporizador de watchdog es reiniciar el procesador después de una falla en el software o al no producirse un evento esperado, al completarse un período de tiempo determinado (timeout). Es decir, el programador selecciona un tiempo adecuado y dentro del programa reinicia periódicamente el temporizador, cuando el software se bloquee por alguna razón el procesador será reiniciado por el temporizador de watchdog al término del ciclo actual del temporizador. 9 Todo programa para este microcontrolador debe comenzar configurando o desactivando el temporizador de watchdog, ya que el microcontrolador se reinicia con esta función activada de forma predeterminada. Si no se utiliza como temporizador de watchdog el temporizador se puede utilizar para generar intervalos de tiempo, por ejemplo para generar interrupciones. El período del temporizador se fija seleccionando la fuente de reloj que puede ser el reloj auxiliar (ACLK) o el reloj de sub sistemas (SMCLK) y el factor de división que puede ser 62, 512, 8192 ó 32768. Los valores son configurados mediante el registro de control del temporizador de watchdog (WDTCTL). 1.7.2 Los Temporizadores A y B Estos son temporizadores o contadores con registros de captura o comparación con la capacidad de generar múltiples salidas o interrupciones. La principal diferencia entre los temporizadores A y B es que el segundo tiene la posibilidad de seleccionar la longitud del registro temporizador entre 8, 10, 12 ó 16 bits, en tanto el primero tiene un registro de longitud fija de 16 bits. Además el temporizador B tiene 7 registros de captura o comparación, en tanto el A tiene sólo 3. Por cada uno de los registros de captura o comparación se tiene una etapa de salida. Además los registros de captura o comparación del temporizador B pasan por un buffer adicional y se pueden agrupar. En modo de temporizador las fuentes del reloj pueden ser las señales ACLK, SMCLK o una señal externa a través de los pines TACLK (TBCLK) o INCLK. A su vez la fuente de reloj elegida puede ser dividida por un factor de 2, 4 u 8 mediante los bits IDx del registro de control TACTL (TBCTL). Puede funcionar en uno de cuatro modos, seleccionado con los bits MCx 10 Tabla 1-3 Modos del contador MCx Modo Descripción 00 Detenido El temporizador está detenido 01 Arriba El temporizador TACCR0(TBCL0) 10 Continuo Cuenta desde cero hasta 0xFFFF para el temporizador A o los bits indicados por TBCNTLx y parte desde 0 nuevamente 11 Arriba y abajo Cuenta desde cero hasta 0xFFFF para el temporizador A o los bits indicados por TBCNTLx y hacia cero nuevamente cuenta desde cero hasta Para mayor claridad se muestran las siguientes figuras del manual del usuario del microcontrolador. Figura 1-4 Modos del temporizador A como temporizador/contador (a) Modo hacia arriba, (b) modo continuo, (c) modo hacia arriba y abajo. 11 Figura 1-5 Modos del temporizador B como temporizador/contador (a) Modo hacia arriba, (b) modo continuo, (c) modo hacia arriba y abajo. En cada una de las situaciones anteriores se tiene la posibilidad de generar interrupciones (serán tratadas más adelante). El modo de captura se utiliza para capturar eventos temporales, como medidas de velocidad o tiempo. Primero el usuario selecciona la señal interna o externa que provocará la captura y el canto de subida, bajada o ambos. Cuando se produce la condición seleccionada el valor actual del contador TAR (TBR) se copia al registro de captura programado (3 módulos para el temporizador A y 7 módulos para el B), al mismo tiempo al flag de interrupción del módulo correspondiente se le escribe el valor uno, produciéndose una interrupción si está habilitada. El modo de comparación se utiliza para generar señales de modulación de ancho de pulso (PWM) o para generar interrupciones a intervalos específicos. Cuando el valor del contador TAR (TBR) llega a TACCRx (TBCCRx) se escribe un uno en el flag de interrupción del temporizador y se produce la salida según se halla programado. En este punto los dos temporizadores difieren levemente debido al doble buffer del temporizador B. En el temporizador B se puede elegir el momento en que se actualizan los 12 latch de comparación con el valor de los registros de comparación, que son los que el usuario manipula. Además se puede agrupar varios latch para su actualización simultánea. El momento se refiere al valor del contador TBR. Los bloques de salida se ocupan en el modo de comparación para generar 7 tipos de salidas seleccionables por el usuario a través de los 3 bits OUTMODx de los registros de configuración de los módulos de salida TACCTLx (TBCCTLx). Como ejemplo se muestra en la figura 1.6 el temporizador B en modo contador continuo y las salidas que se obtienen en cada uno de los 7 modos, EQUx son señales internas. Figura 1-6 Salidas del temporizador B en modo contador continuo Asociado a cada uno de los temporizadores existen dos vectores de interrupción, el primero corresponde a interrupciones generadas por el flag CCIFG de TACCR0 (TBCCR0), el segundo corresponde a interrupciones generadas por los restantes flags CCIFG de los registros TACCRx (TBCCRx). 13 Los flags se activan en modo de captura cuando un valor es capturado al registro correspondiente y en modo de comparación el flag responde cuando el valor del contador alcanza el valor del registro correspondiente. Asociado al segundo vector de interrupción existe un registro, TAIV (TBIV), que indica el módulo de captura o comparación que generó la interrupción, cada uno escribe un valor en el registro que puede utilizarse en instrucciones de salto para llegar a la rutina correspondiente. 1.7.3 El comparador analógico y los conversores análogo a digital El microcontrolador contiene un comparador de voltaje analógico, cuyo esquema se muestra en la Figura 1-8, obtenido del manual del usuario del microcontrolador. Las dos entradas son seleccionables por el usuario entre señales externas o niveles generados internamente en el procesador de 0.25Vcc, 0.5Vcc o el voltaje de umbral de un transistor de aproximadamente 0,55 V. Cuando el valor del voltaje en el terminal + es mayor al del terminal – la señal de salida CAOUT va a estado alto. La salida puede o no ser filtrada con un filtro pasabajos RC interno para aminorar las oscilaciones que se producen cuando las señales son muy parecidas. La señal de salida está conectada al primer bloque de captura del temporizador A para realizar mediciones de tiempo, además puede generar interrupciones con el flag CAIFG en los cantos de subida o bajada de la señal CAOUT. El efecto de la utilización del filtro se puede ver en la Figura 1-7. Figura 1-7 Efecto del filtro pasabajos en la salida 14 Figura 1-8 Diagrama del comparador analógico Una de las características distintivas de la familia de microcontroladores es la incorporación de conversores análogo a digital. El MSP430F149 tiene un conversor de 12 bits con una tasa de muestreo de casi 200 mil muestras por segundo, el inicio de la conversión se puede realizar por software o por señales provenientes de los temporizadores; el término de la conversión puede generar interrupciones para alertar al procesador; la referencia positiva se puede seleccionar entre una señal externa o interna fija de 1.5 V ó 2.5 V; la referencia negativa se puede seleccionar entre una señal externa o la tensión de tierra negativa. El sistema tiene 8 canales configurables independientemente, además de 4 señales internas provenientes de un sensor de temperatura en el procesador y los niveles de los voltajes de referencia. Tiene un buffer de 16 direcciones de memoria configurables para almacenar las muestras antes de alertar al procesador. Tiene múltiples fuentes de interrupción atendidas por el mismo vector de interrupciones, pero diferenciables con el registro de interrupción que almacena un valor diferente para cada fuente. El diagrama completo del módulo conversor como aparece en el manual del usuario se muestra en la Figura 1-9. 15 Figura 1-9 Diagrama del conversor análogo a digital El resultado de la conversión asume el valor de 0xFFF cuando la señal de entrada (Vin) es igual o superior a VR+ y toma el valor de 0x000 cuando la señal de entrada es igual o inferior a VR-. Para otros valores la fórmula de conversión es: N ADC = 4096 × V in − V R − VR + − VR − El reloj puede provenir de SMCLK, MCLK, ACLK, o de un reloj generado internamente ADC12CLK que está en el rango de los 5 MHz, cualquiera de las fuentes elegidas se puede dividir por un factor de 1 hasta 8. 16 La conversión se inicia en el canto de subida de la señal interna SHI, que se selecciona entre: el bit ADC12SC controlado por software, o la etapa de salida 1 del temporizador A, o la 0 o la 1 del temporizador B. Esta señal a su vez controla la señal SAMPCON que sincroniza las etapas de muestreo y retención y la etapa de conversión que toma 13 ciclos del reloj ADC12CLK. En la Figura 1-10 se ve un ciclo completo de muestreo y conversión. Figura 1-10 Tiempos de muestreo y conversión El conversor puede funcionar en uno de cuatro modos seleccionados con los bits CONSEQx del registro de control ADC12CTL1, sus características se resumen en la Tabla 1-4. Tabla 1-4 Modos de operación del conversor análogo a digital CONSEQx Modo Operación 00 Un canal una conversión Un canal se convierte una sola vez 01 Secuencia de canales Una secuencia de canales es convertida una vez 10 Repetir un canal Un canal se convierte repetidas veces 11 Repetir secuencia de canales Una secuencia de canales se repite varias veces 17 Las 16 direcciones de memoria que almacenan los datos ADC12MEMx se configuran con sus correspondientes 16 registros de control ADC12MCTLx. Se puede configurar independientemente para cada una el canal y la fuente para las referencias. Además el bit EOS indica el fin de secuencia cuando se selecciona una conversión secuencial. La conversión comienza usando el registro de control seleccionado con los bits CSTARTADDx del registro ADC12CTL1 y en caso de una conversión secuencial continúa con los registros de control restantes hasta encontrar el bit EOS. Si no se utiliza una conversión secuencial el único registro utilizado es el indicado por CSTARTADDx. El módulo puede generar 18 condiciones de interrupción: ADC12IFG0ADC12IFG15, que se activan cuando la correspondiente memoria es cargada con un dato, ADC12OV activada cuando se sobrescribe una zona de memoria, y ADC12TOV si se quiere iniciar una conversión antes del término de la actual. Todas las interrupciones, si están habilitadas, van al mismo vector de interrupción, la fuente específica se distingue con el valor almacenado en el registro ADC12IV, que puede utilizarse para saltar rápidamente a la rutina de atención que corresponda. 18 Capítulo 2 La tarjeta de desarrollo EasyWeb II Para el trabajo en el laboratorio se eligió la tarjeta de desarrollo EasyWeb II fabricada por Olimex, ver Figura 2-1. Se escogió esta tarjeta debido a la gran cantidad de periféricos incorporados en relación al costo de la misma. Otros fabricantes ofrecen tarjetas de similares características pero a más del doble del precio. A grandes rasgos consiste de un microcontrolador MSP430F149, con un cristal de 8 MHz, un controlador de red CS8900A de Cirrus Logic con los componentes externos correspondientes, un cambiador de niveles RS232 con su respectivo conector DB9 hembra, un display de cristal líquido alfanumérico de 16x2 caracteres, cuatro pulsadores, cuatro entradas optoacopladas, 2 salidas activadas por relé, un zumbador, una memoria flash serial de 64 KB en la tarjeta, conector para dispositivos iButton de Dallas Semiconductor, patilla de entrada del reloj del temporizador A disponible en conector, conector para los conversores análogo a digital del microcontrolador, conector para los pines JTAG del microcontrolador. Figura 2-1 Tarjeta de desarrollo 2.1 Descripción del circuito Los nombres de los buses de datos y su correspondiente patilla del microcontrolador utilizados en la presente sección se refieren al diagrama de la Figura 2-2. 19 Figura 2-2 Esquema de conexiones del microcontrolador La tarjeta se alimenta con una fuente de corriente continua de 12 V que se conecta directamente a los relés y a los reguladores de voltaje de tres terminales. Mediante un circuito LM317L se generan los 3,6 V que utiliza el microcontrolador, la memoria serial, el cambiador de niveles RS232, los optoacopladores y las resistencias de pull-up conectadas a los pulsadores. Además se generan 3,3 V, también con un circuito LM317 para el controlador ethernet CS8900A. Con un regulador 78L05 se generan 5 V para el display de cristal líquido. El esquemático correspondiente a las fuentes de tensión se muestra en la Figura 2-3. 20 Figura 2-3 Diagrama de fuente de alimentación Los cuatro pulsadores se conectan a los puertos de entrada y salida del microcontrolador utilizando resistencias de pull up para mantener los niveles lógicos estables [1] como se puede ver en la Figura 2-4. 21 Figura 2-4 Conexión de pulsadores Debido a que el dispositivo acepta niveles de tensión de entrada hasta el valor de VCC las entradas digitales se conectan al microcontrolador mediante optoacopladores. Para ello se utiliza el circuito 4N37 de Fairchild Semiconductor, ver Figura 2-5. Figura 2-5 Esquema de optoacoplador La entrada al optoacoplador se conecta mediante un led indicador y una resistencia de limitación de corriente de 330 Ω, la hoja de características del dispositivo indica 100 mA como nivel de corriente directa de forma segura en el emisor [4], lo que indica que la tarjeta puede aceptar un nivel de tensión de hasta 33 V de forma segura. El esquema se puede ver en Figura 2-6. 22 Figura 2-6 Conexión de optoacopladores En la tarjeta se encuentran disponibles 2 salidas activadas con relé lo que posibilita manejar cargas de hasta 10 A a 220 V. Como es usual se tiene una conexión normalmente conectada y otra normalmente abierta. Para activar los relés se utiliza un transistor a efecto de amplificar la corriente de la salida del microcontrolador a un nivel suficiente para estimular los relés, además se cuenta con un led para indicar cuando el relé está activo, el diagrama de conexión se muestra en la Figura 2-7 Figura 2-7 Conexión de relés La memoria flash serial se conecta directamente a los pines del microcontrolador. Debido a que este microcontrolador no cuenta con el protocolo Inter Integrated Circuit (I2C), se debe programar por software y utilizar pines de entrada y salida estándar para generar las señales necesarias, que son una línea de reloj (SCL) y otra de datos (SDA). Ver Figura 2-8. 23 Figura 2-8 Conexión a la memoria Flash El módulo de cristal líquido GDM1602K de Xiamen Ocular se conecta directamente al microcontrolador por medio de un conector montado en la placa de circuito. En este caso la comunicación se realiza por medio de 6 pines. Cuatro de ellos llevan los datos de 8 bits, trasmitiendo los cuatro bits altos del dato seguido de los 4 bits bajos, sincronizados mediante una señal de control (E). El esquema se muestra en la Figura 2-9. Figura 2-9 Conexión del display de cristal líquido La comunicación serial del microcontrolador con dispositivos que siguen la norma RS232 se realiza con dos señales TX y RX conectadas directamente a los pines del puerto serie universal 1 del microcontrolador, los niveles de tensión se adaptan mediante el circuito integrado MAX3232 según el esquema que se puede ver en la Figura 2-10. Utilizando terminología del protocolo RS232 la tarjeta está conectada como un Data Communications Equipment (DCE), porque presenta un conector hembra y el pin de transmisión es el 2 y el de recepción es el 3. 24 Figura 2-10 Conexión del puerto serial Para conectar a un PC se debe conectar un cable con un conector hembra por un lado que se conecta al puerto serial del PC (Data Communication Equipment, DCE), y un conector macho por el otro que se conecta a la tarjeta. Las conexiones son del pin 2 de uno al pin 2 del otro y del pin 3 de uno al pin 3 del otro, y el cable de tierra entre los pines 5 de cada conector como se muestra en la Figura 2-11. Figura 2-11 Conexiones de cable serial En la tarjeta se encuentran disponibles dos conectores que permiten acceso a las entradas de los conversores análogo a digital del microcontrolador. Además se puede acceder a los pines de transmisión serial, a los pines de comunicación con la memoria flash, al pin de reset del microcontrolador, al pin que lleva el reloj auxiliar generado por el módulo de reloj del microcontrolador en P2.0 y a los niveles de tensión generados por los reguladores. Ver Figura 2-12 25 Figura 2-12 Esquema de conectores El controlador ethernet CS8900A se conecta mediante un bus ISA estándar, pero además tiene la capacidad de utilizar un bus de datos de 8 bits, en el que se multiplexan los bytes altos y bajos de los datos de 16 bits que ocupa el controlador. Esta característica lo hace especialmente indicado para utilizarse en sistemas embebidos, así se reduce el número de pines dedicados a la interconexión a sólo 14, que son: 8 para transmisión de datos, 4 para indicar la dirección de memoria para escritura o lectura (los restantes 16 se conectan directamente a tierra o VCC para configurar la dirección base), y 2 para señalización de lectura y escritura. El controlador ethernet maneja dos leds que indican enlace establecido y actividad en el enlace. La conexión al medio ethernet se realiza mediante un transformador de aislamiento y un conector RJ45 estándar. El diagrama se muestra en la Figura 2-13. 26 Figura 2-13 Conexión del controlador ethernet Por último se encuentran en la placa de circuito un zumbador conectado directamente a dos pines del puerto 4 del microcontrolador, la frecuencia del sonido se puede controlar por software. Además los cuatro pines del puerto JTAG se encuentran en un conector para facilitar su interconexión con la herramienta de interfaz hacia el puerto paralelo del PC. Esta herramienta es relativamente sencilla, su principal propósito es de buffer y aislación para los pines que se ocupan en la comunicación serial, además tiene la posibilidad de ocupar las señales no utilizadas del puerto paralelo del PC para generar 3,3 V que pueden alimentar un circuito mientras se programa o emula, en el caso particular de la tarjeta EasyWeb II es la tarjeta la que alimenta al programador, ya que no se podría obtener suficiente corriente desde el puerto paralelo para alimentar al programador y a la tarjeta. En la Figura 2-14 se ve la apariencia de la herramienta de programación y en la Figura 2-15 su diagrama esquemático. 27 Figura 2-14 Programador y emulador Figura 2-15 Esquemático del programador 28 Capítulo 3 Introducción a protocolos de comunicación entre dispositivos En el presente capítulo se pretende introducir algunas formas y protocolos de comunicación entre dispositivos utilizados en sistemas con microcontrolador. Debido a la falta de un estándar para interconectar circuitos integrados dentro de la misma placa de circuito o a cortas distancias, algunos fabricantes han elaborado sistemas propietarios, lo que ha generado una multiplicidad de protocolos incompatibles entre sí, entre los más ampliamente utilizados se encuentran: SPI (Serial Peripheral Interface) de Motorola, Microwire de National Semiconductor [5] e Inter Integrated Circuit (I2C) de Philips. Además existen muchos otros protocolos para aplicaciones específicas, por ejemplo en la industria automotriz se han desarrollado una gran cantidad de protocolos para comunicar dispositivos, solo por nombrar algunos: Controller Area Network (CAN), ISO11783, Local Interconnect Network (LIN), Media Oriented Systems Transport (MOST). La mayoría de ellos comparte dos características básicas, la de operar con los mismos niveles de voltaje que los dispositivos que interconectan, es decir, no se necesitan cambiadores de nivel; y ser sincrónicos, lo que permite una comunicación confiable a pesar de las diferencias que puedan producirse en los relojes de cada dispositivo, así un corrimiento en frecuencia no producirá errores en la transmisión o recepción, debido a que ambos dispositivos están sincronizados con una señal de reloj única para la comunicación. A continuación se detallarán las diferencias, entre Microwire, SPI e I²C, comparando sus ventajas y desventajas según la aplicación Microwire y SPI son muy parecidos [6], ambos consisten en 3 terminales que llevan datos seriales de entrada, de salida y señal de reloj, debido a esto son full duplex por naturaleza. Los dispositivos que interconectan deben compartir los mismos niveles de tierra y VCC. Son útiles en ambientes en los que existe un dispositivo maestro (el que genera la señal de reloj) y uno o varios esclavos. Debido a que el protocolo no incluye direccionamiento de dispositivos el maestro debe habilitar al dispositivo al que se quiere comunicar a la vez que deshabilita a los demás, esto representa una gran desventaja cuando existe más de un esclavo ya que aumenta la cantidad de pines necesarios en el microcontrolador (maestro) necesarios para la comunicación. Una de las ventajas de estos protocolos es que son sensibles al canto de la señal, lo que la hace un poco más inmune al ruido 29 que si fuera activada por nivel. La velocidad de transmisión es uno de los puntos fuertes de estos protocolos, en sucesivas revisiones de ellos se ha ido subiendo la velocidad máxima hasta los 3 Mbits/s para Microwire y 10 Mbits/s en el caso de los últimos dispositivos SPI [6]. 3.1 El protocolo I²C y la memoria EEPROM serial 24LC515 I²C [7] es un bus serial, half duplex de 2 cables bidireccionales: datos (Serial Data, SDA) y señal de reloj (Serial Clock, SCL); puede interconectar uno o varios maestros (el dispositivo que comienza la comunicación y genera la señal de reloj) con uno o varios esclavos (que son direccionados por el maestro). El protocolo incluye un campo de direccionamiento de 7 ó 10 bits según el modo que se utilice, lo que permite tener varios dispositivos conectados al mismo bus. Incluye la posibilidad de que exista más de un maestro en el bus mediante detección de colisiones y control de acceso al bus. La tasa de transmisión es de 100 Kbits/s en el modo estándar, de 400 Kbits/s en el modo rápido, y recientemente el modo de alta velocidad aumentó la tasa máxima de transmisión a 3,4 Mbits/s, pero actualmente existen pocos dispositivos que soporten esta velocidad. La comunicación comienza con las dos líneas (SDA y SCL) en estado alto. Luego el maestro señaliza el comienzo de la comunicación escribiendo un cero en la línea de datos mientras la señal de reloj sigue en estado alto. Enseguida envía los 7 bits de dirección del dispositivo esclavo con el que se quiere comunicar, el formato de transmisión comienza con el bit más significativo primero y se envía en grupos de ocho bits. El octavo bit del primer octeto enviado le indica al esclavo si se debe preparar para recibir o enviar información, un uno indica recepción por parte del maestro. A continuación el esclavo debe responder con un bit de reconocimiento (ACK), tras lo cual comienza la comunicación, transmitiendo un byte a la vez y con el bit de ACK, un cero, por parte del dispositivo que recibe la información. Al finalizar la comunicación el maestro debe generar la condición de término, que consiste en una transición de 0 a 1 de la señal SDA mientras la señal SCL está en 1. Se recuerda que este protocolo es sensible al nivel de la señal por lo que la información en SDA debe ser estable mientras SCL se encuentra en estado alto, con la única excepción de las condiciones de inicio 30 y fin de transmisión. Un ejemplo completo de una transferencia se puede ver en la Figura 3-1. Figura 3-1 Comunicación I²C El protocolo permite a un dispositivo esclavo interrumpir la transmisión cuando no es lo suficientemente rápido para procesar la información que está recibiendo, esto lo logra escribiendo un cero en la línea de reloj (SCL) después de generar un ACK al transmisor. Al detectar esta condición el transmisor censa la línea de reloj hasta que el receptor devuelve la línea al estado alto. Además el maestro tiene permitido disminuir la frecuencia del reloj para hacer más lenta la comunicación. En el caso de los modos rápidos y de alta velocidad, que pueden utilizar un campo de direccionamiento de 10 bits, esta condición se indica mediante un patrón especial en el primer octeto de la dirección, junto con el bit de lectura o escritura; y en el segundo byte se envía el resto de la dirección. Las direcciones de los dispositivos esclavos son asignadas por un comité, y el protocolo es licenciado por Philips Semiconductors a los fabricantes que quieran incorporarlo a sus productos. En algunos casos un dispositivo puede tener una parte de la dirección fija y otra programable, con el objetivo de tener varios dispositivos iguales conectados al mismo bus. Este es el caso de la memoria serial 24LC515 de Microchip [8] incorporada en la tarjeta de desarrollo EasyWeb II. Está preparada para funcionar en modo rápido, es decir, con una frecuencia de reloj máxima de 400 KHz y tiene dos pines especiales para indicar la dirección del dispositivo, por lo que se puede tener hasta cuatro de ellas conectadas al mismo bus, con un total de 64KB por cuatro, es decir 256 KB en total. Ajustándose al estándar I²C el primer byte tiene la estructura que se puede ver en la Figura 3-2. 31 Figura 3-2 Byte de control Comienza con la condición de Start del protocolo seguido de la dirección del dispositivo que en este caso consiste de los bits 1010, seguido de un bit que indica el bloque de 32 KB (alto o bajo) al que se desea acceder, seguido de dos bits que sirven para direccionar hasta cuatro memorias conectadas al mismo bus, el byte concluye con el bit de lectura o escritura. El dispositivo esclavo que se está direccionando debe reesponder con el bit de ACK en el noveno ciclo de reloj. A continuación el dispositivo maestro envía dos bytes con los 15 bits de la dirección de memoria que se quiere acceder, estos 15 bits más el bit indicador de bloque permiten direccionar los 64 KB de la memoria. En caso de existir más de una memoria en el mismo bus los bits A0 y A1 correctamente conectados en las memorias expanden la cantidad máxima direccionable hasta 256 KB. La secuencia completa de direccionamiento se puede ver en la Figura 3-3. Figura 3-3 Direccionamiento de la memoria Después de cada byte el dispositivo esclavo responde con ACK. En el caso de una escritura en memoria (el bit de R/W en cero), el maestro envía el dato a escribir, y el esclavo responde con ACK, ver Figura 3-4, si no se desea 32 escribir más datos el maestro genera la condición de STOP tras lo cual el 24LC515 comienza el ciclo de escritura en el arreglo; en caso de que se desee escribir una secuencia de datos se envían hasta 64 bytes en forma secuencial, los que son almacenados por la memoria en un buffer interno, al recibir la condición de STOP por parte del maestro, la memoria comienza el ciclo de escritura de los bytes desde el buffer hacia el arreglo, ver Figura 3-5. Figura 3-4 Escritura de un byte Figura 3-5 Escritura de una página de hasta 64 bytes Mientras el dispositivo está ocupado realizando una operación de escritura no responderá con ACK a un direccionamiento, condición que le sirve al maestro para saber cuando el dispositivo está listo para otra operación, el diagrama de flujo del proceso necesario se muestra en la Figura 3-6. 33 Envío de comando de escritura Envío condición de STOP para comenzar ciclo de escritura Enviar byte de control con R/W en cero ¿Se recibe ACK? No Si Siguiente operación Figura 3-6 Diagrama de flujo de fin de escritura El procedimiento para efectuar una lectura en la memoria es similar a la escritura, pero se distinguen dos situaciones: Si se desea acceder a una dirección aleatoria dentro de la memoria se debe enviar primero en una operación de escritura (R/W en 0) la dirección específica, tras lo cual se puede ejecutar una operación de lectura (R/W en 1) y el dispositivo envía el dato requerido; en respuesta el maestro puede generar un ACK si se quiere leer posiciones sucesivas de memoria (ver Figura 3-8), u omitir el ACK y enviar una condición de STOP para concluir la transmisión (ver Figura 3-7). El circuito integrado contiene un puntero que almacena la última dirección de memoria accesada, por lo que se puede realizar operaciones de lectura de la dirección actual sin enviar una nueva dirección (ver Figura 3-9), esta característica permite realizar una lectura secuencial de todo el bloque (32 KB) en forma sucesiva. 34 Figura 3-7 Lectura de posición aleatoria Figura 3-8 Lectura de posiciones sucesivas Figura 3-9 Lectura de dirección actual El protocolo especifica que las señales SDA y SCL deben operarse con conexiones de colector abierto para poder generar un wired AND en el bus, en caso de que varios maestros quieran iniciar una comunicación simultáneamente. El MSP430 es capaz de emular este tipo de conexión en cualquiera de los pines de entrada y salida [9]. Esto se logra escribiendo un cero en el registro de salida del puerto correspondiente y manejando el nivel en la salida mediante el registro de dirección. Si se requiere un cero en la salida, el pin se configura como salida, con lo que el valor de 0 escrito en el registro se refleja en la salida. Si se quiere un 1 en la salida el pin se configura como entrada, de esta forma la resistencia de pull up interna fija el nivel en 1 de forma estable. La lectura se efectúa siempre mediante el registro de entrada del puerto. 35 3.2 Los dispositivos iButton de Dallas Semiconductors y el protocolo propietario 1-Wire Dallas Semiconductors desarrolló una forma de interconectar dispositivos, por ahora sólo fabricados por ellos, pero con la posibilidad de licenciar a otros fabricantes. La principal característica de este protocolo es que sólo necesita 1 línea de comunicación, además de una tierra común, que lleva los datos de la comunicación y le provee energía al dispositivo. Además cada dispositivo tiene un código de 64 bits propio, lo que permite tener varios conectados al mismo bus y direccionarlos individualmente. Entre la gama de dispositivos disponibles se encuentran conversores análogo a digital, sensores de temperatura, potenciómetros digitales, memoria de variados tipos, interruptores digitales, y otros. Con esto este protocolo no es más que otro protocolo de comunicación serial más, pero los circuitos pueden venir tanto en encapsulados típicos para circuito impreso como en la forma de encapsulado iButton en que se obtienen características especiales. Este encapsulado consiste en un montaje de dos piezas de acero circulares de 16 mm de diámetro (ver Figura 3-11) que contienen en su interior el circuito integrado y que además de protección sirven para comunicar la tierra y la línea 1-Wire del dispositivo hacia el exterior como se muestra en la Figura 3-10. Figura 3-10 Esquema eléctrico de iButton 36 Figura 3-11 Apariencia de un dispositivo iButton Entre la gama de dispositivos disponibles existen algunos que sólo contienen su código de identificación, termómetros digitales, termómetros con almacenamiento de las muestras tomadas a intervalos programables (almacenadas en RAM y alimentada por batería de litio interna), memorias no volátiles de variados tipos, relojes de tiempo real, memorias protegidas con algoritmos de encriptación de alto nivel, microcontroladores con máquina virtual Java. Además existen puntas de prueba para conectarlos a microcontroladores o computadores (con adaptadores para puerto serial, paralelo o USB). La característica de portabilidad de estos dispositivos y su robusto encapsulado permite una gran variedad de aplicaciones, desde control de acceso utilizando su código de identificación, almacenamiento de información sensible, control in situ de la temperatura. Los que cuentan con encriptación de datos están pensados para utilizarse como medio de pago electrónico. El microcontrolador con máquina virtual Java ejecuta aplicaciones principalmente orientadas a la encriptación y certificación (firma electrónica, acreditación de identidad en transacciones). La interconexión con microcontroladores se realiza mediante una línea conectada a VCC a través de una resistencia de Pull-up, en estado de reposo el nivel de la línea es alto, cuando el dispositivo iButton se pone en contacto se carga un condensador interno, lo que le provee la energía necesaria para su funcionamiento. Existen algunos que necesitan un nivel mayor de voltaje para realizar algunas operaciones (conversión de temperatura, grabado de memoria EEPROM), para ellos es necesario sacrificar una línea de control en el dispositivo maestro para manejar un transistor que conecta la línea de comunicación directamente a VCC (saltando la resistencia de pull-up) después de dar la instrucción que requiere mayor voltaje. El protocolo 1-Wire es half duplex y asincrónico por lo que las rutinas para controlar los tiempos de duración de cada pulso deben ser lo más precisas posibles y estar dentro de los rangos de cada dispositivo en particular. La comunicación comienza con el microcontrolador enviando un pulso (cero) de reset en la línea a lo que el dispositivo responde mediante un 37 pulso avisando su presencia como se muestra en la Figura 3-12, obtenida de las hojas de características de un termómetro digital iButton. Figura 3-12 Pulso de reset y presencia La escritura se realiza en ranuras de tiempo que miden entre 60 y 120 µS con un período mínimo de recuperación de 1 µS, el dispositivo iButton muestrea la línea aproximadamente en la mitad de la ranura. La escritura comienza con el dispositivo maestro escribiendo un cero en la línea, si se quiere enviar un cero al dispositivo iButton se mantiene el cero durante todo el período, si se quiere enviar un uno se sube la línea después 15 µS. De las hojas de características mencionadas se obtuvo la Figura 3-13. Figura 3-13 Escritura en dispositivos iButton La lectura también se realiza en ranuras de tiempo de entre 60 y 120 µS con un período de recuperación mínimo de 1 µS. El dispositivo maestro comienza enviando un pulso de 1 µS y en seguida cede el control de la línea al dispositivo iButton, el que responde colocando un cero o un uno según corresponda, el maestro debe muestrear la línea después de 15 µS del inicio de la ranura de tiempo, en la figura 3-14 se muestra un esquema del proceso. 38 Figura 3-14 Lectura desde dispositivos iButton La mayor dificultad de implementar este protocolo en microcontroladores radica en la generación de los tiempos necesarios. Las rutinas aunque simples dependerán de factores como el reloj del microcontrolador, posibles interrupciones, etc. En forma general se puede resumir las operaciones en los siguientes diagramas de flujo: Escribir cero en la línea Generar retardo de 480 µS Volver la línea a estado alto Retardo de 70 µS Leer la línea y determinar presencia o ausencia de dispositivo Figura 3-15 Generación de reset y estado de dispositivo 39 Escribir cero en la línea para comenzar la ranura de tiempo Volver la línea a estado alto Retardo de 15 µS desde el comienzo de la ranura Leer estado de la línea, esperar hasta el fin de la ranura de tiempo y retornar estado Figura 3-16 Lectura de un bit desde dispositivo iButton Escribir cero en la línea para comenzar la ranura de tiempo Se quiere escribir un “1” Si Regresar la línea a estado alto No Mantener en estado bajo Mantener estado hasta el fin de la ranura de tiempo Regresar la línea a estado alto Figura 3-17 Escritura de un bit en dispositivo iButton 40 Cada dispositivo en particular tiene su repertorio de instrucciones, por lo que la programación de una aplicación debe realizarse mediante sus hojas de características. Existen algunas instrucciones compartidas como: leer el código identificatorio, o generar un CRC para comprobar los datos transmitidos. 41 3.3 Control de un módulo de cristal líquido alfanumérico La comunicación entre el microcontrolador y el display de cristal líquido se realiza indirectamente a través de un controlador montado en el módulo. Esta es una práctica habitual para liberar pines de conexión en el microcontrolador y dejar el trabajo de desplegar la información y refrescar la pantalla a un controlador especializado. En el caso del módulo disponible en la tarjeta de desarrollo el controlador es un KS0066U. La interconexión se realiza mediante un bus paralelo que puede ser de 4 u 8 bit, más 3 señales de control. Además el módulo ocupa otras tres señales para llevar tierra, Vcc y el voltaje de control para el contraste. Sus funciones se detallan en la Tabla 3-1. Tabla 3-1 Función de pines del módulo de cristal líquido Número de pin Función 1 Tierra 2 VCC 3 Voltaje de control de contraste 4 “R/S” selección de instrucción o registro 5 “R/W” lectura escritura de registros 6 “E” sincronización en modo de 4 bits 7 - 14 D0-D7 4 u 8 bits de datos En el caso de la tarjeta de desarrollo utilizada se utiliza la conexión con un bus de 4 bits, se transmiten en forma serial los cuatro bits altos del dato seguidos de los 4 bits bajos, sincronizados con la señal E, por simplicidad la señal del módulo R/W se encuentra cableada a tierra, de modo que sólo es posible realizar escrituras en los registros del controlador, la indicación de si el dato transmitido corresponde a un dato o una instrucción se expresa mediante la señal R/S. Así que la interconexión entre el microcontrolador y el controlador del módulo se realiza con 6 señales, conectadas directamente a puertos del microcontrolador. 42 Los comandos se envían al controlador mediante una palabra de 8 bits, las instrucciones disponibles (sólo las que escriben registros en el controlador) se resumen en la tabla Tabla 3-2 Comandos del módulo de cristal líquido R/S R/W D7 D6 D5 D4 D3 D2 D1 D0 Descripción 0 0 0 0 0 0 0 0 0 1 Borrar display 0 0 0 0 0 0 0 0 1 * Regresar cursor al comienzo 0 0 0 0 0 0 0 1 ID S Fijar dirección de movimiento cursor y desplazar display 0 0 0 0 0 0 1 D C B Habilitar display, intermitencia del cursor 0 0 0 0 0 1 SC RL * * Mover cursor/desplazar display 0 0 0 0 1 DL N F * * Fijar largo de la interfaz 0 0 0 1 A A A A A A Mover cursor en RAM 0 0 1 A A A A A A A Mover cursor a display 0 1 BF * * * * * * * Interrogar el bit de ocupado 1 0 D D D D D D D D Escribir carácter posición actual 1 1 D D D D D D D D Leer carácter posición actual cursor e al display en desde display en La descripción de cada bit es la siguiente: Fijar dirección de movimiento del cursor: I/D: Incrementa/decrementa la posición del cursor en el display después de ecrbibir un byte S: Desplaza el display después de escribir un byte Habilitar display/cursor: D: Enciende el display C: Enciende el cursor 43 B: Cursor parpadeante Mover cursor, desplazar el display: S/C: Activa desplazamiento del display R/L: Dirección del desplazamiento (0 izquierda, 1 derecha) Fijar largo de la interfaz: DL: Fijar ancho del bus (0= 4 bits, 1=8 bits) N: Número de líneas del display (0=1 línea, 1=2 líneas) F: Fuente para los caracteres (0=5x8, 1=5x11) Interrogar flag de ocupado: BF: En 1 cuando el controlador está ocupado Mover el cursor en RAM/display: A: Dirección de memoria Leer, escribir dato al display: D: Byte de información 44 Una de los problemas de no poder interrogar el flag de ocupado (porque el pin de R/W está cableado a tierra) es que la operación se torna más lenta, ya que hay que esperar un tiempo extra entre cada instrucción. De las hojas de características del controlador se obtiene que las instrucciones de borrado del display y regreso del cursor son las que más tiempo toman: 1,5 mS; el resto de las instrucciones toman menos de 50 µS. Pero el fabricante de la tarjeta de desarrollo recomienda 100 mS y 10 mS respectivamente. La utilización del módulo de cristal líquido debe comenzar con la inicialización del controlador, en modo de 4 bits se requieren los siguientes pasos: 1. Escribir 0x3 en los cuatro bits, enviar pulso a señal E y esperar. 2. Escribir 0x3 en los cuatro bits, enviar pulso a señal E y esperar. 3. Escribir 0x3 en los cuatro bits, enviar pulso a señal E y esperar. 4. Escribir 0x3 en los cuatro bits, enviar pulso a señal E 5. Escribir 0x2 en los cuatro bits para habilitar modo de 4 bits, enviar pulso a señal E y esperar. Después se puede enviar las instrucciones pertinentes para activar y borrar el display. Los caracteres que se puede enviar al módulo son un subconjunto del código ASCII, ver Tabla 3-3, además se pueden definir símbolos nuevos escribiendo en el área de la memoria RAM correspondiente al generador de caracteres. 45 Tabla 3-3 Caracteres disponibles en el módulo de cristal líquido 46 3.4 Utilización del protocolo TCP/IP en sistemas embebidos El poder utilizar un protocolo estándar como es TCP/IP, bien documentado y con soporte en las más diversas plataformas de hardware y software, en sistemas embebidos manejados por microcontroladores cada vez más complejos y económicos, abre un abanico de posibilidades para cualquier diseñador de sistemas electrónicos. Por ejemplo poder controlar o monitorear un sistema desde cualquier navegador de Internet, desde cualquier lugar en que se tenga acceso a Internet, o permitir que el mismo sistema se comunique por e-mail para indicar algún suceso especial. Los circuitos integrados disponibles permiten con un mínimo de componentes y costo proveer esta capacidad a cualquier sistema, ya existen microcontroladores que incorporan un puerto de red en el mismo circuito. Lo que resta por definir al diseñador es elegir entre utilizar un sistema operativo de tiempo real para el microcontrolador y programar el protocolo y el driver para el dispositivo de red o implementar las rutinas directamente en el microcontrolador, la principal dificultad de esto radica en la generación de los eventos a intervalos de tiempo precisos y manejar varios procesos en memoria. Como referencia para el resto del capítulo se muestra el modelo de referencia Internet y su equivalencia con el modelo ISO/OSI. Capa de aplicación Capa de presentación Capa de sesión Capa de transporte Capa de red Capa de enlace de datos Capa de aplicación Capa de transporte Capa de Internet Capa de red Capa física Figura 3-18 Modelo ISO/OSI versus modelo Internet 3.4.1 El hardware para sistemas embebidos con conexión ethernet Haciendo referencia al modelo Internet se debe proveer la capa de red, es decir, la capa física y de acceso al medio en el modelo ISO. Dentro de los protocolos de esta capa se pueden mencionar PPP (poin to point protocol), 47 que se puede utilizar en comunicaciones telefónicas, utilizando un módem que se conecte al microcontrolador por medio de sus puertos seriales. Otro protocolo más interesante desde el punto de vista de la conectividad es el protocolo ethernet. La forma más fácil de conectar un microcontrolador al medio es mediante un controlador dedicado que se encargue de manejar la capa física y de acceso al medio, es decir que provea la capa de red del modelo Internet. De estos dispositivos los más adecuados para interconectarse con un microcontrolador, debido al número de pines requeridos para la comunicación son los que se comunican mediante un bus ISA estándar, y específicamente aquellos que pueden utilizar un modo especial en que los datos de 16 bits que utilizan se pueden transmitir mediante 8 bits transmitiendo la mitad de la palabra en forma secuencial. Se puede mencionar dos controladores ampliamente utilizados en sistemas con microcontrolador: el RTL8139 de Realtek y el CS8900A de Cirrus Logic, ambos comparten características similares en cuanto a conexiones, requerimiento de componentes externos y registros internos de control, diferenciándose en el juego de instrucciones que proveen. Su interconexión al medio ethernet se realiza mediante transformadores de aislación y un conector RJ45. También se puede agregar que existen módulos que incorporan el conector RJ45 con los transformadores de aislación, por lo que el sistema completo se puede reducir a sólo 3 componentes principales: el microcontrolador, el controlador ethernet y el módulo RJ45, más algunas componentes externas. Debido a lo anterior el costo de agregar conectividad a Internet a un sistema es bastante reducido. En la tarjeta de desarrollo disponible se encuentra integrado un controlador CS8900A de Cirrus Logic, su esquema se muestra en la Figura 3-19. 48 Figura 3-19 Diagrama esquemático del CS8900A Este circuito se encarga del acceso al medio ethernet en modo 10Base-T full duplex y se conecta directamente a los puertos de entrada y salida digitales del microcontrolador. Además contiene 4 KB de memoria RAM que sirven de buffer para el almacenamiento temporal de paquetes recibidos o enviados La conexión al microcontrolador se realiza mediante 14 señales conectadas a los puertos 3 y 5. Un esquema de la conexión se muestra en la Figura 3-20. 8 4 D[7..0] A[3..0] MSP430F149 CS8900A IOR IOW Figura 3-20 Interconexión microcontrolador a controlador ethernet Una ventaja del CS8900A es que viene en versiones de 3 y 5 V por lo que se puede utilizar sin problemas con la familia de microcontroladores MSP430. 49 De las hojas de características del CS8900 se desprende que al utilizar el dispositivo en modo de 8 bits, es decir, pensando en conectarlo con un microcontrolador, las interrupciones no funcionan por lo que el software debe interrogar a intervalos regulares al controlador para saber si hay nuevos datos disponibles. 50 3.4.2 El software del microcontrolador Dado que el controlador ethernet se encarga de la transmisión de los paquetes en el medio, el microcontrolador debe formar las tramas ethernet, es decir, incorporar la información sobre las direcciones físicas de los dispositivos, para ello debe implementar el protocolo de resolución de direcciones (ARP), debe programarse la comunicación entre el microcontrolador y el controlador a bajo nivel, además se debe implementar los protocolos de la capa de Internet y de transporte que requiera la aplicación. Además del protocolo Internet (IP) se podría implementar partes o todas las funciones del protocolo de mensajes de Internet (ICMP) que facilitarían la resolución de problemas de conexión. Acompañando a la tarjeta de desarrollo Easyweb se cuenta con el código fuente de un limitado stack de protocolos TCP/IP desarrollado por Texas Instruments [11], que provee una interfaz de programación para desarrollar aplicaciones de red. Específicamente los protocolos implementados son los siguientes: Ethernet El microcontrolador sólo debe encargarse de formar las tramas ethernet, es decir, incorporar en un paquete de hasta 1500 bytes información sobre las direcciones físicas de los controladores, generar código de detección de errores y empaquetar y desempaquetar información proveniente de la capa de Internet. A su vez se comunica físicamente con el controlador de red por lo que debe programarse las funciones para configurar el controlador, conocer la dirección a la que responde y los registros que se debe escribir. El resto del protocolo ethernet: detección de colisión, acceso al medio, y otros los realiza el controlador ethernet, así como la interfaz con el medio físico. Protocolo de resolución de direcciones, ARP El objetivo de este protocolo de la capa Internet es traducir direcciones lógicas de Internet en direcciones físicas de dispositivos de red conectados al medio ethernet, para incorporar esta información en los paquetes ethernet. 51 Para ello el software utiliza dos mensajes: ARP Request para conocer la dirección de otro dispositivo y ARP Reply para responder a los requerimientos de otro dispositivo de red. Protocolo Internet, IP Este protocolo de la capa Internet se encarga de transmitir información entre los protocolos de transporte y el de ethernet, contiene información sobre la dirección lógica (direcciones IP) de los puntos de origen y destino, además se ocupa de fragmentar grandes flujos de datos en paquetes más pequeños que puedan ser transferidos por el protocolo ethernet. En este nivel cada paquete es tratado como una unidad independiente, sólo se asegura el encabezado de información IP con un código de verificación de errores, pero no se asegura que los datos sean transportados libres de errores o que lleguen en el orden correcto si son fragmentados. Protocolo de mensajes de control de Internet, ICMP Este protocolo de capa Internet se utiliza para obtener información acerca de la fiabilidad de la conexión, o de la causa de la falla de ésta. En el caso del stack TCP/IP disponible sólo se responde al mensaje Echo Request, al que se responde con un Echo Reply. Protocolo de control de transmisión, TCP Este es el único protocolo de transporte disponible en el código disponible. Este protocolo provee un medio confiable de transmisión de datos, se asegura la llegada de cada paquete y en el orden correcto, lo que se logra asignando un número de secuencia a cada paquete y requiriendo que a cada paquete transmitido el receptor responda con una señal de aceptación. Antes de comenzar la transmisión con este protocolo se debe realizar una conexión entre el servidor el cliente mediante el intercambio de ciertos paquetes en los que se acepta la conexión por parte del servidor y se sincronizan los números de secuencia de los paquetes que se envían posteriormente. 52 Una buena herramienta para estudiar el comportamiento de los dispositivos y protocolos de red son los analizadores de tráfico. Los cuales monitorean el tráfico de red y descomponen los paquetes para obtener el valor de los campos de los protocolos conocidos por ellos. Como ejemplo de uno de ellos se muestra el resultado de una comunicación entre un computador con IP 192.168.0.1 y la tarjeta Easyweb con IP 192.168.0.30. En este caso desde el computador se envía un paquete ARP Request, al que la tarjeta contesta con ARP Reply, a continuación se envía una petición de Echo, a la que la tarjeta contesta con un mensaje Echo Reply. En la Figura 3-21 se puede ver el resultado de la captura. Figura 3-21 Captura de paquetes arp y echo 53 Del mismo modo se presentan las transacciones entre el mismo computador y un servidor HTTP (Protocolo de transferencia de hipertexto) implementado en la tarjeta de desarrollo, en la Figura 3-22. Figura 3-22 Transacción http Interfaz de programación de aplicaciones El código fuente que se suministra está contenido en dos archivos: cs8900.c y tcpip.c. El primero se encarga de la comunicación a través de las líneas físicas de datos entre el microcontrolador y el controlador ethernet, contiene funciones para inicializar el controlador (configurar modo de transmisión y dirección MAC), escribir registros, copiar tramas ethernet recibidas o para ser transmitidas entre la memoria principal y el buffer de datos del controlador y otras. Estas funciones son utilizadas por el segundo 54 archivo, tcpip.c para encapsular ciertas tareas en funciones más simples de invocar, pero no son utilizadas directamente por el software del usuario. El archivo tcpip.c provee la interfaz de programación que el usuario utiliza para crear sus aplicaciones, contiene las siguientes funciones: void TCPLowLevelInit(void) Configura el controlador ethernet, así como el Timer_A del microcontrolador para su uso por el stack TCP/IP. void TCPPassiveOpen(void) Al invocar esta función se crea un socket para recibir conexiones, en el puerto especificado por la variable TCPLocalPort. void TCPActiveOpen(void) Esta función intenta crear una conexión a un servidor remoto con dirección indicada por el arreglo RemoteIP[4] y las variables TCPLocalPort y TCPRemotePort. void TCPClose(void) Cierra la conexión activa. void TCPReleaseRxBuffer(void) Después de leer el contenido del buffer se invoca esta función para indicar al stack que puede sobrescribir con nuevos datos. void TCPTransmitTxBuffer(void) Esta función indica al stack que envíe la cantidad de datos indicados por la variable TCPTxDataCount desde el buffer de transmisión, que previamente fue preparado por el software del usuario. Además de estas 6 funciones, el estado del stack se almacena en un registro de 8 bits que sirve para sincronizar el software del usuario con el stack TCP/IP. El significado de los bits es el siguiente: 0. SOCK_ACTIVE Este flag permanece en uno mientras el stack está intentando realizar una conexión, en este estado no se procesan nuevos intentos por crear conexiones. Si el intento fracasa o se cierra la conexión el flag vuelve a cero. 1. SOCK_CONNECTED Mientras este flag esté en uno se puede transmitir información a través de la conexión establecida. 2. SOCK_DATA_AVAILABLE Con este flag el stack le indica al programa del usuario que hay la cantidad de bytes indicados por la variable TCPRxDataCount disponibles en el buffer de recepción para ser leídos, después de leer su contenido el usuario debe informar al stack que puede disponer del buffer para nuevos datos, invocando la función TCPReleaseRxBuffer. 55 3. SOCK_TX_BUF_RELEASED Con este flag el stack le indica a la apliación del usuario que el buffer de transmisión está disponible para ser ocupado, y que la variable TCPTxDataCount puede ser alterada. 4 – 7 SOCK_ERROR Estos cuatro bits se ocupan para informar situaciones de error mientras se realiza una conexión o se transmiten datos. Se definen 6 códigos de error: • SOCK_ERR_OK: Sin error. • SOCK_ERR_ARP_TIMEOUT: Sin respuesta a una petición de resolución de dirección MAC. • SOCK_ERR_TCP_TIMEOUT: Sin respuesta a una petición de conexión a un servidor remoto. • SOCK_ERR_CONN_RESET: Conexión terminada por el servidor o cliente remoto. • SOCK_ERR_REMOTE: Error en la transmisión de datos TCP. • SOCK_ERR_ETHERNET: Imposible transmitir datos TCP por el medio ethernet, el controlador informa que no tiene espacio libre para recibir información. Dado que no existe un sistema operativo ejecutándose en el procesador, el software del usuario debe impedir que existan condiciones de bloqueo en el código, ya que para el correcto funcionamiento del stack TCP/IP debe llamarse a la función DoNetworkStuff() lo más regular y habitualmente como sea posible para que las distintas funciones del stack puedan ser ejecutadas cuando sea necesario para procesar datos de entrada o de salida o atender operaciones temporizadas. Un programa de usuario que utilice el stack TCP/IP provisto debe tener la estructura mostrada en la Figura 3-23. 56 DoNetworkStuff() Abrir o cerrar conexión Procesar datos de entrada o de salida Otras funciones de programa de usuario ¿Terminar programa? No Si Finalizar Figura 3-23 Diagrama de programa de usuario usando DoNetworkStuff() Las principales limitaciones del stack TCP/IP proporcionado por Texas Instruments se relacionan con la poca cantidad de memoria RAM del procesador (2 KB), lo que impide tener más que un buffer de entrada y dos de salida, uno pequeño para información de paquetes (Ethernet, IP, ICMP, ARP) y otro más grande para transmisión de datos TCP. Esta limitación hace prohibitivo que el stack TCP/IP pueda manejar más de una conexión simultáneamente o que pueda reordenar paquetes que lleguen en desorden. La limitación de una conexión simultánea se puede superar si el software del usuario realiza y mantiene las conexiones el menor tiempo 57 posible, así para un sistema que quiera realizar otra conexión el retardo no sería suficiente para producir una condición de time out. Además el sistema está concebido para funcionar en sistemas embebidos, en los que las aplicaciones usuales para un sistema de control o monitoreo a distancia no requieren la transmisión de grandes volúmenes de datos. 58 Conclusiones La familia de microcontroladores MSP430 posee excelentes características para ilustrar las técnicas modernas de diseño con microcontroladores. La facilidad para utilizar los periféricos incorporados al programar en lenguaje C, que gracias a su arquitectura de 16 bits y la calidad de los compiladores resulta en código compacto y muy bien optimizado. Todo lo anterior permite que el usuario domine o al menos conozca las bases de las técnicas en un corto período de tiempo, lo que en un curso de introducción a técnicas de diseño resulta vital. De la misma forma el contar con una tarjeta de desarrollo como la EasyWeb con una gran cantidad de periféricos de variados tipos incorporados permite avanzar en la enseñanza sin perder tiempo en detalles de armado y con problemas de conexionado. Al mismo tiempo esta tarjeta de desarrollo utiliza las últimas técnicas de depuración y programación en línea que cada vez incorporan más dispositivos. Todo lo anterior tiene por objeto motivar a los usuarios a desarrollar aplicaciones cada vez más complejas, por ejemplo incorporar conectividad a redes ethernet y a Internet a un sistema basado en microcontrolador. Así el sistema formado por la tarjeta de desarrollo Easyweb basada en microcontrolador de la familia MSP430, unido al software y herramientas de programación y depuración se convierte en un medio excelente para introducir conceptos de técnicas avanzadas de diseño e interconexión de periféricos. 59 Referencias [1] “MSP430x1xx Family User’s Guide” (SLAU049C), Revisión C, Texas Instruments, 2003, disponible: http://www.ti.com/msp430. [2] “Mixed Signal Microcontroller” (SLAS272E), Revisión E, Texas Instruments, 2003, disponible: http://www.ti.com/msp430. [3] “Features of the MSP430 Bootstrap Loader” (SLAAA089A), Revisión A, Texas Instruments, 2003, disponible: http://www.ti.com/msp430. [4] “General Purpose 6-Pin Phototransistor Optocouplers”, Fairchild Semiconductor, 2003, disponible: http://www.fairchildsemi.com/ds/4N/4N37-M.pdf. [5] “MICROWIRE Serial Interface”, National Semiconductor, 1992, disponible: http://www.national.com/an/AN/AN-452.pdf. [6] “Synchronous Microcontroller Communication Interfaces: SPI and Microwire versus I²C”, Volker Soffel, Mayo 2003, disponible: http://www.ucpros.com/work%20samples/Microcontroller%20C ommunication%20Interfaces%201.htm. [7] “The I²C-Bus Specification”, Philips Semiconductors, 2000, disponible: http://www.semiconductors.philips.com/acrobat/literature/939 8/39340011.pdf [8] “24xx515 5125K Bit I²C CMOS Serial EEPROM”, Microchip Technology Inc., 2002, disponible: http://www.microchip.com/download/lit/pline/memory/pnp/21 673b.pdf [9] “I²C Interfacing of the MSP430 to a 24xx Series EEPROM” (SLAA115), Texas Instruments, 2000, disponible: http://focus.ti.com/lit/an/slaa115/slaa115.pdf [10] “Using the Crystal 8900A in 8-Bit Mode” (AN181), 2002, Cirrus Logic, disponible: http://www.cirrus.com/en/pubs/appNote/an181.pdf 60 [11] “MSP430 Internet Connectivity” (SLAA137), Texas Instruments, 2000, disponible: http://focus.ti.com/lit/an/slaa137/slaa137.pdf 61 Anexo Archivo de encabezado de lenguaje C conteniendo las direcciones de memoria de los registros y posiciones de memoria de los periféricos del microcontrolador MSP430F149 provisto por Texas Instruments /******************************************************************** * * Standard register and bit definitions for the Texas Instruments * MSP430 microcontroller. * * This file supports assembler and C development for * MSP430x14x devices. * * Texas Instruments, Version 1.7 * ********************************************************************/ /************************************************************ * STATUS REGISTER BITS ************************************************************/ #define #define #define #define #define #define #define #define #define C Z N V GIE CPUOFF OSCOFF SCG0 SCG1 (0x0001) (0x0002) (0x0004) (0x0100) (0x0008) (0x0010) (0x0020) (0x0040) (0x0080) /* Low Power Modes coded with Bits 4-7 in SR */ #define #define #define #define #define LPM0 LPM1 LPM2 LPM3 LPM4 (CPUOFF) (SCG0+CPUOFF) (SCG1+CPUOFF) (SCG1+SCG0+CPUOFF) (SCG1+SCG0+OSCOFF+CPUOFF) /************************************************************ * PERIPHERAL FILE MAP ************************************************************/ /************************************************************ * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL BITS ************************************************************/ #define sfrb #define #define IE1_ IE1 U0IE WDTIE (0x0000) = IE1_; IE1 (0x01) /* Interrupt Enable 1 */ /* UART0 Interrupt Enable Register */ 62