DESARROLLO DEL SOFTWARE DEL SISTEMA EMBEBIDO DE LA
Transcripción
DESARROLLO DEL SOFTWARE DEL SISTEMA EMBEBIDO DE LA
TESIS PUCP Esta obra ha sido publicada bajo la licencia Creative Commons Reconocimiento-No comercial-Compartir bajo la misma licencia 2.5 Perú. Para ver una copia de dicha licencia, visite http://creativecommons.org/licenses/by-nc-sa/2.5/pe/ PONTIFICIA UNIVERSIDAD CATÓLICA DEL PERÚ FACULTAD DE CIENCIAS E INGENIERÍA DESARROLLO DEL SOFTWARE DEL SISTEMA EMBEBIDO DE LA BURBUJA ARTIFICIAL NEONATAL (Fase Experimental) Tesis para optar el Título de: INGENIERO INFORMÁTICO Presentado por: ANDRÉS BARRIOS MONTALVO LIMA –PERÚ 2006 DESARROLLO DEL SOFTWARE DEL SISTEMA EMBEBIDO DE LA BURBUJA ARTIFICIAL NEONATAL (Fase Experimental) Andrés Rolando Barrios Montalvo RESUMEN En el año 2004 la PUCP patentó un nuevo concepto de atención neonatal mediante un equipo denominado Burbuja Artificial Neonatal (BAN). La BAN es un equipo médico alternativo que cubre las deficiencias de las incubadoras tradicionales y brinda mejores condiciones para el buen desarrollo del recién nacido de alto riesgo. La BAN provee un ambiente estéril, con temperatura uniforme, aire temperado, humedecido y oxigenado. El presente trabajo plantea el desarrollo del software de tiempo real del sistema embebido de la Burbuja Artificial Neonatal, en su Fase Experimental, capaz de controlar simultáneamente las múltiples variables ambientales como temperatura, porcentaje de humedad relativa, flujo y porcentaje de oxígeno; capaz de permitir la interacción con el usuario; y, capaz de monitorizar los parám etros ambientales. El análisis de los requerimientos funcionales y no funcionales de la BAN concernientes a sus más importantes involucrados, el neonato de alto riesgo y el personal médico, permitió definir la arquitectura del sistema de software de la BAN, conformada por tres niveles o capaz. El nivel 1 es el núcleo del sistema, denominado GHOST. Realiza la planificación y ofrece a los niveles superiores un modelo de procesos secuenciales independientes proveyéndoles de mecanismos de comunicación y sincronización entre procesos. El nivel 2 implementa las tareas que manejan cada uno de los dispositivos de la BAN. Estos son los manejadores de los módulos: Adquisición de Datos de los sensores, Manejo de Dispositivos de Control, Ingreso de Datos, Visualización en LCD y Sonidos. Por último, el nivel 3 contiene los procesos de procesamiento de las señales sensadas, los proceso de control de los parámetros ambientales de la BAN, el proceso de encargado de monitorizar estos parámetros ambientales, el proceso de supervisión de alarmas y el proceso de comunicación serial con la computadora personal. Luego de la definición de la arquitectura, se realizó un diseño detallado de cada componente definido, especificando cada uno de sus procedimientos y estructuras de datos. Después de su implementación se procedió a realizar las pruebas del Sistema BAN. Se realizaron dos análisis de planificabilidad: el primero basado en la utilización de CPU y el segundo en el tiempo de respuesta del sistema. Además, se determinaron los valores de las propiedades importantes del núcleo GHOST, como lo son los tiempos de latencia, el jitter o porcentaje de variación y su porcentaje de utilización de los recursos, los cuales fueron mínimos. Se realizaron también las pruebas de los algoritmos de control, obteniéndose las curvas de la dinámica de la temperatura en la cápsula neonatal de la BAN y del flujo de aire en el circuito neumático. Estos resultados son información importante y de utilidad para futuros trabajos en el área de desarrollo de software de sistemas embebidos para equipos médicos de soporte de vida. He combatido el buen combate, he corrido hasta la meta, he mantenido la fe. 2 Timoteo 4, 7 I am always doing that which I can not do, in order that I may learn how to do it. Pablo Picasso Al Padre, por su Amor, Bendiciones y Dones. A la Madrecita también. A mis padres Rolando y Alicia, madre coraje, porque el amor incondicional de los dos no conoce el final, infinito e ilimitado. A mis dos hermanos, Luis Alfredo, el primero, tantas cosas, y al Rey Leo, tanta vida, que son todo amor. A toda mi familia, en especial a mi Abe. A Bruno, amigo y maestro sui generis. Al equipo que desarrolló la BAN Alfa: Bruno, Eduardo, Edwin, Jimmy, Alejandro, Carlos, Javier, Romy, Raúl y José. Y a todos aquellos que colaboraron, directa o indirectamente, poniendo su granito de arena. A mi amigo Miguel, por estar en las buenas y especialmente en las malas durante el desarrollo de esta tesis. A mi asesor, Viktor Khlebnikov, por sus conocimientos y paciencia, . A todos mis amigos y amigas de Informática, en especial a mis profesores, que compartieron más que enseñanzas desde las épocas de mis primeros algoritmos. A todos mis grandes amigos y amigas del GIDEMS, por su amistad, sus enseñanzas, consejos, apoyo, coraje y entusiasmo. Porque son locos. A todos aquellos que creyeron y creen en mí. A todos aquellos que aún creen y creen con fuerza y Fe. Y a ti, que hoy nos encontramos en el espacio del tiempo y que haces de esta tesis letra viva. El autor. DESARROLLO DEL SOFTWARE DEL SISTEMA EMBEBIDO DE LA BURBUJA ARTIFICIAL NEONATAL (Fase Experimental) 1 2 INTRODUCCIÓN ..............................................................................................................1 1.1 Estado del arte ..........................................................................................................2 1.2 Objetivos .....................................................................................................................4 1.3 Metodología ...............................................................................................................4 MARCO CONTEXTUAL ..................................................................................................6 2.1 Fase experimental ....................................................................................................6 2.2 Neonato......................................................................................................................6 2.3 Sistema de tiempo real ............................................................................................7 2.4 Sistema embebido ....................................................................................................7 2.5 Sistema operativo .....................................................................................................8 2.6 Núcleo (kernel) ..........................................................................................................8 2.7 Teoría de control.......................................................................................................8 2.8 Interfaz de usuario ....................................................................................................8 2.9 Monitorizar..................................................................................................................9 3 ESPECIFICACIÓN DEL SISTEMA DEL PROYECTO DE FASE EXPERIMENTAL BAN ......................................................................................................... 10 3.1 Descripción del hardware de la BAN .................................................................. 10 3.2 Descripción de las funciones de la BAN ............................................................ 13 3.2.1 Iniciar el Sistema BAN................................................................................... 15 3.2.2 Leer datos de los sensores .......................................................................... 15 3.2.3 Procesar las señales sensadas ................................................................... 16 3.2.4 Monitorizar los parámetros de la BAN ........................................................ 16 3.2.5 Activar las alarmas de la BAN ..................................................................... 16 3.2.6 Apagar las alarmas de la BAN ..................................................................... 16 3.2.7 Programar temperatura ................................................................................. 17 3.2.8 Programar humedad relativa........................................................................ 17 3.2.9 Programar flujo de la mezcla de gases ...................................................... 17 3.2.10 Programar porcentaje de oxígeno............................................................... 17 3.2.11 Programar sonido........................................................................................... 18 3.2.12 Programar volumen de sonido ..................................................................... 18 3.2.13 Volver a Modo Monitor .................................................................................. 18 3.2.14 Controlar temperatura................................................................................... 18 3.2.15 Controlar humedad relativa.......................................................................... 19 3.2.16 Controlar flujo y porcentaje de oxígeno en la mezcla de gases ............. 19 3.2.17 Enviar datos a computadora personal ........................................................ 19 3.3 Análisis de los requerimientos no funcionales del sistema............................. 20 3.3.1 Sobre la lectura de datos .............................................................................. 20 4 3.3.2 Sobre el control de los parámetros ambientales ....................................... 21 3.3.3 Sobre los dispositivos periféricos (actuadores)......................................... 21 3.3.4 Sobre la tarea de monitorizar los parámetros de la BAN ........................ 22 3.3.5 Sobre el chequeo de las alarmas ................................................................ 22 3.3.6 Sobre la programación de parámetros de la BAN.................................... 22 3.3.7 Sobre la programación de sonidos ............................................................. 22 3.3.8 Sobre el envío de datos a la computadora personal .............................. 22 DISEÑO E IMPLEMENTACIÓN DEL SOFTWARE DEL SISTEMA DEL PROYECTO DE FASE EXPERIMENTAL BAN ............................................................... 24 4.1 Arquitectura del Sistema BAN ............................................................................. 25 4.2 Sistema BAN........................................................................................................... 27 4.2.1 BAN: Módulo principal del Sistema BAN ................................................... 28 4.2.2 LIB: Librería de funciones generales .......................................................... 28 4.2.3 UC: Configuración del microcontrolador ATmega 128 ............................ 29 4.3 Nivel 1: Núcleo del Sistema BAN - GHOST ...................................................... 30 4.3.1 Procesos .......................................................................................................... 30 4.3.2 Planificador ..................................................................................................... 31 4.3.3 Estados de los procesos ............................................................................... 32 4.3.4 Comunicación entre procesos ..................................................................... 33 4.3.5 Sincronización entre procesos ..................................................................... 34 4.3.6 Tabla de procesos ......................................................................................... 34 4.3.7 Organización de la memoria ........................................................................ 35 4.3.8 Implementación de GHOST ......................................................................... 36 4.4 4.4.1 TEC: Programación de los parámetros de la BAN................................... 42 4.4.2 SON: Interfaz con el Módulo de Sonidos ................................................... 44 4.4.3 VIS: Interfaz con el Módulo de Visualización ............................................ 45 4.4.4 LEC: Lectura de datos de los sensores ..................................................... 46 4.4.5 MG: Funciones compartidas por los manejadores ................................... 48 4.4.6 MT: Calefactores de temperatura................................................................ 48 4.4.7 MH: Estrangulador de humedad relativa.................................................... 50 4.4.8 MO: Estrangulador de flujo de oxígeno...................................................... 51 4.4.9 MA: Manejador de la bomba de aire........................................................... 52 4.5 5 Nivel 2: Manejo de los dispositivos de entrada / salida................................... 42 Nivel 3: Procesos ................................................................................................... 53 4.5.1 PSEN: Procesamiento de los datos sensados .......................................... 53 4.5.2 PCTE: Control de temperatura .................................................................... 54 4.5.3 PCHR: Control de humedad relativa........................................................... 55 4.5.4 PCOF: Control de mezcla de flujos y porcentaje de oxígeno ................. 56 4.5.5 PMON: Acción de monitorizar los parámetros de la BAN ....................... 57 4.5.6 PALM: Supervisión de alarmas ................................................................... 58 4.5.7 PSRL: Comunicación serial con la computadora ..................................... 59 PRUEBAS Y RESULTADOS ...................................................................................... 60 5.1 Sistema BAN........................................................................................................... 60 5.1.1 Asignación de prioridades a los procesos de la BAN .............................. 62 5.1.2 Análisis de planificabilidad basado en la utilización ................................. 63 5.1.3 Análisis de planificabilidad basado en el tiempo de respuesta .............. 64 5.2 5.2.1 Tiempo de latencia de la interrupción......................................................... 68 5.2.2 Tiempo de respuesta de la interrupción..................................................... 69 5.2.3 Tiempo de recuperación de la interrupción ............................................... 70 5.3 Calibración de la temperatura.............................................................................. 70 5.4 Filtro para las señales de flujo ............................................................................. 71 5.5 Resultados del control ........................................................................................... 72 5.5.1 Control de flujo de aire.................................................................................. 72 5.5.2 Control de temperatura ................................................................................. 73 5.6 6 GHOST.................................................................................................................... 66 Resultados adicionales ......................................................................................... 80 CONCLUSIONES Y RECOMENDACIONES............................................................ 83 6.1 Conclusiones .......................................................................................................... 83 6.1.1 Respecto al Sistema BAN ............................................................................ 83 6.1.2 Respecto a GHOST ....................................................................................... 84 6.1.3 Respecto al control ........................................................................................ 85 6.1.4 Respecto al proceso de desarrollo.............................................................. 86 6.2 Recomendaciones ................................................................................................. 87 7 BIBLIOGRAFÍA............................................................................................................. 88 8 ANEXOS ......................................................................................................................... 91 DESARROLLO DEL SOFTWARE DEL SIST EMA EMBEBIDO DE LA BURBUJA ARTIFICIAL NEONATAL (Fase Experimental) 1 INTRODUCCIÓN En el año 2004 el Grupo de Investigación y Desarrollo de Equipos Médicos y Sistemas (GIDEMS) de la PUCP patentó un nuevo concepto de atención neonatal mediante un equipo denominado Burbuja Artificial Neonatal (BAN); con número de patente EP1380276 en la Oficina de Patentes Europea y número US20040133064 en la Oficina de Patentes y Marcas de los EEUU. La BAN es un equipo médico alternativo a las incubadoras tradicionales capaz de cubrir, debido a su innovación, las deficiencias que presentan estas últimas, tales como: una mala distribución del calor en el habitáculo del bebé, una ventilación inadecuada, una administración inadecuada de oxígeno, la presencia de alto ruido, un ambiente fácilmente contaminable, una deficiente administración de humedad relativa. Así también, la BAN es capaz de brindar mejores condiciones para el buen desarrollo del recién nacido de alto riesgo; proveyendo un ambiente estéril, con temperatura uniforme, aire temperado, humedecido y oxigenado, hasta que el bebé esté listo físicamente para un ambiente normal. Se quiere desarrollar un equipo basado en la patente con la finalidad de probar y validar el concepto patentado, además de ponerle valor agregado, de forma que se pueda apreciar la verdadera magnitud de las bondades de la patente BAN por los médicos, los empresarios, la comunidad académica y toda la gente involucrada en el desarrollo de la patente. Por estos motivos se comenzó el Proyecto de Fase Experimental BAN en el que se plantea el desarrollo del primer prototipo de la BAN basado en la patente, el cual es la primera materialización de la idea y es experimental, por lo que está abierto a posibles 1 perfeccionamientos. Este prototipo requiere un trabajo multidisciplinario que incluye las áreas de diseño industrial, ingeniería mecánica, ingeniería electrónica e ingeniería informática. Una parte importante de este prototipo es su sistema embebido, compuesto por hardware y software, por lo que es necesario desarrollar el software de este sistema embebido. El software debe ser capaz de controlar simultáneamente las múltiples variables ambientales relevantes como temperatura, porcentaje de humedad relativa, flujo y porcentaje de oxígeno; debe permitir la interacción con el usuario para la configuración del sistema; y, debe monitorizar los parámetros ambientales a fin de mostrarle la información importante al usuario. El presente trabajo plantea el desarrollo del software de tiempo real de este sistema embebido de forma que provea una solución aceptable al problema propuesto; que provea un núcleo que administre los recursos compartidos y planifique, sincronice y comunique las tareas que han de ejecutarse simultáneamente. El software de este sistema embebido deberá tener la capacidad de poder integrar y coordinar el hardware, que tiene 4 microcontroladores que deben interactuar para realizar las funciones que la BAN le presenta al usuario. Además, deberá tomar en consideración las restricciones puestas por el hardware, como son: el tamaño de la memoria, la capacidad de procesamiento, la velocidad de los microcontroladores. 1.1 Estado del arte La Burbuja Artificial Neonatal [C&A04] es un equipo médico para mejorar la atención intensiva de neonatos de alto riesgo, que brinda un ambiente estéril con temperatura uniforme y aire mezclado con oxígeno; que previamente fue filtrado, temperado y humedecido. La invención consta de dos circuitos de flujo de gases: Circuito Cerrado de Aire Temperado: encargado de conservar y mantener uniforme la temperatura en el ambiente artificial intermedio mediante un calefactor y un ventilador que generan un flujo de aire temperado que se usa como medio de propagación de calor. Este circuito no está en contacto con el neonato, atributo que permite instalar filtros acústicos para reducir el ruido. 2 Circuito Ventilatorio Continuo: conjunto de dispositivos neumáticos conectados consecutivamente para ventilar al neonato con un flujo continuo de aire filtrado, oxigenado, temperado y humedecido. La cantidad de este gas está regulada según los requerimientos de cada neonato. Además, permite utilizar una menor cantidad de oxígeno y mayor tiempo los filtros bacterianos. El equipo utiliza una cápsula para alojar al neonato, la cual es desechable con la finalidad de evitar la contaminación entre pacientes. En la Figura 1.1 se presenta el esquema de la patente BAN. 1) Domo 2) Espacio intra-domo 3) Ambiente artificial intermedio 4) Base térmica 5) Ventilador 6) Calefactor 7) Línea de aire 8) Línea de oxígeno 9) Línea colectora de gases 10) Cápsula neonatal 11) Ambiente artificial interno 12) Puertas circulares 13) Línea de salida de la mezcla gaseosa 14) Filtro acústico 18) Filtro bacteriano 19) Válvula Check 20) Válvula proporcional 21) Sensor de flujo 22) Fuente de oxígeno 23) Calefactor 24) Humidificador 25) Sensores de flujo, temperatura, humedad y oxígeno. Fuente: Patente Nº EP1380276 [C&A04]. Figura 1.1. Esquema de la patente BAN. 3 1.2 Objetivos 1.2.1 Objetivo general Desarrollar el software del sistema embebido de la Burbuja Artificial Neonatal. 1.2.2 Objetivos específicos • El software debe de poseer la capacidad de integrar y coordinar el hardware de la BAN, el cual tiene 4 microcontroladores que deben interactuar para cumplir con las funcionalidades que se le presentan al usuario. • El software debe de administrar los recursos de hardware y debe de manejar los dispositivos del sistema embebido. • El software debe de planificar las tareas que han de ejecutarse simultáneamente. • El software debe de proveer los mecanismos de comunicación entre los procesos. 1.3 Metodología Se plantea la siguiente metodología que se desarrollará a lo largo del presente trabajo: • Análisis y especificación de las funciones del Sistema del Proyecto de Fase Experimental BAN. • Definición de una arquitectura para el software del Sistema BAN. • Diseño del software del Sistema BAN. • Implementación del software del Sistema BAN en el microcontrolador ATmega 128. • Pruebas del Sistema BAN. El proceso comienza con la definición de los requerimientos de la BAN concernientes a sus más importantes involucrados, el neonato de alto riesgo y el personal médico. A su vez, se 4 necesita conocer las especificaciones importantes del hardware y del sistema en general, que llevarán a consideraciones importantes que habrá que tener en cuenta durante todo el ciclo de desarrollo del sistema de tiempo real. Se culmina con la definición de los requerimientos funcionales y no funcionales del sistema. Luego, se procede a definir la arquitectura del sistema de software de la BAN tomando en cuenta a todo momento las características que debe de tener y la infraestructura donde se va a ejecutar. Este proceso involucra dividir el trabajo que se tiene que realizar en componentes o módulos responsables de una porción del problema. Una vez que las actividades del diseño arquitectural se hayan completado, se comienza con el diseño detallado de cada componente definido, especificando cada uno de sus procedimientos y estructuras de datos. En este proceso también se definen las características del núcleo sobre el cual se construirá el sistema y los mecanismos o servicios que debe proveer. Luego, se procede con la implementación del sistema comenzando por los niveles más cercanos al hardware, como lo es el núcleo. El proceso de integración de los módulos se realiza desde los componentes de más bajo nivel hasta los componentes de nivel superior en el sistema. Durante el proceso, cada componente debe ser analizado usando herramientas que midan sus características, como lo es su tiempo de ejecución en el peor de los casos. Se realizarán dos análisis de planificabilidad: el primero basado en la utilización de CPU y el segundo en el tiempo de respuesta del sistema. Finalmente, el sistema se somete a un periodo de pruebas funcionales, con la finalidad de validar el sistema respecto a los requerimientos definidos inicialmente. 5 2 MARCO CONTEXTUAL 2.1 Fase experimental Es la primera materialización de la idea, donde se prueban y examinan sus virtudes y propiedades. Debido a ser experimental, está abierta a posibles perfeccionamientos [RAE05]. En lo que respecta a este desarrollo, al prototipo se le ha denominado versión Alfa, tomando como referencia lo que se denomina versión Alfa en software, es decir, la primera entrega de un producto que es usualmente probado sólo por los desarrolladores [Wor05] (Ver Anexo F). 2.2 Neonato Un neonato es un bebé de 4 o menos semanas. El período del neonato está definido y es un tiempo importante porque representa un período corto de la vida cuando los cambios son muy rápidos y cuando se pueden presentar muchas situaciones críticas. Los neonatos se clasifican, según su peso, en las siguientes categorías: • Peso normal al nacer (más de 2500 g) • Bajo peso al nacer (BPN, menos de 2500 g) • Muy bajo pes o al nacer (MBPN, menos de 1500 g) • Extremadamente bajo peso al nacer (EBPN, menos de 1000 g) El peso y la edad gestacional con que nace el neonato pueden llegar a tener consecuencias mortales. Debemos considerar que la mortalidad del neonato es directamente proporcional al bajo peso y la menor edad gestacional [San05]. 6 2.3 Sistema de tiempo real Todo sistema en el que es significativo el tiempo en el cual la salida es producida. Esto es usualmente porque la entrada corresponde a algún movimiento en el mundo físico, y la salida está relacionada con ese mismo movimiento. La diferencia entre el tiempo en que ocurre la entrada y el tiempo en que ocurre la salida debe de ser lo suficientemente pequeña para un aceptable cumplimiento de los plazos [Oxf96]. Los sistem as de tiempo real se dividen en dos tipos. Los sistemas de tiempo real duro o estricto (hard), aquellos en los que es absolutamente imperativo que las respuestas ocurran dentro de los plazos establecidos. Los sistemas de tiempo real blando o flexible (soft), donde los tiempos son importantes pero aún si se perdiera algún plazo el sistema seguiría funcionando correctamente. El uso del término blando no implica un único tipo de requerimiento sino que incorpora diferentes propiedades. Por ejemplo: los plazos pueden ser perdidos ocasionalmente, el servicio puede ocasionalmente ser proporcionado con retraso [B&W96]. El presente trabajo presenta un sistema de tiempo real duro. 2.4 Sistema embebido Una de las áreas de mayor expansión en el uso de las computadoras, es la que involucra aplicaciones en las cuales su principal función no es la de procesar información. Una máquina de lavar controlada por un microcontrolador es un ejemplo de este tipo de sistemas. En este caso, la función principal es lavar la ropa; sin embargo, dependiendo del tipo de ropa a ser lavada, diferentes “programas de lavado” deben ser ejecutados. Este tipo de aplicaciones de computadora son generalmente llamadas embebidas [B&W96]. Un sistema embebido es un sistema de propósito específico, en el cual la computadora está completamente encapsulada por el dispositivo que controla. Un sistema embebido ejecuta tareas predefinidas, usualmente con requerimientos muy específicos, en contraste con un sistema de propósito general [Wik05]. Un sistema embebido es específicamente diseñado para proveer un conjunto dado y restringido de funcionalidades; y, presenta hardware y software como una unidad. Es importante notar que un sistema embebido no está definido por la tecnología usada [Beu03]. 7 2.5 Sistema operativo Los sistemas operativos pueden verse desde dos perspectivas: administradores de recursos y máquinas extendidas. Desde la perspectiva de administrador de recursos, la tarea del sistema operativo es administrar con eficiencia las diferentes partes del sistema. Desde la perspectiva de máquina extendida, la tarea del sistema operativo es proporcionar a los usuarios una máquina virtual que sea más cómoda de usar que la máquina real [T&W98]. 2.6 Núcleo (kernel) El núcleo (o kernel) es el responsable del manejo de los procesos o tareas (p.e. el manejo del tiempo de CPU) y la comunicación entre estas. El servicio fundamental que provee el kernel es el cambio de contextos. El uso de un kernel de tiempo real generalmente simplifica el diseño de un sistema al permitir que la aplicación sea dividida en múltiples tareas que el kernel maneja [Lab02]. 2.7 Teoría de control En ingeniería y matemáticas, la teoría de control se encarga de lidiar con el comportamiento de los sistemas dinámicos. La salida deseada de un sistema es llamada la referencia. Cuando una o más variables de salida de un sistema necesitan seguir una cierta referencia en el tiempo, un controlador manipula las entradas del sistema para obtener el efecto desado en las salidas del sistema [Wik05]. Entre los sistemas de control se encuentran los sistemas de control realimentado, los cuales mantienen una relación determinada entre la salida y la entrada de referencia, comparándolas y usando la diferencia como medio de control [Oga03]. 2.8 Interfaz de usuario Dentro del diseño del sistema los dispositivos de consola forman parte de la interacción básica entre el sistema y el usuario. La consola usualmente consiste en algunos tipos de 8 visualizadores (displays) y teclado. Estos dispositivos pueden variar desde botones hasta terminales gráficos. El diseño de la interfaz de usuario está basado en los mismos principios en que los que están basadas las otras partes de un sistema de tiempo real, el usuario debe de ser capaz de responder a situaciones dentro de restricciones de tiempo establecidas. Adicionalmente, toda la actividad de la interfaz de usuario debe de tomar lugar sin afectar las tareas fundamentales como los son las funciones de control y adquisición de datos [A&T89]. 2.9 Monitorizar Observar mediante aparatos especiales el curso de uno o varios parámetros fisiológicos o de otra naturaleza para detectar posibles anomalías [RAE05]. 9 3 ESPECIFICACIÓN DEL SISTEMA DEL PROYECTO DE FASE EXPERIMENTAL BAN Introducción En la presente tesis se utilizó la metodología clásica de desarrollo que comprende las etapas típicas como lo son: la especificación de los requerimientos, el diseño arquitectural, el diseño detallado, la implementación y las pruebas [B&W96]. Donde se siguieron algunas de las recomendaciones de la norma internacional IEC601-1-4 [IEC96], para sistemas médicos eléctricos programables, en lo que se refiere a las etapas que comprende la metodología. Particularmente en la etapa de especificación de requerimientos se usaron las especificaciones de casos de uso como lo hace la metodología Mantra usada por EventHelix Inc. (Diseño de software de tiempo real embebido) [Eve05]. A pesar de que el enfoque es descendente, esta se construye sobre un entendimiento de lo que es viable hacer a bajo nivel [B&W96], por esto se necesitó conocer las especificaciones importantes del hardware y del sistema en general. Esto permitió poder tomar familiaridad con el sistema total e influyó en una especificación más detallada de los requerimientos del sistema. 3.1 Descripción del hardware de la BAN El sistema electrónico de la BAN está conformado por 6 módulos importantes desde el punto de vista del software del sistema: • El Módulo de Procesamiento y Control (Microcontrolador ATmega 128), encargado de ejecutar los procesos de lectura de datos, algoritmos de control, movimiento de actuadores, configuración del sistema, etc. Aquí se encuentra el corazón del sistema y se encarga también de la coordinación entre todos los demás módulos. El ATmega 128 es un microcontrolador de 8 bits de arquitectura RISC. 10 Posee 32 registros de 8 bits, 1 registro de estado, 1 registro de puntero de pila, registros de configuración de los periféricos y registros X(r27:r26), Y, Z de 16 bits de propósito general, especialmente utilizados para acceso indirecto a la memoria (punteros). Cuenta con memorias con espacios de direcciones separados: 128 KB de memoria Flash, 4 KB de memoria EEPROM y 4 KB de memoria SRAM; 4 interrupciones internas, 4 interrupciones externas; 2 temporizadores de 8 bits, 2 temporizadores de 16 bits, 1 contador en tiempo real y 1 temporizador watchdog programable. Cuenta también con 6 puertos de 8 bits y 1 de 5 bits configurables como E/S [Atm04]. • El Módulo de Adquisición de Datos, encargado de medir todas las variables en la BAN, acondicionar las señales y digitalizarlas. Se conecta con el Módulo de Procesamiento y Control a través de un conversor analógico digital. • El Módulo de Manejo de Dispositivos de Control, encargado de controlar los actuadores de la BAN. Se conecta con el Módulo de Procesamiento y Control a través de un PPI (Programmable Peripherical Interface), por el cual pasan las señales de PWM (Pulse Width Modulation) y las palabras de control para los estranguladores y para un conversor digital analógico. • El Módulo de Ingreso de Datos (Microcontrolador PIC), encargado de tomar las señales del teclado tanto de los botones como de la perilla (encoder). Las procesa y las envía al Módulo de Procesamiento y Control para que se entere éste último de los nuevos valores de las variables ambientales que el usuario programa, con la finalidad de configurar el sistema. También tiene la función de activar el sonido para las alarmas. • El Módulo de Visualización en LCD (Microcontrolador Scenix), encargado de mostrar en la pantalla LCD los valores sensados y los valores programados (o seleccionados) por el usuario. Se conecta con el módulo de procesamiento y control a través de un puerto especial al cual este último debe de acceder para poder dibujar en la memoria de video del primero; y por último, • El Módulo de Sonidos (Microcontrolador PIC), encargado de la reproducción de sonidos intrauterinos y música clásica dentro de la BAN. Se conecta a través de un puerto con el módulo de procesamiento y control. 11 Estos módulos están esquematizados en el Diagrama de Bloques de la BAN (Figura 3.1). DIAGRAMA DE BLOQUES DE LA BURBUJA ARTIFICIAL NEONATAL E400 E500 Módulo de Ingreso de Datos Módulo de Visualización en LCD (PIC16F877) (SCENIX) - Señales de los selectores - - Temperaturas - %HR - Flujos - Selección de canción - Control de volumen E600 Módulo de Sonidos (PIC) Datos Direcciones Habilitador Señales de Paginación - Configuración de usuario E100 Módulo de Adquisición de Datos - Medición de Temperatura en la piel del bebe - Medición de Temperatura en la cúpula interna - Medición de Temperatura en la cúpula externa (izq.) - Medición de Temperatura en la cúpula externa (der.) - Medición de Temperatura en el sistema neumático - Medición de %HR - Medición de Flujo de aire - Medición de Flujo de oxígeno (%O2) - Medición de Flujo de mezcla gaseosa - Temperaturas - %HR - Flujos E200 E300 Módulo de Procesamiento y Control Módulo de Manejo de Dispositivos de Control (ATMEGA128) - Datos de control de: Calentador interno Calentador externo Estrangulador HR Volumen de aire en la bomba Estrangulador de oxígeno - Señal del camel - Datos PC M MECÁNICA Figura 3.1. Diagrama de bloques de la BAN. El software de este sistema embebido deberá tener la capacidad de poder integrar y coordinar todo el hardware, que tiene 4 microcontroladores que deben interactuar para realizar las funciones que la BAN le presenta al usuario. El software se encontrará en el Módulo de Procesamiento y Control (ATmega 128). Además, deberá tomar en consideración las restricciones puestas por el hardware, tales como: el tamaño de la memoria, la capacidad de procesamiento, la velocidad de los microcontroladores. 12 3.2 Descripción de las funciones de la BAN En la presente sección se presenta el análisis de todas las funcionalidades que debe de proveer la BAN para cumplir los requerimientos planteados. En las Figuras 3.2, 3.3 y 3.4 se muestran los diagramas de casos de uso. Luego, se muestran unas breves descripciones de los casos de uso. Las especificaciones completas se detallan en el Anexo I. Figura 3.2. Diagrama de Casos de Uso. General. 13 Figura 3.3. Diagrama de Casos de Uso. Programación. Figura 3.4. Diagrama de Casos de Uso. Control. 14 3.2.1 Iniciar el Sistema BAN 3.2.1.1 Descripción General Este caso de uso permite al personal médico inicializar el Sistema BAN para su uso. 3.2.1.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico enciende la BAN. 2. El Sistema BAN deshabilita el Módulo de Ingreso de Datos (teclado). 3. Se inicializa la memoria SRAM. 4. Se configura el ATmega 128. 5. Se inicializa las pantallas de presentación. 6. Se configura todos los dispositivos de HW. 7. Se inicializa el Núcleo y los contextos de los procesos de la BAN. 8. Se inicializan los parámetros de control usando la configuración estándar guardada. Esta consiste en la programación de: temperatura en el ambiente de la cúpula interna a 34 ºC, humedad relativa a 60 %, porcentaje de oxígeno a 21 % y flujo de la mezcla de aire y oxígeno a 2 L/min. 9. Se habilita el Módulo de Ingreso de Datos (teclado). Flujos Alternativos No se presentan flujos alternativos. 3.2.2 Leer datos de los sensores Este caso de uso permite leer los datos de los 9 sensores de la BAN a través de los conversores analógico-digital. Se adquieren los datos de las señales de temperatura: en la cúpula interna, en la cúpula externa (dos sensores: izquierda y derecha), en el sistema neumático CVC (calefactor interno) y en al piel del bebé. Se adquieren los datos de la señal de humedad relativa. Se adquieren los datos de la señal de flujo: en la vía de oxígeno, en la vía de aire y en la vía de la mezcla. 15 3.2.3 Procesar las señales sensadas Este caso de uso permite convertir los datos adquiridos a sus unidades físicas respectivas: grados Celcius (ºC), porcentaje de humedad relativa (%), y litros por minuto (Lpm). Además, permite filtrar digitalmente los datos sensados de flujo. 3.2.4 Monitorizar los parámetros de la BAN Este caso de uso permite mostrar en la pantalla LCD al personal médico, tanto los valores que se programan como los valores medidos de los parámetros de temperatura en la cúpula interna, temperatura en la piel del bebé, porcentaje de humedad relativa, flujo de la mezcla de gases, porcentaje de oxígeno en la mezcla; además, permite mostrar si alguna alarma se ha activado. 3.2.5 Activar las alarmas de la BAN Este caso de uso se encarga del manejo de las alarmas en la BAN y de mostrarlas en la pantalla LCD. Este sistema de alarmas es desarrollado en conjunto entre el Módulo de Ingreso de Datos (sonidos de alarmas), el Módulo de Procesamiento y Control y el Módulo de Visualización. (La clasificación de las alarmas se muestra en el Anexo C). 3.2.6 Apagar las alarmas de la BAN Este caso de uso permite al personal médico apagar el sonido de las alarmas de la BAN por un intervalo de 5 minutos. Sin embargo, en todo momento, a pesar de que se desactive el sonido de las alarmas, estas se deberán seguir mostrando en pantalla LCD. 16 3.2.7 Programar temperatura Este caso de uso permite al personal médico programar el valor de temperatura en la cúpula interna de la BAN, en un rango de 25°C a 37°C. El valor modificado se visualiza en la región de los parámetros programados de la pantalla LCD. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 3.2.8 Programar humedad relativa Este caso de uso permite al personal médico programar el valor de porcentaje de humedad relativa en el aire de la cúpula interna de la BAN, en un rango de 40% a 90%. El valor modificado se visualiza en la región de los parámetros programados de la pantalla LCD. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 3.2.9 Programar flujo de la mezcla de gases Este caso de uso permite al personal médico programar el valor de flujo de la mezcla de gases dentro de la BAN, en un rango de 3 Lpm a 10 Lpm. El valor modificado se visualiza en la región de los parámetros programados de la pantalla LCD. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 3.2.10 Programar porcentaje de oxígeno Este caso de uso permite al personal médico programar el valor de porcentaje de oxígeno dentro de la BAN, en un rango de 21% a 100%. El valor modificado se visualiza en la región de los parámetros programados de la pantalla LCD. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 17 3.2.11 Programar sonido Este caso de uso permite al personal médico programar el sonido dentro de la BAN. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 3.2.12 Programar volumen de sonido Este caso de uso permite al personal médico programar el volumen de sonido dentro de la BAN. Si después de un tiempo determinado no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. 3.2.13 Volver a Modo Monitor Este caso de uso permite al personal médico volver a la pantalla de Modo Monitor de la BAN; en este modo el teclado está bloqueado. 3.2.14 Controlar temperatura Este caso de uso permite el control de la temperatura en la BAN según el valor programado por el personal médico, en un rango de 25 ºC a 37 ºC. Para el control de temperatura se utilizan dos ondas PWM (Modulación por Ancho de Pulso), una por calefactor. El rendimiento de cada onda se calcula sobre la base de la diferencia entre el valor sensado de temperatura y el valor programado. 18 3.2.15 Controlar humedad relativa Este caso de uso permite el control del porcentaje de humedad relativa en la BAN según el valor programado por el personal médico, en un rango de 40% a 90% de humedad relativa. Si el valor sensado de humedad relativa difiere del programado, se calcula la distancia que debe de moverse el actuador. Luego se convierte la distancia calculada a un intervalo de tiempo y se mueve el actuador. 3.2.16 Controlar flujo y porcentaje de oxígeno en la mezcla de gases Este caso de uso permite el control de la mezcla de aire y oxígeno en la BAN según los valores de los parámetros programados por el personal médico, en un rango de 3 Lpm a 10 Lpm para el flujo de la mezcla y en un rango de 21% a 100% para el porcentaje de oxígeno. Para lograr estos objetivos se controlan los flujos en las vías de aire y oxígeno. En el caso del flujo de aire, si el valor sensado difiere del programado, se calcula la velocidad con la que debe de moverse la bomba de aire para que dé el flujo de aire requerido y se envía la palabra de control. En el caso del flujo de oxígeno, si el valor sensado difiere del programado, se calcula la distancia que debe de moverse el actuador. Luego se convierte la distancia calculada a un intervalo de tiempo y se mueve el actuador. 3.2.17 Enviar datos a computadora personal Este caso de uso le brinda al personal médico la posibilidad de poder conectar la BAN a una PC, a fin de poder llevar un registro en el tiempo del estado de los parámetros importantes del Sistema BAN; así como de las programaciones efectuadas de dichos parámetros. Toda la información se envía por una interfaz serial mediante el protocolo RS232. 19 3.3 Análisis de los requerimientos no funcionales del sistema En esta sección se muestran a detalle las restricciones no funcionales que tiene la BAN, como son los tiempos asociados a las tareas que se deben de ejecutar o los grupos de prioridades. 3.3.1 Sobre la lectura de datos El Sistema BAN sensa 4 tipos de señales diferentes mediante el uso de 9 sensores. En la tabla 3.1 se muestran datos relevantes a estos. Las tareas de lectura de datos poseen una prioridad alta en el sistema y su diseño. Señal Tiempo de respuesta Periodo de muestreo Sensores de temperatura 10 s 4 ms Sensor de humedad relativa 50 s 4 ms Sensor de flujo en la vía de aire 60 ms 4 ms Sensor de flujo en la vía de oxígeno 60 ms 4 ms Sensor de flujo en la vía de la mezcla 50 ms 4 ms Tabla 3.1. Tiempos asociados a los sensores de la BAN. Para la adquisición de la temperatura de la piel del bebé se utiliza el conversor analógico digital ADC Max187, el cual posee un canal y es de tipo serial. Para el resto de variables se utiliza el conversor analógico digital ADC Max186, el cual posee 8 canales y es también del tipo serial. Ambos dispositivos presentan las siguientes características de interés: 12 bits de resolución, +/- ½ LSB de error, tiempo de conversión máximo 10 µs, tiempo de conversión mínimo 5,5 µs, tiempo de adquisición máximo 1,5 µs. 20 3.3.2 Sobre el control de los parámetros ambientales Las tareas de control poseen alta prioridad dentro de todo el sistema, son tareas que se deben de ejecutar en tiempo real debido a que de ellas depende el comportamiento de todo el sistema. En la tabla 3.2 se muestran las frecuencias mínimas a las cuales se deben de ejecutar los controles. Parámetro Periodo Control de temperatura 1s Control de humedad relativa 2s Control de flujo y porcentaje de oxígeno en la mezcla de gases 5s Tabla 3.2. Periodos de los controles de la BAN. 3.3.3 Sobre los dispositivos periféricos (actuadores) Las tareas encargadas del manejo de los dispositivos periféricos relacionados a las tareas de control (actuadores) son también tareas de alta prioridad ya que regulan las salidas del sistema. En la tabla 3.3 se muestran los tiempos asociados a los actuadores de la BAN. Actuador Respuesta Calefactor Interno - Calefactor Externo - Estrangulador de humedad relativa 771 ms/mm Estrangulador de la vía de oxígeno 771 ms/mm Volumen de aire en la bomba de aire - Tabla 3.3. Tiempos asociados a los actuadores de la BAN. 21 3.3.4 Sobre la tarea de monitorizar los parámetros de la BAN Esta tarea es la encargada de interactuar con el Módulo de Visualización en LCD. Muestra en la pantalla LCD los valores que se programan como los valores medidos de los parámetros de temperatura en la cúpula interna, temperatura en la piel del bebé, porcentaje de humedad relativa, flujo de la mezcla de gases y porcentaje de oxígeno en la mezcla. Esta tarea tiene una prioridad normal dentro del sistema. 3.3.5 Sobre la supervisión de las alarmas Al igual que la tarea anterior la revisión de alarmas tiene una prioridad normal dentro de todo el sistema. 3.3.6 Sobre la programación de parámetros de la BAN Las tareas de programación de los parámetros ambientales (temperatura, humedad relativa, flujo de la mezcla de gases y porcentaje de oxígeno) tienen una prioridad normal dentro del sistema. Para todos los casos se debería volver a Modo Monitor después de transcurridos 10 segundos, en caso de que esto no se haya seleccionado explícitamente por el usuario. 3.3.7 Sobre la programación de sonidos La tarea de programación de sonidos tiene una prioridad baja debido a que no es una tarea de soporte de vida para el recién nacido. 3.3.8 Sobre el envío de datos a la computadora personal Esta es una tarea de baja prioridad encargada de enviar información sobre el estado de la BAN a una computadora personal. 22 A continuación, en la tabla 3.4 se presenta un cuadro resumen de las prioridades dentro del Sistema BAN. Función Prioridad Lectura de datos de los sensores Alta Controles de los parámetros ambientales Alta Manejadores de los actuadores Alta Monitorizar los parámetros ambientales Normal Supervisión de las alarmas Normal Programación de los parámetros ambientales Normal Programación de los sonidos Baja Envío de datos a la computadora personal Baja Tabla 3.4. Prioridades de las funciones dentro de la BAN. 23 4 DISEÑO E IMPLEMENTACIÓN DEL SOFTWARE DEL SISTEMA DEL PROYECTO DE FASE EXPERIMENTAL BAN Introducción La más importante fase en el desarrollo de cualquier sistema de tiempo real es la generación de un diseño consistente que satisfaga la especificación de los requerimientos [B&W96]. El Sistema BAN es un sistema reactivo que presenta procesos que se ejecutan periódicamente y no terminan; en donde existe una relación continua con el ambiente, donde es este último el que manda. Durante esta fase se tomó en cuenta a todo momento las características que debía tener; entre otras, la capacidad de poder integrar y coordinar el hardware y sus 4 microcontroladores, los cuales tienen que interactuar para realizar las funciones que la BAN le presenta al usuario. Se buscaba un sistema compacto, que corra sobre un procesador simple (microcontrolador ATm ega 128), con restricciones de memoria limitada, respuesta rápida y que tenga un buen rendimiento. El proceso de diseño de ésta aplicación de tiempo real involucró dividir el trabajo que se tiene que realizar en procesos responsables de una porción del problema. El uso de un núcleo de tiempo real permite esta división del trabajo que se tiene que realizar, lo cual generalmente simplifica el diseño del sistema [Lab02]. Bajo esta concepción se comenzó el proceso de diseño del Sistema BAN definiendo primero su arquitectura en el diseño de alto nivel. Se definieron los componentes o módulos necesarios para cumplir con los objetivos del Sistema BAN. Luego se prosiguió con el diseño detallado de cada componente definido en la arquitectura, especificando cada uno de sus procedimientos y estructuras de datos. Así, en este proceso también se fueron definiendo los servicios que debía de proveer el núcleo de tiempo real. 24 Se prosiguió con la implementación del sistema embebido. Se codificó cada uno de sus módulos empezando primero con los del primer nivel hasta terminar con los procesos del nivel 3. En este capítulo se presentan tablas que contienen las funciones, variables y constantes de cada módulo o paquete de software. 4.1 Arquitectura del Sistema BAN Bajo la perspectiva planteada se da lugar al modelo que se muestra en la Figura 4.1. Aquí, el nivel 1, el más bajo, es el núcleo del sistema. Este nivel atrapa todas las interrupciones, realiza la planificación y ofrece a los niveles superiores un modelo de procesos secuenciales independientes. Además, provee los mecanismos de comunicación y sincronización entre procesos. También, administra los temporizadores de los procesos. El nivel 2 implementa los manejadores de cada uno de los dispositivos de la BAN. Entre estos están, los manejadores del Módulo de Adquisición de Datos de los sensores de la BAN, del Módulo de Manejo de Dispositivos de Control, el Módulo de Ingreso de Datos, el Módulo de Visualización en LCD, el Módulo de Sonidos. El nivel 3 contiene los procesos de procesamiento de las señales sensadas, los proceso de control de los parámetros ambientales de la BAN, el proceso de monitorización, el proceso de supervisión de alarmas y el proceso de comunicación serial con la computadora personal. Figura 4.1. Estructura del Sistema BAN (Núcleo + Tareas + Procesos). 25 Figura 4.2. Interacción entre los módulos del Sistema BAN. Tomando en consideración la interacción entre procesos, es útil distinguir entre tres tipos de comportamiento: Independientes, Cooperativos o Competitivos [B&W96]. El Sistema BAN fue diseñado de tal manera que sus procesos sean cooperativos. Los procesos cooperativos son aquellos que regularmente comunican y sincronizan sus actividades con la finalidad de llevar a cabo una tarea común. En el caso de la BAN cooperan principalmente para controlar los parámetros ambientales dentro de límites definidos (Figura 4.2). La BAN, como todo sistema embebido, tiene un número finito de recursos los cuales son compartidos entre los procesos (p.e. periféricos, memoria, procesador). Para que los procesos obtengan acceso a estos recursos compartidos, deben de competir entre sí. El acto de usar los recursos inevitablemente requiere la comunicación y sincronización entre los procesos del sistema. Sin embargo, aunque los procesos se comuniquen y sincronicen para tener acceso a los recursos, son esencialmente independientes. 26 4.2 Sistema BAN Se dividió el Sistema BAN por niveles y estos a su vez se subdividieron en módulos o paquetes de implementación, cada cual con funcionalidad específica (Tabla 4.1). Cabe mencionar que para la implementación de cada una de las funciones se tuvo que desarrollar una convención de llamadas a función, la cual se describe en el Anexo D. NIVEL 1 BAN_SistemaBAN LIB_FuncionesGenerales UC_ATmega128 OS_GHOST NIVEL 2 TEC_InterfazTeclado SON_InterfazSonidos VIS_InterfazVisualizacion LEC_InterfazLecturaDatos MG_ManejadoresFuncionesGenerales MT_ManejadorCalefactoresTemperatura MH_ManejadorEstranguladorHumedadRelativa MO_ManejadorEstranguladorFlujoOxigeno MA_ManejadorBombaAire NIVEL 3 PCTE_Temperatura PCHR_HumedadRelativa PCOF_PorcentajeOxigenoYFlujoMezcla PSEN_ProcesamientoSenales PMON_Monitor PALM_Alarmas PSRL_TransmisionSerial Tabla 4.1. Módulos del software del Sistema BAN. 27 Es conveniente detallar en esta sección los módulos del nivel 1: BAN_SistemaBAN, LIB_FuncionesGenerales y UC_ATmega128. El módulo OS_GHOST se desarrollará en la siguiente sección. 4.2.1 BAN: Módulo principal del Sistema BAN Este módulo se encarga de llamar al código del resto de módulos del Sistema BAN. Mapea las interrupciones, espera la estabilización con el resto de módulos de hardware, llama a las funciones de inicialización y activa el núcleo. FUNCIONES BAN_ESTABILIZAR – Espera la estabilización con el resto de los módulos electrónicos. BAN_reset – “Poner en juego la pelota ...”. Inicializa el puntero de pila y llama a main(). BAN_main – Llama a las funciones de inicialización del sistema, inicializa la primera tarea y empieza la multitarea (el control nunca vuelve a main()). BAN_inicializarCapa2 – Centraliza la inicialización de los módulos del nivel 2. BAN_inicializarGHOST – Centraliza la inicialización de GHOST y le da a conocer los procesos que ejecutará. VARIABLES BAN_bPosFinalRAMUtilizada – No es un dato útil. Su valor indica la ultima posición utilizada en la RAM. Tabla 4.2. Funciones y variables del módulo. 4.2.2 LIB: Librería de funciones generales Este módulo brinda funciones útiles para el resto de módulos. Retardo de espera activa, rotación y funciones matemáticas. 28 FUNCIONES LIB_retardar771ms – Retardo de 771 ms. LIB_rotarPalabra12Bits – Destructiva. Rota un número natural de 12 bits. LIB_div8u – Destructiva. 8 / 8 Bits División SIN signo. LIB_sumar16u – Destructiva. 16 + 16 Bits Suma SIN signo. LIB_restar16u – Destructiva. 16 - 16 Bits Resta SIN signo. LIB_mul16u – No Destructiva. 16 * 16 = 16 Bits Multiplicación SIN signo. LIB_div16u – Destructiva. 16/16 Bits División SIN signo. Tabla 4.3. Funciones del módulo. 4.2.3 UC: Configuración del microcontrolador ATmega 128 Este módulo contiene todas las funciones relacionadas a la configuración del microcontrolador ATmega 128. Entre las más importantes, la configuración de sus puertos de E/S y el marcapasos del núcleo (ticks). FUNCIONES UC_setearRegistros – Asigna a todos los registros el valor de r16. UC_limpiarRegistros – Destructiva. Se pierde el valor de r16. UC_limpiarSRAM – Limpia la memoria SRAM. Lleva todos los bytes a cero. UC_configurarPuertos – Pone los valores en los puertos. UC_configurarINT6INT7 – Configura las interrupciones INT6 e INT7. UC_configurarTimer1 – Configura el Timer 1. UC_resetTimer1 – Lleva a cero el contador del Timer 1. UC_leerEEPROM – Lee un byte de la EEPROM. UC_configurarUSART1 – Configura la USART. UC_enviarByteUSART1 – Envía un byte por la USART. CONSTANTES Ticks UC_TIEMPO_NS_INT_TIMER1A = 4000000 (Tick o marcapasos) UC_VALOR_OCRA = 6000 (Prescalador = 1. Puede interpretarse como Cycle Counter) USART UC_VALOR_UBRR = 194 (Baudrate) Tabla 4.4. Funciones y constantes del módulo. 29 4.3 Nivel 1: Núcleo del Sistema BAN - GHOST Gidems Hard(Heart) Operating SysTem - GHOST, es el corazón del Sistema BAN. Es un núcleo o kernel multitarea preemptivo, pequeño, con planificación por prioridades, responsable del manejo de los procesos (p.e. el manejo del tiempo de CPU) y la comunicación entre tareas. El servicio fundamental que provee es el cambio de contextos. Además, cuenta con todos los servicios para la sincronización y comunicación entre los procesos a través de mensajes y memoria compartida; así como para la implementación de retardos (y bloqueo). GHOST, al ser preemptivo, le da el control del procesador al proceso listo de mayor prioridad, por lo que es determinística la ejecución dicho proceso; es decir, se puede determinar cuando ganará el control del procesador. De esta manera, el tiempo de respuesta a nivel de procesos es minimizado. Además, GHOST es un núcleo capaz de manejar hasta 256 procesos, cada cual con una prioridad distinta. El número exacto de prioridades es determinado por la cantidad de procesos ejecutándose en el sistema. Implementa también el Proceso ’Ocioso’ el cual es el de más baja prioridad dentro del sistema. 4.3.1 Procesos El concepto central de cualquier sistem a operativo es el proceso: una abstracción de un programa en ejecución. Cada proceso es una entidad independiente, con su propio contador de programa y estado interno. Los procesos a menudo necesitan interactuar con otros procesos. Un proceso podría generar ciertas salidas que otro podría utilizar como entradas. A cada proceso se le asigna una prioridad, de acuerdo a su importancia. Estas prioridades son estáticas debido a que no cambian durante la ejecución del sistema. Además, se le asigna su propio conjunto de registros del microcontrolador y su propia área de pila. A los procesos de la capa inferior se les llamarán tareas. Tanto las tareas como los procesos se crearán en la inicialización del sistema debido a que se conoce el número exacto de los mismos. 30 4.3.2 Planificador Un cambio de contexto es el proceso de guardar y restaurar el estado de la CPU y de otras variables, de tal modo que múltiples procesos puedan compartir el CPU y puedan avanzar en sus hilos de ejecución. Este podría pasar cuando un proceso solicita un servicio del sistema (p.e. OS_esperarMensaje()); o, cuando ocurre una interrupción del temporizador. En un cambio de contexto, primero debe salvarse el estado del proceso actualmente corriendo en el área de almacenamiento de su contexto, de modo que pueda ser tomado luego exactamente donde se dejo. Este proceso lo implementan la función OS_planificar() y la rutina de servicio a la interrupción OS_RSI_Tick. Adicionalmente, la segunda llama a la función OS_incrementarTiempoTicks() de manera que lleve la cuenta del tiempo del sistema y de los temporizadores de cada proceso. El tiempo del tick de GHOST se determina en tiempo de compilación. Cuando ocurre la interrupción, el hardware salva la dirección de retorno. A continuación, el microcontrolador salta a la dirección especificada en el vector de interrupciones. Esto es todo lo que el hardware hace. De aquí en adelante, el software decide lo que se hace. Lo primero que hace el procedimiento de servicio de interrupciones es guardar en la pila todos los registros del microcontrolador. El número de proceso actual y un apuntador a su entrada de la tabla de procesos (TCB) se guardan en variables globales a fin de poder encontrarlos rápidamente. Luego, se salva el puntero de pila del proceso que se va a dejar de ejecutar en su entrada de la tabla de procesos. A continuación, se planifica el proceso de mayor prioridad listo para ejecutarse. Se guarda en las variables globales el nuevo número de proceso actual y un apuntador a su entrada de la tabla de procesos. Luego, se hace que el puntero de pila apunte al nuevo contexto. Finalmente, se desapilan los registros del nuevo proceso y se retorna. Es importante notar que las interrupciones son deshabilitadas, por lo que el núcleo no es interrumpible. Esto pone una restricción en el tiempo de respuesta mínimo de una interrupción (latencia) a eventos externos [A&T89]. 31 4.3.3 Estados de los procesos Los estados de los procesos de la BAN son los siguientes: Proceso Creado, Proceso Listo, Proceso Esperando, Proceso Corriendo y Rutina de Servicio a la Interrupción Corriendo. En cada momento un proceso puede estar sólo en uno de estos estados (Figura 4.3). Figura 4.3. Diagrama de Estados de los procesos de la BAN. Un proceso en estado CREADO es aquel que posee su programa en la EEPROM pero aún su contexto no ha sido creado con OS_inicializarContextosDeTareas(), ni sus datos, en su bloque de control, han sido inicializados con OS_inicializarTCBs(). En la inicialización del sistema se obtienen los datos del primer proceso a ejecutarse (el de mayor prioridad) llamando a OS_obtenerStackPTareaInicial(), a OS_obtenerProgCont TareaInicial() y a OS_activarTareaInicial(). Luego se activan las interrupciones y se salta al código del proceso. Es en este momento que comienza la multitarea y el proceso pasa al estado CORRIENDO. Un proceso puede retardarse una cierta cantidad de tiempo llamando a OS_dormir(); así, el proceso se bloquea y pasa al estado ESPERANDO. Cuando se cumple el tiempo que especificó pasa al estado LISTO. Es OS_incrementarTiempoTicks() quien lleva la cuenta de los retardos de los procesos. 32 Si un proceso en ejecución necesita esperar algún evento podría suspenderse también llamando a OS_esperarMensaje(), en este caso el siguiente proceso de mayor prioridad es planificado. Tanto otro proceso como una RSI (Rutina de Servicio a la Interrupción) pueden enviar una señal al proceso en espera indicando la ocurrencia del evento con OS_enviarMensaje(). Un proceso en ejecución siempre puede ser interrumpido. En este caso el proceso pasa al estado RSI CORRIENDO. Cuando una interrupción ocurre, la ejecución del proceso se suspende y la RSI toma el control del microcontrolador. La RSI puede llevar al estado LISTO más de un proceso, activándolos mediante el envío de algún mensaje. Cuando todos los procesos están esperando por algún evento o por el cumplimiento de algún retardo se ejecuta un proceso interno del sistema denominado Proceso ‘ocioso’ (el de más baja prioridad). 4.3.4 Comunicación entre procesos Si dos procesos desean comunicarse (o un proceso y una RSI), el camino más sencillo es pasar los datos a través de estructuras de datos compartidas previamente especificadas. Sin embargo, se debe acceder a éstas variables dentro de una sección crítica, con la finalidad de prevenir la corrupción de los datos (exclusión mutua). El esquema de mayor simplicidad y rapidez es el de deshabilitar y habilitar las interrupciones; el cual funciona bien cuando el número de variables es pequeño [A&T89]. Especialmente, cuando todos los procesos residen en un espacio de direcciones único y pueden referenciar elementos, tales como variables globales, punteros, buffers, listas ligadas y buffers circulares [Lab02]. Sin embargo, la desventaja de este método es que las interrupciones son deshabilitadas para todos los procesos inclusive para el temporizador de planificación [A&T89]. GHOST provee dos macros que permiten realizar estas operaciones: OS_ENTRAR_SECCION_CRITICA(), la cual guarda en la pila el estado del flag de interrupciones deshabilitadas (I) y deshabilita las interrupciones, y OS_SALIR_SECCION_CRITICA(), la cual restaura el estado de las interrupciones guardado en la pila. Usando este esquema, si se llama a algún servicio con las interrupciones deshabilitadas o no, el estado es preservado a través de la llamada. 33 El otro medio de comunicación entre procesos es a través del paso de mensajes. En este caso GHOST implementan 3 primitivas. Una llamada a OS_esperarMensaje() pone al proceso en estado de espera (o bloqueado). OS_enviarMensaje() envía un mensaje a un proceso, devolviéndolo a la cola de proceso listas para ejecutarse. Estas dos primitivas hacen uso de OS_planificar() en caso se haya activado con la acción una tarea de mayor prioridad (núcleo preemptivo). OS_aceptarMensaje() sólo revisa el campo de mensaje, mas no bloquea al proceso que la llama. Cabe decir que en este esquema de envío de mensajes el emisor explícitamente nombra al receptor del mensaje, esquema de nombramiento directo y por lo tanto de uno a uno. Además, este esquema es asimétrico debido a que el receptor no especifica la fuente de la cual quiere recibir un mensaje [B&W96]. 4.3.5 Sincronización entre procesos Para lograr la sincronización entre procesos y el manejo de recursos, se utilizan también los mecanismos de GHOST discutidos en la sección anterior. Se puede controlar el acceso a las secciones críticas deshabilitando las interrupciones, lo que permite especificar operaciones atómicas, utilizando las macros OS_ENTRAR_SECCION_CRITICA() y OS_SALIR_SECCION_CRITICA() [A&T89]. Así también, los mensajes pueden ser utilizados como mecanismos de señalización y sincronización, utilizando las funciones OS_esperarMensaje() y OS_enviarMensaje(). De ésta manera se pueden eliminar los esquemas de espera ocupada. 4.3.6 Tabla de procesos GHOST mantiene una tabla de procesos, con una entrada por cada proceso. Cada entrada es una estructura de datos denominada Bloque de Control de Proceso o Tarea (TCB) que posee la información del proceso. Cada bloque posee la siguiente información: 34 Campo Tamaño Puntero de Pila 2 bytes Flags 1 byte Retardo 2 bytes Puntero a mensaje 2 bytes Total 7 bytes Tabla 4.5. Estructura del Bloque de Control de Tareas. 4.3.7 Organización de la memoria El sistema utiliza los 3 tipos de memoria que provee el microcontrolador ATmega 128. En su memoria Flash se encuentra tanto el código del núcleo como los códigos de los procesos que se implementan. Adicionalmente, se encuentran las constantes que utilizan (Algunas constantes también se encuentran en la EEPROM). Figura 4.4. Distribución de la me moria SRAM. En la memoria SRAM se encuentran el espacio de datos requerido por el núcleo (variables y estructuras) y las áreas de datos y pila requeridos por los procesos (Figura 4.4). 35 4.3.8 Implementación de GHOST A continación se detallan las funciones implementadas por GHOST: FUNCIONES (Generales) OS_PUSH_ALL – Apila todos los registros del microcontrolador. OS_POP_ALL – Desapila todos los registros del microcontrolador. OS_PUSH_ALL_R16 – Apila 32 valores con el contenido del registro r16. FUNCIONES (Sección Crítica) OS_ENTRAR_SECCION_CRITICA – Marca el inicio de una sección crítica. Protege un área de código, deshabilitando las interrupciones en caso estén activas. OS_SALIR_SECCION_CRITICA – Sale de la sección crítica marcada. En caso las interrupciones hayan estado activas antes de entrar a la sección critica, las vuelve a activar. FUNCIONES (RSI, Reloj, Temporizadores) OS_RSI_Tick – RUTINA DE SERVICIO A LA INTERRUPCIÓN (RSI). Planificador del núcleo a NIVEL de interrupción. OS_incrementarTiempoTicks – Incrementa el tiempo en ticks del sistema; y, decrementa los retardos de las tareas/procesos. FUNCIONES (Servicios del Núcleo) OS_planificar – Planificador del núcleo a NIVEL de tareas/procesos. OS_dormir – Retardo en número de ticks. Desplanifica la tarea/proceso actual. Esta pasa a estado de espera. Tabla 4.6. Funciones generales, de acceso a sección crítica, reloj, temporizadores y planificación del módulo. OS_planificar(), es el planificador del núcleo a nivel de tareas/procesos; es decir, es un servicio del núcleo que llaman los procesos a través de otros servicios como pedido de retardos o manejo de mensajes. Lo primero que realiza OS_planificar() es desactivar las interrupciones y llamar a la macro OS_PUSH_ALL(), que apila los valores de todos los registros de la tarea/proceso que se va a desplanificar. Luego, apila el valor del SREG (Status Register) del microcontrolador. Seguidamente, lo que se necesita es salvar el puntero de pila de la tarea/proceso que se va a dejar de ejecutar. A fin de poder encontrar rápidamente el TCB de ésta tarea/proceso que se estaba ejecutando, se cuenta con una variable de 2 bytes llamada OS_DirecTCBTareaActual, la cual contiene la dirección del TCB. Al puntero X del 36 microcontrolador se le asigna ésta dirección y se guarda en el campo respectivo el valor del puntero de pila. Luego, se toma el campo de flags del TCB de la tarea/proceso, se desactiva el OS_BIT_TAREA_ACTIVA y se guarda la modificación. A continuación, se incrementa el contador de cambios de contextos del sistema, el cual es una variable de 4 bytes llamada OS_ContCambioContexto; y,se ejecuta el algoritmo de planificación por prioridades de GHOST. Se utiliza el arreglo de TCBs, de todas las tareas/procesos del Sistema BAN, como cola de los procesos listos. Cabe resaltar que este arreglo contiene ya las tareas/procesos ordenadas de mayor a menor prioridad. Adicionalmente, se tiene una arreglo auxiliar llamado OS_arrDirecTCB, que contiene las direcciones de inicio de cada TCB, con la finalidad de hacer la búsqueda más rápida. Al puntero Z se le asigna la dirección de este arreglo. Una a una se revisa cada entrada, asignándole al puntero Y la dirección del TCB de la tarea/proceso que se va a analizar. Esto se realiza accediendo al campo de flags de cada TCB y se verifica si tiene activado el OS_BIT_TAREA_LISTA. De ser así, se ha encontrado en el sistema la tarea/proceso de mayor prioridad lista para ejecutarse (su identificador se guarda en la variable OS_bTareaActual). En caso contrario, se continúa con la búsqueda. Una vez que se ha determinado la tarea/proceso de mayor prioridad que se va a planificar, se guarda en la variable OS_DirecTCBTareaActual la dirección su TCB (valor que se encuentra en el puntero Y). Seguidamente, se accede al campo de puntero de pila del TCB, se toma su valor y se le asigna al SP (Stack Pointer) del microcontrolador. También, se accede al campo de flags del TCB y se activa el OS_BIT_TAREA_ACTIVA. Finalmente, se desapila el valor del SREG del nuevo proceso que se va a planificar y se desapilan los valores de todos los demás registros llamando a la macro OS_POP_ALL(). Se ha concluido la planificación y el cambio de contexto, lo último que se hace es retornar al código donde se dejó al nuevo proceso que gozará del procesador, activando las interrupciones. 37 OS_RSI_Tick(), es el planificador del núcleo a nivel de interrupción; es decir, es llamado cada vez que se cumple el tiempo de un tick o marcapasos del núcleo. En general, realiza las mismas funciones que OS_planificar(); sin embargo, se diferencia de ésta en dos aspectos fundamentales. El primero es llevar la cuenta del tiempo del sistema, incrementando el valor de la variable OS_Ticks; y, el segundo y más importante aspecto es llevar la cuenta del tiempo de los temporizadores de cada proceso, decrementando los retardos de los procesos que se bloquearon, por una cantidad de ticks determinados, haciendo uso del servicio que brinda el núcleo para esta finalidad, OS_dormir(). Estos dos procedimientos los implementa a través de la función OS_incrementarTiempoTicks(). Al inicio de OS_incrementarTiempoTicks(), se le asigna al puntero Y la dirección del arreglo de TCBs llamado OS_arrTCB. Para cada tarea/proceso, se accede al campo de retardo de su TCB y se analiza si su valor es mayor que cero. De ser así, se decrementa en uno su valor y se guarda. Luego, se verifica si el retardo es igual a cero. En caso de que esto sea cierto, significa que se ha cumplido el tiempo que la tarea/proceso pidió bloquearse y dormir; por lo que se accede al campo de flags de su TCB, se desactiva el OS_BIT_TAREA_ESPERANDO_RETARDO y se activa el OS_BIT_TAREA_LISTA, lo que la pone otra vez en la cola de procesos listos. OS_dormir(), es el servicio que el núcleo provee a los procesos para dormir una cantidad determinada de ticks que se le pasan como parámetro. Lo primero que se hace es llamar a la macro OS_ENTRAR_SECCION_CRITICA(). Luego, se hace que el puntero Y apunte al TCB de la tarea/proceso que se está ejecutando. Se accede al campo de flags del TCB, se desactiva el OS_BIT_TAREA_LISTA y se activa el OS_BIT_TAREA_ESPERANDO_ RETARDO, pasando así a bloquearse en espera del evento del temporizador. También, se le asigna al campo de retardo del TCB la cantidad de tiempo en ticks que se pasó como parámetro. Finalmente, se llama a OS_SALIR_SECCION_CRITICA() y a OS_planificar(), para que se planifique a la siguiente tarea de mayor prioridad lista para ejecutarse. 38 FUNCIONES (Manejo de Mensajes) OS_enviarMensaje – Envía un mensaje a una tarea/proceso y la pone en la cola de procesos como lista. OS_esperarMensaje – Espera por un mensaje. La tarea/proceso se bloquea. OS_aceptarMensaje – Revisa el campo de mensaje. Es no bloqueante. Tabla 4.7. Funciones de manejo de mensajes del módulo. OS_enviarMensaje(), es el servicio del núcleo que permite a los procesos enviar un mensaje a otro proceso. Se pasan como parámetro, el identificador de la tarea/proceso y la dirección del mensaje. Lo primero que se hace es llamar a la macro OS_ENTRAR_SECCION_CRITICA(). Luego, se hace que el puntero Y apunte al TCB de la tarea/proceso que se está ejecutando. A continuación, se accede al campo de puntero al mensaje del TCB y se guarda la dirección del mensaje. Luego, se accede al campo de flags del TCB y se analiza si el OS_BIT_TAREA_ESPERANDO_MENSAJE está activado. De ser así, la tarea/proceso se encontraba ya esperando un mensaje. Se desactiva el OS_BIT_TAREA_ESPERANDO_MENSAJE debido a que la tarea/proceso ya recibió un mensaje y se activa el OS_BIT_TAREA_LISTA devolviéndola a la cola de procesos listos. Luego se llama a OS_SALIR_SECCION_CRITICA() y a OS_planificar(), para que se planifique a la siguiente tarea de mayor prioridad lista para ejecutarse. En caso contrario, se accede al campo de flags del TCB, se activa el OS_BIT_TAREA_MENSAJE_RECIBIDO. Finalmente, se llama a OS_SALIR_SECCION_CRITICA() y se retorna. OS_esperarMensaje(), es el servicio del núcleo que permite a los procesos esperar por un mensaje; y, tiene como parámetro de salida la dirección del mensaje recibido. Lo primero que se hace es llamar a la macro OS_ENTRAR_SECCION_CRITICA(). Luego, se hace que el puntero Y apunte al TCB de la tarea/proceso que se está ejecutando. Se accede al campo de flags del TCB y se analiza si el OS_BIT_TAREA_MENSAJE_RECIBIDO está activado. De ser así, la tarea/proceso ya cuenta con un mensaje recibido. Se desactiva el OS_BIT_TAREA_MENSAJE_RECIBIDO, para futuros envíos de mensajes, se llama a OS_SALIR_SECCION_CRITICA() y se retorna. En caso contrario, se accede al campo de flags del TCB, se activa el OS_BIT_TAREA_ESPERANDO_MENSAJE y se desactiva el OS_BIT_TAREA_LISTA, lo que provoca que la tarea/proceso se bloquee hasta que reciba un mensaje. Luego, se llama a OS_SALIR_SECCION_CRITICA() y a OS_planificar(), para que se planifique a la siguiente tarea de mayor prioridad lista para ejecutarse. Al final se le asigna al parámetro de salida la dirección del mensaje recibido y se retorna. 39 OS_aceptarMensaje(), por su parte sólo revisa el campo de mensaje y retorna su valor. Es una función no bloqueante debido a que regresa inmediatamente después de revisar el campo del mensaje. Lo primero que se hace es llamar a la macro OS_ENTRAR_SECCION_CRITICA(). Luego, se hace que el puntero Y apunte al TCB de la tarea/proceso que se está ejecutando. Se asigna al parámetro de salida el valor del campo de puntero al mensaje del TCB, se llama a OS_SALIR_SECCION_CRITICA() y se retorna. FUNCIONES (Activación de la Tarea Inicial) OS_activarTareaInicial – Marca como activa la tarea/proceso inicial. OS_obtenerStackPTareaInicial – Obtiene el puntero de pila de la tarea/proceso inicial. OS_obtenerProgContTareaInicial – Obtiene el contador de programa de la tarea/proceso inicial. FUNCIONES (Inicialización) OS_insertarEnArrPCIniciales – Inserta en el arreglo de contadores de programa la dirección de inicio de una tarea/proceso. OS_inicializarTCBs – Inicializa los bloques de control de cada tarea/proceso (TCB). OS_inicializarContextosDeTareas – Inicializa los contextos de las tareas/procesos. OS_inicializarVariables – Inicializa las variables de módulo. FUNCIONES (Procesos del Sistema) OS_ProcesoOcioso – Proceso ocioso del sistema. Se planifica cuando es el único proceso en la cola de listos. Tabla 4.8. Funciones de inicialización del módulo y proceso ocioso. 40 VARIABLES OS_bTareaActual – Tarea actual. OS_arrPCIniciales – Arreglo de PC's de las tareas/procesos. OS_arrTCB – Arreglo de TCB's. OS_arrDirecTCB – Arreglo de las direcciones de los TCB's de las tareas./procesos. OS_bDirecTCBTareaActualL – LSB del puntero al TCB de la tarea/proceso actualmente ejecutándose. OS_bDirecTCBTareaActualH – MSB. OS_bTicksLL – LSB del valor actual del tiempo del sistema. OS_bTicksLH – 2do. Byte. OS_bTicksHL – 3er. byte. OS_bTicksHH – MSB. OS_bContCambioContextoLL – LSB del contador de cambios de contexto. OS_bContCambioContextoLH – 2do. Byte. OS_bContCambioContextoHL – 3er. Byte. OS_bContCambioContextoHH – MSB. CONSTANTES Ticks por segundo OS_TICKS_POR_SEG = 250 Tareas OS_NUMERO_TAREAS_APLICACION = 10 OS_NUMERO_TAREAS_SISTEMA = 1 OS_NUMERO_TAREAS = 11 Tamaño de segmentos OS_TAMANNO_SEGMENTO_DATOS_SO = 32 OS_TAMANNO_SEGMENTO_DATOS_TAREA = 250 TCB OS_TAMANNO_TCB = 8 (2(Ptr. Pila) + 1(Flags) + 2(Retardo) + 2(Direc. Mensaje) + 1(Padding)) OS_TAMANNO_ARREGLO_TCB = 88 OS_TAMANNO_ARREGLO_DIREC_TCB = 22 Arreglo de PC iniciales OS_TAMANNO_ARREGLO_PC_INICIALES = 22 Configuración de los bits en los bytes OS_BIT_TAREA_ACTIVA = 0 (Tarea en ejecución) OS_BIT_TAREA_LISTA = 1 (Tarea en la cola de tareas listas) OS_BIT_TAREA_ESPERANDO_RETARDO = 4 (Tarea bloqueada por retardo) OS_BIT_TAREA_ESPERANDO_MENSAJE = 5 (Tarea bloqueada por espera de mensaje) OS_BIT_TAREA_MENSAJE_RECIBIDO = 7 (Tarea tiene un mensaje recibido) Misceláneos FALSO = 0 VERDADERO = 1 Tabla 4.9. Variables y constantes del módulo. 41 4.4 Nive l 2: Manejo de los dispositivos de entrada / salida 4.4.1 TEC: Programación de los parámetros de la BAN Este módulo implementa el manejador que se encarga de procesar los comandos que le llegan del Módulo de Ingreso de Datos. Debido a que no hay manera de predecir cuando los comandos llegarán, porque estos son generados cuando el usuario usa la interfaz, para evitar hacer un uso ineficiente del microcontrolador al hacer que este revisando constantemente por nuevos comandos, se utilizó un esquema de procesamiento asíncrono (interrupción) [A&T89] que recoge el comando que llega, modifica el valor del parámetro y lo guarda dejándolo listo para el uso de las otras tareas que lo necesiten. Además, en el caso de que llegue un comando relacionado a sonidos, envía los comandos respectivos al Módulo de Sonidos. FUNCIONES TEC_RSI_Teclado – RSI de manejo de los comandos provenientes del Módulo de Ingreso de Datos. TEC_RSI_Sonidos – RSI que inicializa el puerto conectado al Módulo de Sonidos. TEC_TareaTeclado – Ejecuta los cambios en la programación de los parámetros de la BAN. TEC_ejecutarAccionDelCodigoTeclado – Ejecuta la acción respectiva según el comando proveniente del Módulo de Ingreso de Datos. TEC_calcularDatoProgFlujoOxiYFlujoAire – Calcula el valor programado de Flujo de oxígeno y Flujo de aire. TEC_convertirUnidadesTempeA12Bits – Convierte el dato de grados Celsius a un número natural de 12 bits. TEC_convertirUnidadesFlujoA12Bits – Convierte el dato de litros por minutos (Lpm) a un número natural de 12 bits. TEC_inicializarVariables – Inicializa las variables del módulo. TEC_inicializarBytesTeclado – Inicializa los bytes de estado del teclado. TEC_inicializarDatosProgramados – Inicializa los valores programados. Tabla 4.10. Funciones del módulo. 42 VARIABLES BNibbleLSB – Primer nibble enviado por el Módulo de Ingreso de Datos. BCodigoEnviado – Comando enviado por el Módulo de Ingreso de Datos. BFlagsTeclado – Banderas asociadas al módulo. BDatoProgTempeInter – Valor programado en °C. BDatoProgHumRelat – Valor programado en °C. BDatoProgFlujoMezcla – Valor programado en Lpm. BDatoProgPorcOxi – Valor programado en unidades porcentuales. BDatoProgTempeCVCCalculado – Valor programado en °C. BDatoProgFlujoOxiCalculado – Valor programado en Lpm. BDatoProgFlujoAireCalculado – Valor programado en Lpm. BdatoProgTempeInter12BitsL – LSB del valor programado en 12 bits. BdatoProgTempeInter12BitsH – MSB del valor programado en 12 bits. BdatoProgHumRelat12BitsL – LSB del valor programado en 12 bits. BdatoProgHumRelat12BitsH – MSB del valor programado en 12 bits. BDatoProgTempeCVCCalculado12BitsL – LSB del valor programado en 12 bits. BDatoProgTempeCVCCalculado12BitsH – MSB del valor programado en 12 bits. BdatoProgFlujoOxiCalculado12BitsL – LSB del valor programado en 12 bits. BdatoProgFlujoOxiCalculado12BitsH – MSB del valor programado en 12 bits. BdatoProgFlujoAireCalculado12BitsL – LSB del valor programado en 12 bits. BdatoProgFlujoAireCalculado12BitsH – MSB del valor programado en 12 bits. CONSTANTES Valores iniciales de los Datos Programados VAL_INI_DATOPROG_n (para cada parámetro n, el valor depende del parámetro) Rangos de los Datos Programados VAL_MINIMO_DATOPROG_n (para cada parámetro n) VAL_MAXIMO_DATOPROG_n Códigos del teclado del Módulo de Ingreso de Datos SEL_n (para cada parámetro n) INC_n DEC_n Tabla 4.11. Variables y constantes del módulo. 4.4.1.1 Protocolo de comunicación A continuación se presenta el algoritmo del Módulo de Ingreso de Datos (teclado) y se especifica el protocolo de comunicación desarrollado por el GIDEMS. Primero se sensan constantemente los botones del teclado: monitor, temperatura, humedad relativa, oxígeno, flujo de la mezcla, tipo de sonido, volumen de sonido. Se espera a que se suelte el botón seleccionado. Luego, cuando se mueve el encoder se envía el código correspondiente, según el parámetro seleccionado. Este código se envía en 2 nibbles, donde cada uno genera una interrupción en el ATmega 128. El ATmega 128 por su parte, almacena el primer nibble y cuando llega el segundo nibble los ordena de manera de poder interpretar el código. 43 En el caso especial de que se quiera modificar un valor correspondiente al Módulo de Sonidos se genera una interrupción adicional antes de enviar el código, de manera que el ATmega 128 pueda limpiar lo que anteriormente haya colocado en el puerto de comunicación al teclado. 4.4.2 SON: Interfaz con el Módulo de Sonidos Este módulo implementa el manejador que se encarga de enviar los comandos respectivos al Módulo de Sonidos, según la acción que haya realizado en usuario desde la interfaz del sistema. Implementa todas las funciones para manejar dicho módulo. FUNCIONES SON_seleccionarSonido – Envía el comando que selecciona la melodía. SON_incrementarVolumenSonido – Envía el comando que incrementa el volumen. SON_decrementarVolumenSonido – Envía el comando que decrementa el volumen. SON_apagarSonido – Envía el comando que apaga la melodía. SON_ejecutarSonido0 – Envía el comando que toca la melodía SONIDO0_PRUEBA. SON_ejecutarSonido1 – Envía el comando que toca la melodía SONIDO1_VOZ. SON_ejecutarSonido2 – Envía el comando que toca la melodía SONIDO2_CLASICA1. SON_ejecutarSonido3 – Envía el comando que toca la melodía SONIDO3_CLASICA2. SON_resetearPuertoASonidos – Envía el comando que resetea las líneas conectadas al Módulo de Sonidos. CONSTANTES Configuración de los bits en los bytes BIT_ME0 = 0 BIT_ME1 = 1 BIT_ME2 = 6 BIT_COK = 7 Tabla 4.12. Funciones y constantes del módulo. 4.4.2.1 Protocolo de comunicación El protocolo de comunicación desarrollado por el GIDEMS especifica 4 líneas para la comunicación entre el Módulo de Sonidos y el Módulo de Procesamiento y Control. El ATmega 128 codifica todas las acciones que permite el Módulo de Sonidos en 3 bits de datos que escribe en el puerto, según el comando que le llegue del Módulo de Ingreso de 44 Datos. Finalmente, activa el bit de confirmación de código. Cuando el Módulo de Sonidos recibe esta señal comienza a procesar el código enviado como dato. 4.4.3 VIS: Interfaz con el Módulo de Visualización Este módulo implementa el manejador que se encarga del Módulo de Visualización. Cubre la funcionalidad de dibujar un píxel, especificando su color, en alguna página de la memoria de video de dicho módulo; así como, la de manejo de la paginación de la memoria de video al poder indicarle que página mostrar en la pantalla LCD. Implementa la primitiva de dibujo de rectángulos en la pantalla LCD, la cual es la base de los dibujos, y la función de dibujo de una imagen en la pantalla LCD, tomando como parámetro la dirección de alguna imagen que haya sido guardada, en el formato adecuado, en la memoria flash del microcontrolador ATmega 128. FUNCIONES VIS_dibujarRect – Dibuja una rectángulo en la página activa del Módulo de Visualización. VIS_cambiarPaginaMostrar – Cambia a la página que se va a ver en el Módulo de Visualización. VIS_dibujarImagen – Dibuja una imagen en la página activa del Módulo de Visualización. VIS_intercambiarPaginaEscribirEnPuerto – Intercambia el valor de la página activa actual y lo pone en el puerto. VIS_inicializarVariables – Inicializa las variables del módulo. VARIABLES BPaginaEscribir – Página en la cual se está dibujando. CONSTANTES Dirección de cambio de página FIL_DIRECCAMBIOPAG = 0xFF COL_DIRECCAMBIOPAG = 0xFF Tabla 4.13. Funciones, variables y constantes del módulo. 4.4.3.1 Protocolo de comunicación El Módulo de Procesamiento y Control se conecta de forma paralela con el Módulo de Visualización a través de un bus de datos, un bus de direcciones y un bus de control. El protocolo de comunicación fue desarrollado por el GIDEMS. La funcionalidad básica que 45 provee el protocolo es la de dibujo de un solo píxel en cualquiera de las páginas de la memoria de video. Se especifica la dirección, compuesta por la página a la cual se va a direccionar (bits más significativos) y el desplazamiento u offset dentro de ésta página (bits menos significativos). Luego, se coloca el byte de datos en el puerto, que especifica los píxeles que se van a dibujar (2 píxeles por byte). Finalmente, se generan las señales de control en el bus de control. 4.4.4 LEC: Lectura de datos de los sensores Este módulo implementa los manejadores de los conversores analógico a digital (ADC's) del Módulo de Adquisición de Datos. La tarea de lectura de datos de los sensores se encarga de leer periódicamente todas las variables ambientales que se sensan en un formato de números naturales de 12 bits. Luego se encarga de filtrarlas. Se diseño un filtro FIR (Finite Impulse Response) de Medias Móviles para filtrar las señales sensadas de flujo de aire y oxígeno. Un filtro FIR es la suma de los productos de los datos muestreados con los coeficientes del filtro; en el caso de Medias Móviles todos valores de los coeficientes son iguales. El número de coeficientes del filtro o taps determina la "suavidad" del filtro, así como también el retardo de cada dato filtrado (la longitud de tiempo que le toma a un dato recién ingresado salir del bloque del filtro). Entre sus principales características está que son siempre estables y son capaces de tener una respuesta de fase que es lineal, lo que equivale a decir que su respuesta tiene un retraso constante [Low05][Iri05] [ASL05][Bar05]. Se especificaron 256 coeficientes para el filtro, teniendo como base el criterio de Nyquist debido a la frecuencia de 100 Hz de la señal de flujo de aire. Adicionalmente, se implementó un buffer circular para el filtro y se optimizó el código guardando en variables los cálculos ya realizados en la iteración anterior de tal forma que sirvan en la actual. De esta manera en vez de realizar 256 operaciones sólo se realizan dos. 46 FUNCIONES LEC_TareaLecturaDatos12Bits – Tarea encargada de la lectura de las variables ambientales en un formato de números naturales de 12 bits. LEC_leerCanales12BitsParametrosAmbientales ambientales sensadas. – Lectura de todas las variables LEC_filtrarDatos – Implementa un Filtro FIR de Medias Móviles. LEC_leerCanalMAX186 – Manejador para leer un canal del MAX186. LEC_leerCanalMAX187 – Manejador para leer un canal del MAX187. LEC_inicializarVariables – Inicializa las variables del módulo. VARIABLES ArrDatoSen12BitsTempePiel – Arreglo de datos sensados en 12 bits. ArrDatoSen12BitsTempeInter – Para CONTROL. Arreglo de datos en 12 bits. ArrDatoSen12BitsTempeCCATIzq – Arreglo de datos en 12 bits. ArrDatoSen12BitsTempeCCATDer – Arreglo de datos en 12 bits. ArrDatoSen12BitsTempeCVC – Para CONTROL. Arreglo de datos en 12 bits. ArrDatoSen12BitsHumRelat – Para CONTROL. Arreglo de datos en 12 bits. ArrDatoSen12BitsFlujoOxi – Para CONTROL. Arreglo de datos en 12 bits. ArrDatoSen12BitsFlujoAire – Para CONTROL. Arreglo de datos en 12 bits. ArrDatoSen12BitsFlujoMezcla – Arreglo de datos en 12 bits. CONSTANTES Periodo de la Tarea LEC_PERIODO_LEC_MILISEG = 4 LEC_PERIODO_LEC_TICKS = 1 Número de muestras a tomar por parámetro ambiental LEC_NUMERO_DATOSEN12BITS_n (para cada parámetro n) LEC_NUMERO_DATOSEN12BITS_FLUJOn = 256 (para cada flujo n) (256 por Nyquist. La frecuencia mayor es 100 Hz) Tamaño de los buffer de datos LEC_NUMBYTES_CABECERA_ARREGLO = 10 (2(dato filtrado) + 4(suma) + 2(índice) + 2(tamaño del buffer). Luego vienen 2*Nmuestras bytes ) LEC_NUMBYTES_DATOSEN12BITS_n (para cada parámetro n) Palabras de control del ADC MAX186 CANAL_DATO_n (para cada parámetro n) Palabras de control del ADC MAX187 CANAL_DATO_TEMPEPIEL = 0x00 Tabla 4.14. Funciones, variables y constantes del módulo. 47 4.4.5 MG: Funciones compartidas por los manejadores Este módulo implementa las funciones generales para los manejadores de los actuadores del Módulo de Manejo de Dispositivos de Control. Debido a que se comparten puertos y pines para los diferentes dispositivos de control, implementa un acceso síncrono para la escritura en dichos puertos. FUNCIONES MG_escribirPPIPuertoA – Escribe un byte en el puerto A del Módulo de Manejo de Dispositivos de Control. MG_escribirPPIPuertoB – Escribe un byte en el puerto B del Módulo de Manejo de Dispositivos de Control. MG_inicializarActuadoresGeneral – Inicializa las líneas conectadas al Módulo de Manejo de Dispositivos de Control. VARIABLES BbufferActuadoresPPIPuertoA – Mapea las líneas de los Calefactores y Estranguladores de las vías de flujo de oxígeno y flujo humedecido. BbufferActuadoresPPIPuertoB – Mapea las líneas del Bus de Control del DAC TLC1257 (Bomba de Aire). CONSTANTES Configuración de los bits en los bytes BIT_PULSOHABIL_LATCH_A = 0 BIT_PULSOHABIL_LATCH_B = 1 Tabla 4.15. Funciones, variables y constantes del módulo. 4.4.6 MT: Calefactores de temperatura Este módulo implementa el manejador de los calefactores del Módulo de Manejo de Dispositivos de Control, y sus primitivas. La tarea de manejo de los calefactores se encarga de generar las ondas PWM de los calefactores de temperatura. El método de actuación al ser implementado por software requiere una atención constante por parte del microcontrolador. Esta generación de la onda se realiza normalmente con mucho más frecuencia que el intervalo de control y no es síncrona con el lazo de control. Cabe resaltar que es útil controlar los calefactores a través del uso de ondas PWM debido a que es la manera más eficiente de modular la potencia de los calefactores mediante el uso 48 de líneas que sólo proveen estados de prendido y apagado [A&T89]. La potencia promedio de cada calefactor se controla por el duty cycle de cada onda PWM. FUNCIONES MT_TareaManejoCalefactores – Tarea que maneja los rendimientos las ondas PWM de los calefactores de temperatura. MT_controlarOndasPWMCalefactores – Controla que se cumplan los rendimientos las ondas PWM de los calefactores de temperatura. MT_manejarRendimientoOndasPWMCalefactores – Función Manejador de las ondas PWM de los calefactores. Configura los nuevos rendimientos de las ondas PWM de los calefactores. MT_encenderCalefactorCupulaCCAT – Primitiva que enciende el calefactor de la cúpula CCAT. MT_apagarCalefactorCupulaCCAT – Primitiva que apaga CCAT. el calefactor de la cúpula MT_encenderCalefactorNeumaticoCVC – Primitiva que enciende el calefactor del circuito neumático CVC. MT_apagarCalefactorNeumaticoCVC – Primitiva que apaga neumático CVC. el calefactor del circuito MT_inicializarActuador – Inicializa los calefactores (apagados). MT_inicializarVariables – Inicializa las variables del módulo. VARIABLES BcontPasosEncendidoCalefCCAT – Número de Pasos que lleva encendido el calefactor de la cúpula CCAT. BcontPasosEncendidoCalefCVC – Número de Pasos que lleva encendido el calefactor del circuito neumático CVC. BnumPasosRendimientoCalefCCAT – Número de Pasos que debe de estar encendido el calefactor de la cúpula CCAT. BnumPasosRendimientoCalefCVC – Número de Pasos que debe de estar encendido el calefactor circuito neumático CVC. CONSTANTES Periodo de la Tarea MT_PERIODO_MT_TICKS = 2 MT_PERIODO_MT_SEG = 0,008 Pasos de las ondas PWM NUM_PASOS_PERIODO_ONDAPWM_CCAT = 30 NUM_PASOS_PERIODO_ONDAPWM_CVC = 100 Identificadores de los calefactores ID_CALEFACTOR_CUPULA_CCAT = 0 ID_CALEFACTOR_NEUMAT_CVC = 1 Tabla 4.16. Funciones, variables y constantes del módulo. 49 4.4.7 MH: Estrangulador de humedad relativa Este módulo implementa el manejador del estrangulador de la vía humedecida del Módulo de Manejo de Dispositivos de Control, y sus primitivas. Mueve el estrangulador, avanzándolo o retrocediéndolo, una cantidad de milímetros especificada. Tal cantidad de milímetros se traduce a un intervalo de tiempo y este a ticks y se bloquea por la cantidad de ticks calculados haciendo uso del servicio que brinda el núcleo para este caso. FUNCIONES MH_manejarEstranguladorHumRelatCVC – Función Manejador del estrangulador de la vía humedecida del Módulo de Manejo de Dispositivos de Control. Mueve el estrangulador la cantidad de milímetros pasada como parámetro. MH_detenerEstranguladorHumRelatCVC – Primitiva que detiene el movimiento del estrangulador. MH_avanzarEstranguladorHumRelatCVC – Primitiva que avanza el estrangulador. Menos flujo humedecido. MH_retrocederEstranguladorHumRelatCVC – Primitiva que retrocede el estrangulador. Más flujo humedecido. MH_inicializarActuador – Inicializa el estrangulador a su posición inicial. CONSTANTES Retardo para un milímetro MH_RETARDO_MH_MILISEG_PARA_1MM = 771 MH_RETARDO_MH_TICKS_PARA_1MM = 192 Configuración de los bits en los bytes MH_BIT1_AVANZAR = 3 (Cuando esta en 1 avanza para cerrar la vía de flujo humedecido) MH_BIT0_RETROCEDER = 2 (Cuando esta en 1 retrocede para abrir la vía de flujo humedecido) Palabras de control del manejador MH_AVANZAR_ESTRANGULADOR = 0 MH_RETROCEDER_ESTRANGULADOR = 1 Tabla 4.17. Funciones y constantes del módulo. 50 4.4.8 MO: Estrangulador de flujo de oxígeno Este módulo implementa el manejador del estrangulador de la vía oxigenada del Módulo de Manejo de Dispositivos de Control, y sus primitivas. Su funcionamiento es similar al funcionamiento del manejador del estrangulador de humedad relativa. FUNCIONES MO_manejarEstranguladorFlujoOxiCVC – Función del Manejador del estrangulador de la vía oxigenada del Módulo de Manejo de Dispositivos de Control. Mueve el estrangulador la cantidad de milímetros pasada como parámetro. MO_detenerEstranguladorFlujoOxiCVC – Primitiva que detiene el movimiento del estrangulador. MO_avanzarEstranguladorFlujoOxiCVC – Primitiva que avanza el estrangulador. Menos flujo oxigenado. MO_retrocederEstranguladorFlujoOxiCVC – Primitiva que retrocede el estrangulador. Más flujo oxigenado. MO_inicializarActuador – Inicializa el estrangulador a su posición inicial. CONSTANTES Retardo para un milímetro MO_RETARDO_MO_MILISEG_PARA_1MM = 771 MO_RETARDO_MO_TICKS_PARA_1MM = 192 Configuración de los bits en los bytes MO_BIT1_AVANZAR = 1 (Cuando esta en 1 avanza para cerrar la vía de oxígeno) MO_BIT0_RETROCEDER = 0 (Cuando es ta en 1 retrocede para abrir la vía de oxígeno) Palabras de control del manejador MO_AVANZAR_ESTRANGULADOR = 0 MO_RETROCEDER_ESTRANGULADOR = 1 Tabla 4.18. Funciones y constantes del módulo. 51 4.4.9 MA: Manejador de la bomba de aire Este módulo implementa el manejador de la bomba de aire del Módulo de Manejo de Dispositivos de Control, y sus primitivas. Controla el conversor digital a analógico (DAC) conectado a la bomba de aire, donde la palabra de control es proporcional a la cantidad de flujo requerida. FUNCIONES MA_incrementarFlujoAire – Incrementa el flujo de aire, según el cambio en el valor almacenado en la palabra de control. MA_decrementarFlujoAire – Decrementa el flujo de aire, según el cambio en el valor almacenado en la palabra de control. MA_enviarDatoDACTLC1257 – Manejador del conversor digital analógico. Envía la palabra de control. MA_inicializarActuador – Inicializa la bomba de aire con el flujo mínimo. MA_inicializarVariables – Inicializa las variables del módulo. VARIABLES BpalabraControlBombaAireL – LSB de la Palabra de control de DAC LTC1257. BpalabraControlBombaAireH – MSB de la Palabra de control de DAC LTC1257. CONSTANTES Cantidad de pasos a incrementar/decrementar a la Palabra de Control MA_CANTIDADPASOS_INC = 50 MA_CANTIDADPASOS_DEC = 50 Configuración de los bits en los bytes MA_DIN = 0 MA_SCLK = 1 MA__LOAD = 2 Rango de la palabra de control MA_PALABRACONTROL_MAXIMA = 4050 (Menos flujo de aire) MA_PALABRACONTROL_MINIMA = 2050 (Más flujo de aire) Tabla 4.19. Funciones, variables y constantes del módulo. 52 4.5 Nivel 3: Procesos 4.5.1 PSEN: Procesamiento de los datos sensados Este proceso se encarga de recolectar todos los valores sensados de las variables ambientales en números naturales de 12 bits, los procesa y convierte los valores a sus unidades físicas respectivas para el monitoreo y el control. FUNCIONES PSEN_ProcesoProcesamientoSenales – Proceso encargado del procesamiento de las señales sensadas. Convierte los datos sensados de números naturales de 12 bits a sus unidades físicas respectivas. PSEN_convertir12BitsAUnidadesParametrosAmbientales – Convierte los datos sensados de números naturales de 12 bits a las unidades físicas respectivas. PSEN_convertir12BitsAUnidadesTempePiel – Convierte el dato sensado de temperatura en la piel del bebé de número natural de 12 bits a grados Celsius. PSEN_convertir12BitsAUnidadesTempe – Convierte el dato sensado de temperaturas en la BAN de un número natural de 12 bits a grados Celsius. PSEN_convertir12BitsAUnidadesHumRelat – Convierte el dato sensado de humedad relativa en la BAN de un número natural de 12 bits a unidades porcentuales. PSEN_convertir12BitsAUnidadesFlujo – Convierte el dato sensado de flujo de oxígeno o flujo de aire de un número natural de 12 bits a litros por minuto. PSEN_convertir12BitsAUnidadesFlujoMezcla – Convierte el dato sensado por el GISS de flujo de la mezcla de un número natural de 12 bits a litros por minuto. PSEN_calcularDatoSenFlujoMezclaYPorcentajeOxigeno – Calcula los datos de flujo total de la mezcla y porcentaje de oxígeno en la mezcla a partir de los datos tomando como entradas el flujo de oxígeno y el flujo de aire. PSEN_inicializarVariables – Inicializa las variables del módulo. PSEN_inicializarDatosSensados – Inicializa los datos sensados. Tabla 4.20. Funciones del módulo. 53 VARIABLES BdatoSenTempePiel – Valor sensado de la temperatura en la piel del bebé en grados Celsius. BdatoSenTempeInter – Valor sensado de la temperatura dentro de la cúpula de la BAN en grados Celsius. BdatoSenTempeCCATIzq – Valor sensado de la temperatura en el sector izquierdo de la cúpula de la BAN en grados Celsius. BdatoSenTempeCCATDer – Valor sensado de la temperatura en el sector derecho de la cúpula de la BAN en grados Celsius. BdatoSenTempeCVC – Valor sensado de la temperatura en el circuito CVC de la BAN en grados Celsius. BdatoSenHumRelat – Valor sensado de la humedad relativa en la cúpula de la BAN en unidades porcentuales. BdatoSenFlujoOxi – Valor sensado del flujo de oxígeno en el circuito CVC de la BAN en litros por minuto. BdatoSenFlujoAire – Valor sensado del flujo de aire en el circuito CVC de la BAN en litros por minuto. BdatoSenFlujoMezcla – (Se mide). Valor sensado del flujo total de la mezcla en el circuito CVC de la BAN en litros por minuto. BdatoSenFlujoMezclaCalculado – (Se calcula). Valor calculado del flujo total de la mezcla en el circuito CVC de la BAN en litros por minuto. BdatoSenPorcOxiCalculado – (Se calcula). Valor calculado del porcentaje de oxígeno en la mezcla en el circuito CVC de la BAN en unidades porcentuales. CONSTANTES Periodo del Proceso PSEN_PERIODO_PSEN_MILISEG = 4 PSEN_PERIODO_PSEN_TICKS = 1 Tabla 4.21. Variables y constantes del módulo. 4.5.2 PCTE: Control de temperatura En esta Fase Experimental de la BAN los procesos de control de parámetros se implementan mediante algoritmos basados en el error entre el valor sensado y el valor programado. El proceso de Control de Temperatura es un proceso periódico que se encarga del control de temperatura en la BAN, tanto en la cápsula neonatal como en el circuito neumático CVC. Para ambos casos la estrategia de control que se implementa se basa en el error entre el valor sensado de temperatura y el valor programado (meta de control), según el cual se modifica el valor medio de la onda PWM respectiva. 54 FUNCIONES PCTE_ProcesoControlTemperatura – Proceso encargado del control de la temperatura tanto en la Cápsula Neonatal como en el Circuito Neumático CVC. PCTE_controlarTemperaturaCCATNormal – Control de la temperatura en la Cápsula Neonatal. PCTE_controlarTemperaturaCVCNormal – Control de la temperatura en el Circuito Neumático CVC. CONSTANTES Periodo del Proceso PCTE_PERIODO_PCTE_MILISEG = 8 PCTE_PERIODO_PCTE_TICKS = 2 Tabla 4.22. Funciones y constantes del módulo. 4.5.3 PCHR: Control de humedad relativa Este es un proceso periódico que se encarga del control de la humedad relativa en la BAN. La estrategia de control que se implementa se basa en el error entre el valor sensado de humedad relativa y el valor programado (meta de control), si el valor sensado es mayor al valor programado se invoca al manejador para que desplace el estrangulador con tal de que se cierre un poco más (una cantidad definida de milímetros, en este caso 1 mm) la vía de flujo humedecido, en caso contrario se desplaza el actuador con tal de que se abra un poco más. FUNCIONES PCHR_ProcesoControlHumedadRelativa – Proceso encargado del control de la humedad relativa en la Cápsula Neonatal. PCHR_controlarHumedadRelativa – Control de la humedad relativa en la BAN. CONSTANTES Periodo del Proceso PCHR_PERIODO_PCHR_SEG = 2 PCHR_PERIODO_PCHR_TICKS = 500 Tabla 4.23. Funciones y constantes del módulo. 55 4.5.4 PCOF: Control de mezcla de flujos y porcentaje de oxígeno Este es un proceso periódico que se encarga del control del flujo total de la mezcla y del control del porcentaje de oxígeno en la mezcla, a través del control del flujo de oxígeno y del control del flujo de aire. En el caso del flujo de aire, la estrategia de control que se implementa se basa en el error entre el valor sensado de flujo de aire y el valor programado (meta de control), si el valor sensado es mayor al valor programado se invoca al manejador de la bomba de aire para que decremente el flujo de aire, en caso contrario se le pide que incremente el flujo de aire. En el caso del flujo de oxígeno, la estrategia de control que se implementa también se basa en el error entre el valor sensado de flujo de oxígeno y el valor programado (meta de control), si el valor sensado es mayor al valor programado se invoca al manejador para que desplace el estrangulador con tal de que cierre un poco más (una cantidad definida de milímetros, en este caso 1 mm) la vía de flujo de oxígeno, en caso contrario se desplaza el estrangulador con tal de que se abra un poco más. FUNCIONES PCOF_ProcesoControlPorcentajeOxigenoYFlujoMezcla – Proceso encargado del control del porcentaje de oxígeno y del control del flujo de la mezcla en el Circuito Neumático CVC. PCOF_controlarFlujoOxi – Control del flujo de oxígeno en el circuito neumático CVC. PCOF_c ontrolarFlujoAire – Control del flujo de aire en el circuito neumático CVC. CONSTANTES Periodo del Proceso PCOF_PERIODO_PCOF_MILISEG = 5000 PCOF_PERIODO_PCOF_TICKS = 1250 Tabla 4.24. Funciones y constantes del módulo. 56 4.5.5 PMON: Acción de monitorizar los parámetros de la BAN Este es un proceso periódico que se encarga de mostrar los datos sensados y programados de las variables ambientales. También, muestra en pantalla si se ha activado alguna alarma. Cabe decir, que en cada refresco de pantalla sólo se redibujan las áreas de datos para una mayor eficiencia. Los números fueron guardados en formato vectorial en la memoria EEPROM del microcontrolador ATmega 128, con la finalidad de optimizar el espacio ocupado. En lo que se refiere a la pantalla de la BAN, se desarrolló un programa especial llamado Bitmap2ScenixFrame capaz de pasar la información de la imagen en formato GIF al formato que entiende el microcontrolador Scenix del Módulo de Visualización, con la finalidad de facilitar su diseño en computador. La imagen se guarda en la memoria Flash del microcontrolador ATmega 128, la cual trabaja como un buffer de video. FUNCIONES PMON_ProcesoMonitor – Proceso encargado del dibujo de todas las variables ambientales en la pantalla LCD del Módulo de Visualización. PMON_limpiarPantalla – Limpia las zonas que se invalidan en la pantalla al hacer un cambio. PMON_dibujarAlarmasActivas – Dibuja en el Módulo de Visualización las alarmas activas. PMON_dibujarParametrosAmbientales – Dibuja los valores de todas las variables ambientales en la pantalla LCD del Módulo de Visualización. PMON_dibujarParametro – Dibuja el valor de una variable ambiental en la pantalla LCD del Módulo de Visualización. PMON_dibujarNumero – Dibuja un dígito en la pantalla LCD del Módulo de Visualización. PMON_inicializarPantallaEnPaginas – Inicializa el módulo. Dibuja la pantalla de la BAN en ambas páginas del Módulo de Visualización. Tabla 4.25. Funciones del módulo. 57 CONSTANTES EN MEMORIA ArrDireccNumeros – Arreglo con las direcciones donde se encuentran almacenadas la información en formato vectorial de cada número en base 10. DireccPantallaBAN – Dirección donde se encuentra el mapa de píxeles de la pantalla de la BAN. Se encuentra en el archivo “PMON_PantallaScenix.inc”. CONSTANTES Periodo del Proceso PMON_PERIODO_PMON_SEG = 1 PMON_PERIODO_PMON_TICKS = 250 Datos Programados XINI_DATOPROG_n (para cada parámetro n) YINI_DATOPROG_n Datos Sensados XINI_DATOSEN_n (para cada parámetro n) YINI_DATOSEN_n Alarmas XINI_ALARMA_n (para cada alarma n) YINI_ALARMA_n Tabla 4.26. Constantes del módulo. 4.5.6 PALM: Supervisión de alarmas Este es un proceso periódico que supervisa las alarmas definidas en el Sistema BAN. (Ver Anexo C). Recoge los valores sensados de todos los parámetros ambientales y supervisa que se encuentren dentro de los rangos definidos, de no ser así activa la alarma respectiva. FUNCIONES PALM_ProcesoMonitorAlarmas – Monitorea los parámetros ambientales. Activa las alarmas. PALM_evaluarAlarmas – Activa o desactiva las alarmas evaluando los parámetros ambientales. PALM_inicializarVariables – Inicializa las variables de módulo. Tabla 4.27. Funciones del módulo. 58 VARIABLES BFlagsTemperatura – Flags de las seis alarmas relacionadas con la Temperatura. BFlagsHumRelatYGases – Flags de las dos alarmas relacionadas con la Humedad Relativa y de las cinco alarmas relacionadas con las vías de Oxígeno, Aire y la Mezcla. CONSTANTES Periodo del Proceso PALM_PERIODO_PALM_SEG = 1 PALM_PERIODO_PALM_TICKS = 250 Rangos de las alarmas VAL_MINIMO_ALARMA_n (para cada alarma n) VAL_MAXIMO_ALARMA_n Tabla 4.28. Variables y constantes del módulo. 4.5.7 PSRL: Comunicación serial con la computadora Este es un proceso periódico que se encarga de la transmisión serial de la información de la BAN a una computadora personal (PC). Transmite los valores sensados y programados de los parámetros de la BAN y los estados de las alarmas. FUNCIONES PSRL_ProcesoTransmisionSerial – Transmite la información de la BAN a una PC. PSRL_transmitirDatos – Transmite la información de la BAN a una PC. CONSTANTES Periodo del Proceso PSRL_PERIODO_PSRL_SEG = 1 PSRL_PERIODO_PSRL_TICKS = 250 Tabla 4.29. Funciones y constantes del módulo. 59 5 PRUEBAS Y RESULTADOS Introducción Se ha logrado desarrollar el software del sistema embebido de la Burbuja Artificial Neonatal (Fase Experimental) de acuerdo a los objetivos planteados. El software desarrollado es capaz de controlar simultáneamente las múltiples variables ambientales relevantes como temperatura, porcentaje de humedad relativa, flujo y porcentaje de oxígeno; permite la interacción con el usuario para la configuración del sistema a través de sus interfaces; y, monitoriza los parámetros ambientales y las alarmas respectivas a fin de mostrarle la información importante. Además, el software desarrollado logró la integración y coordinación del hardware de la BAN y de los 4 microcontroladores con los que cuenta, implementando así las funcionalidades de la BAN. Así también, se desarrolló un núcleo denominado GHOST que maneja los recursos de hardware y dispositivos del sistema embebido, planifica los procesos del sistema y provee los mecanismos de comunicación y sincronización entre los procesos de la BAN. A continuación se detallan las pruebas realizadas, así como, los resultados obtenidos. Adicionalmente, se muestran las curvas de la dinámica de la temperatura en la cápsula neonatal de la BAN y del flujo de aire en el circuito neumático. 5.1 Sistema BAN El Sistema BAN se desarrolló bajo la estructura de 20 módulos divididos en 3 niveles. Cuatro módulos el Nivel 1: BAN, LIB, UC y OS. Nueve en el Nivel 2: TEC, SON, VIS, LEC, MG, MT, MH, MO y MA. Siete en el Nivel 3: PCTE, PCHR, PCOF, PSEN, PMON, PALM y PSRL. 60 Estos módulos implementan los 11 procesos de la BAN: las tareas MT, LEC y TEC; los procesos PSEN, PCOF, PCTE, PCHR, PALM, PSRL y PMON; y, el proceso de sistema denominado OCIOSO. El uso de las memorias internas del ATmega 128, por el Sistema BAN, se muestra en la siguiente tabla: Segmento Inicio Fin Flash 0x000000 0x00C31E SRAM 0x000100 EEPROM 0x000000 Código (bytes) Datos (bytes) Usada (bytes) Tamaño (bytes) % de uso 11 514 38 400 49 914 131 072 38,1% 0x000620 0 *1 312 *1 312 4 096 *32,0% 0x0000CE 0 206 206 4 096 5,0% * Utilización por parte de variables estáticas. Nótese que el separador decimal es la coma. Tabla 5.1. Uso de las memorias del ATmega 128 por el Sistema BAN. Nótese que en el caso de la memoria Flash de los 48,74 KB (38,1%) que se utilizaron, 11,24 KB (8,8%) pertenecen a todos los códigos del Sistema BAN, mientras que los restantes 37,5 KB (29,3%) son de la pantalla de la BAN. En el caso de la memoria SRAM se utilizaron 1,28 KB de los 4 KB (32%) en variables estáticas. Lo que dejó 250 bytes para la pila de cada uno de los 11 procesos de la BAN; utilizándose finalmente el 100% de la memoria SRAM. También, se obtuvo para cada proceso el tiempo de ejecución del peor de los casos mediante el análisis del código fuente. El modelo del microcontrolador que se utilizó fue el que brinda el Entorno de Desarrollo Integrado (IDE) AVRStudio 4.10.356 del fabricante Atmel [Atm05]. 61 Nº Proceso 1 MT 2 Número de ciclos Tiempo de cómputo, C Periodo, T Utilización, U 260 17,333 µs 8 ms 0,217% LEC 8 230 548,667 µs 4 ms 13,717% 3 TEC 593 39,533 µs 4 PSEN 7 546 503,067 µs 4 ms 5 PCOF 2 025 135,000 µs 5s 0,003% 6 PCTE 1 089 72,600 µs 8 ms 0,908% 7 PCHR 335 22,333 µs 2s 0,001% 8 PALM 602 40,133 µs 1s 0,004% 9 PSRL 561 864 37,458 ms 1s 3,746% 10 PMON 425 600 28,373 ms 1s 2,837% 1s 0,004% 12,577% Tabla 5.2. Tiempos de ejecución en el peor de los casos de los procesos BAN. Con estos resultados medimos el porcentaje de utilización del procesador utilizando la siguiente fórmula: Utilizació n = N Ci ∑ Ti Ecuación 5.1 i =1 Donde, para el Sistema BAN la utilización resulta de un 34,014%. 5.1.1 Asignación de prioridades a los procesos de la BAN En el Sistema BAN se utilizó el esquema de asignación de prioridades basado en la tasa monótona de plazos de ejecución (DMPO, Deadline monotonic priority ordering) de Leung y Whitehead (1982) [L&W82], donde a cada proceso se le asigna una única prioridad basada en su plazo de ejecución (a diferencia del algoritmo de tasa monótona, el cual se basa en el periodo del proceso); así, para plazos más bajos, prioridades más altas, Di < D j ⇒ Pi > Pj). En la siguiente tabla se muestran todos los atributos relevantes de los procesos de la BAN. En lo respecto a prioridades, el valor cero (0) corresponde a la máxima prioridad. 62 Nº Proceso Tipo Tiempo de cómputo, C Periodo, T Plazo, D Prioridad, P 1 MT Periódico 17,333 µs 8 ms 1 ms 0 2 LEC Periódico 48,667 µs 4 ms 2 ms 1 3 TEC Esporádico 39,533 µs 1s 4 ms 2 4 PSEN Periódico 503,067 µs 4 ms 4 ms 3 5 PCOF Periódico 135,000 µs 5s 5 ms 4 6 PCTE Periódico 72,600 µs 8 ms 8 ms 5 7 PCHR Periódico 22,333 µs 2s 8 ms 6 8 PALM Periódico 40,133 µs 1s 1s 7 9 PSRL Periódico 37,458 ms 1s 1s 8 10 PMON Periódico 28,373 ms 1s 1s 9 11 OCIOSO - 0,200 µs - - 10 Tabla 5.3. Atributos de los procesos BAN. 5.1.2 Análisis de planificabilidad basado en la utilización Se aplicó un test de planificabilidad sencillo, el cual a pesar de no ser exacto es atractivo debido a su simplicidad. Liu y Layland (1973) [L&L73], demostraron que se puede obtener un test de planificabildad considerando sólo la utilización del conjunto de procesos del sistema. Si la siguiente condición es verdadera entonces todos los N procesos cumplirán sus plazos (deadlines ): N Ci ∑ Ti < N (21 / N − 1) Ecuación 5.2 i =1 Nótese que la segunda parte de la ecuación tiende asintóticamente a 0,693. La utilización combinada de todos los procesos es 34,014%, la cual está debajo del límite calculado en 71,545%; por lo tanto se garantiza que el conjunto de procesos BAN alcanzarán todos sus plazos (deadlines). En la Figura 5.1 se muestra la línea de tiempo de la ejecución de los procesos BAN (La gráfica fue realizada mediante la utilización del software Visual Micro Lab 3.11). Según Liu y 63 Layland (1973) [L&L73], para un conjunto de procesos que comparten un tiempo común de lanzamiento o instante crítico, puede ser demostrado que una línea de tiempo igual al tamaño del periodo más largo es suficiente. Por lo tanto, si todos los procesos cumplen sus primeros plazos (deadlines) entonces también alcanzaran los siguientes. Figura 5.1. Ejecución de los procesos BAN en el tiempo. 5.1.3 Análisis de planificabilidad basado en el tiempo de respuesta A continuación se aplicó un test diferente, denominado Test de Análisis del Tiempo de Respuesta. Primero, se utiliza un método analítico para predecir el tiempo de respuesta en el peor de los casos (R) de cada proceso del Sistema BAN. Luego los valores son comparados con los plazos (deadlines ) de los procesos. 64 Para el proceso de mayor prioridad, su tiempo de respuesta en el peor de los casos es igual a su tiempo de cómputo (R = C). Los otros procesos sufren la interferencia de los procesos de mayor prioridad. Así: Ri = Ci + Ii Ecuación 5.3 Donde, Ri es el tiempo de respuesta en el peor de los casos del proceso i; Ci es su tiempo de ejecución en el peor de los casos; e, Ii es la máxima interferencia que el proceso i puede experimentar en cualquier intervalo de tiempo [t, t+Ri[. Luego, se puede obtener la interferencia máxima (Ii) de la siguiente ecuación (Joseph y Pandya, 1986) [J&P86]: Ri Ii = Cj Tj Donde, Ecuación 5.4 es la función mayor entero. Así, la ecuación 5.3 queda: Ri = Ci Ri Cj j ∈ hp (i ) Tj ∑ + Ecuación 5.5 Donde, hp(i) es el conjunto de procesos con prioridad mayor a la prioridad del proceso i. La ecuación es difícil de resolver debido a la presencia del mayor entero. Por este motivo se aplica el cálculo numérico. El método más simple es formar una relación de recurrencia (Audsley et al.) [Aud93]: Wi n +1 = Ci + Wi n ∑ Cj j ∈ hp (i ) Tj Ecuación 5.6 Los valores de win son monótonamente no decrecientes y la condición de parada se da cuando win = w in+1; es decir, la ecuación tiene solución. Si w in llega a ser mayor que su plazo (deadline), la ecuación no tiene solución y por lo tanto el sistema no es planificable. Para el Sistema BAN se desarrolló el programa RTA_DMPO, el cual utiliza la ecuación 5.6 para determinar el tiempo de respuesta en el peor de los casos para los procesos BAN; el algoritmo se detalla en el Anexo E. Después de correr el programa se obtuvieron los siguientes resultados: 65 Proceso Tiempo de respuesta, R Plazo, D MT 17,333 µs 1 ms LEC 566,000 µs 2 ms TEC 605,533 µs 4 ms PSEN 1 108,600 µs 4 ms PCOF 1 243,600 µs 5 ms PCTE 1 316,200 µs 8 ms PCHR 1 338,533 µs 8 ms PALM 1 378,666 µs 1s PSRL 51 996,672 µs 1s PMON 91 337,010 µs 1s Tabla 5.4. Tiempos de respuesta en el peor de los casos de los procesos BAN. Todos los tiempos de respuesta fueron menores que sus respectivos plazos, por lo que se concluye que el Sistema BAN es planificable. Cabe mencionar que éste análisis de los tiempos de respuesta en el peor de los casos tiene la ventaja de que es suficiente y necesario. 5.2 GHOST Gidems Hard (Heart) Operating SysTem - GHOST, es el corazón del Sistema BAN. Es un núcleo o kernel multitarea preemptivo con planificación por prioridades, responsable del manejo de los procesos (p.e. el manejo del tiempo de CPU) y la comunicación entre tareas. El servicio fundamental que provee es el cambio de contextos. Además, cuenta con todos los servicios para la sincronización y comunicación entre los procesos a través de mensajes y memoria compartida; así como para la implementación de retardos (y bloqueo). 66 En la siguiente tabla se muestra el uso de las memorias del ATmega 128 por GHOST: Segmento Código (bytes) Flash 1 436 SRAM EEPROM Datos (bytes) Usada (bytes) Tamaño (bytes) % de uso 0 1 436 131 072 1,1% 0 131 131 4 096 3,2% 0 0 0 4 096 0,0% Tabla 5.5. Uso de las memorias del ATmega 128 por GHOST. En términos de tiempo de procesamiento, el tiempo de planificación de la próxima tarea (función del núcleo OS_RSI_Tick) es de 51,733 µs (776 ciclos); lo que representa para el periodo del reloj de GHOST, de 4 ms, un porcentaje de 1,293%. Cuando se programa un valor en el teclado, se envía el código correspondiente a través de 2 interrupciones del teclado, como se explicó anteriormente. En la Figura 5.2 se muestra la llegada de las dos interrupciones. La rutina de servicio de la interrupción manda un mensaje a la tarea TEC, la cual se encuentra siempre en estado de espera del evento del teclado, y por lo tanto se pone a la tarea en el estado de lista para ejecutarse. Cuando esto ocurre durante la ejecución de una tarea de mayor prioridad, ésta última sigue su ejecución después del retorno de la interrupción, debido a que la tarea del teclado recién activada tiene menor prioridad. Figura 5.2. Activación de un proceso durante la ejecución de uno de mayor prioridad. 67 En la Figura 5.3 se muestra también la llegada de las dos interrupciones. La rutina de servicio de la interrupción manda un mensaje a la tarea TEC, la cual se encuentra siempre en estado de espera del evento del teclado, y por lo tanto se pone a la tarea en el estado de lista para ejecutarse. Sin embargo, cuando esto ocurre durante la ejecución de una tarea de menor prioridad, a ésta última se le desplanifica y se pasa a ejecutar la tarea de mayor prioridad, en este caso la tarea del teclado recién activada. Figura 5.3. Activación de un proceso durante la ejecución de uno de menor prioridad. Las gráficas anteriores muestran la naturaleza preemptiva de GHOST. 5.2.1 Tiempo de latencia de la interrupción Probablemente la especificación más importante de un núcleo de tiempo real es la cantidad de tiempo en que las interrupciones están deshabilitadas. Mientras más tiempo estén deshabilitadas más alto será el tiempo de latencia de la interrupción [Lab02]. Tiempo de latencia de la interrupción = MAX( Instrucción más larga, deshabilitación de las interrupciones por el programador, deshabilitación de las interrupciones por el núcleo ) + Salto a la RSI Ecuación 5.7 68 La siguiente tabla muestra los valores para GHOST: Característica Número de ciclos Instrucción más larga Tiempo 4 0,267 µs Deshabilitación de las interrupciones por el programador 1 520 101,333 µs Deshabilitación de las interrupciones por el núcleo 776 51,733 µs 11 0,733 µs Salto a la RSI Tabla 5.6. Datos para el cálculo del tiempo de latencia de la interrupción. Por lo tanto, para GHOST el tiempo de latencia de la interrupción es de 102,066 µs. 5.2.2 Tiempo de respuesta de la interrupción Está definido como el tiempo comprendido entre la recepción de la interrupción y el comienzo del código de la aplicación que maneja la interrupción [Lab02]. Tiempo de respuesta de la interrupción = Tiempo de latencia de la interrupción + Guardar el contexto de la CPU + Función del núcleo de entrada a la RSI Ecuación 5.8 La siguiente tabla muestra los valores para GHOST: Característica Tiempo de latencia de la interrupción Guardar el contexto de la CPU Función del núcleo de entrada a la RSI Número de ciclos Tiempo 1 531 102,066 µs 67 4,467 µs 0 0,000 µs Tabla 5.7. Datos para el cálculo del tiempo de respuesta de la interrupción. Así, para GHOST el tiempo de respuesta de la interrupción es de 106,533 µs. Por lo tanto, el jitter o porcentaje de variación sobre el periodo del reloj de GHOST, el cual se ejecuta cada 4 ms, es de 2,663%. 69 5.2.3 Tiempo de recuperación de la interrupción Está definido como el tiempo requerido por el procesador para retornar al código donde se produjo la interrupción ó al código de un proceso de mayor prioridad, en caso se hubiera activado [Lab02]. Tiempo de recuperación de la interrupción = Tiempo de búsqueda del proceso de mayor prioridad + Restauración del contexto del proceso de mayor prioridad + Retorno de la interrupción Ecuación 5.9 La siguiente tabla muestra los valores para GHOST: Característica Número de ciclos Tiempo 211 14,067 µs 83 5,533 µs 4 0,267 µs Tiempo de búsqueda del proceso de mayor prioridad Restauración del contexto del proceso de mayor prioridad Retorno de la interrupción Tabla 5.8. Datos para el cálculo del tiempo de recuperación de la interrupción. Así, para GHOST el tiempo de recuperación de la interrupción es de 19,867 µs. 5.3 Calibración de la temperatura Durante las pruebas se calibraron los sensores de temperatura. Primero se procedió a medir los voltajes que arrojaban los sensores a las distintas temperaturas a las que fue llevada la BAN. Para la medición de la temperatura se utilizó un termómetro digital, de 2 dígitos decimales de resolución, de la marca Ertco-eutechnics modelo 4400. Luego se procedió a realizar una regresión lineal en el rango de trabajo. En la Figura 5.4 se muestran los resultados de la calibración. 70 Figura 5.4. Recta de regresión de temperatura vs. dato en número natural de 12 bits. Se obtuvo la recta de calibración de temperatura con coeficiente R 2 = 0,9994. 5.4 Filtro para las señales de flujo Otro resultado fue la implementación de un filtro FIR (Finite Impulse Response) de Medias Móviles para filtrar las señales sensadas de flujo de oxígeno y aire. Se especificaron 256 coeficientes para el filtro; y entre sus principales características están su estabilidad y que tiene una respuesta de fase lineal, es decir, su respuesta tiene un retraso constante. De las dos señales, la señal de flujo de aire es la que más necesita del filtro implementado debido a la característica de su actuador, que genera el flujo bombeando aire. En la Figura 5.4 se muestra un cuadro comparativo entre la señal de flujo de aire antes del filtro y la señal filtrada. Se logró reducir el error de +/- 0,49 Lpm (litros por minuto) en el estado transitorio y el error de +/- 0,14 Lpm en el estado estable a un error de +/- 0,01 Lpm. 71 5.5 Resultados del control Se realizaron pruebas relacionadas con el control de temperatura y el control de flujo de aire dentro de la BAN. No se realizaron las pruebas de los algoritmos de control de oxígeno ni de control de humedad relativa debido a que el hardware asociado a estos está todavía en proceso de implementación. 5.5.1 Control de flujo de aire Las incubadoras tradicionales son incapaces de proporcionar un flujo de aire enriquecido con oxígeno al recién nacido, por lo que en los hospitales y clínicas se utiliza un equipo adicional denominado blender para realizar esta tarea. Por este motivo, el control de flujo de aire es una característica importante dentro de BAN porque logra que se incorpore la funcionalidad del blender al equipo logrando una diferencia importante con las incubadoras tradicionales. Para el flujo de aire, la estrategia de control que se implementó se basa en el error entre el valor sensado de flujo de aire y el valor programado (meta de control), si el valor sensado es mayor al valor programado se invoca al manejador de la bomba de aire para que decremente el flujo de aire, en caso contrario se le pide que lo incremente. Se realizaron pruebas con diferentes valores de incremento/decremento de la palabra de control de la bomba de aire en cada ejecución del control, con la finalidad de determinar valores adecuados. Así también, durante las pruebas se determinó un valor adecuado para el periodo de ejecución del proceso de Control de Flujo de Aire. Finalmente, el periodo del control se programó en 5 segundos y la palabra de control se definió en el rango de 1550 a 4050 con un incremento/decremento de 10. Característica Sobreimpulso Valor 0 Lpm Tiempo de establecimiento 6,5 minutos Error en el estado estable +/- 0,01 Lpm Tabla 5.9. Características del control de flujo de aire. 72 En la Figura 5.5 se observa el control del flujo de aire para un valor programado de 2 Lpm. Figura 5.5. Flujo de aire: Señal sensada, filtrada y controlada. 5.5.2 Control de temperatura Durante esta etapa se probaron diferentes estrategias de control con la finalidad de disminuir el tiempo de establecimiento de la temperatura y el error presentado respecto al valor programado. Durante las pruebas sólo se programó el control de temperatura en el circuito CCAT dejando el rendimiento de la onda PWM del calefactor del circuito CVC en 1%. 5.5.2.1 Control ON/OFF La primera estrategia de control que se implementó se basa en el error entre el valor sensado de temperatura y el valor programado (meta de control), si el valor sensado es mayor al valor programado se disminuye el rendimiento de la onda PWM respectiva, en caso contrario se aumenta dicho rendimiento. Debido a que se programó un periodo de ejecución del control cada 8 ms, en 1 segundo ya se habían alcanzado los valores de 0% y 100% de la onda PWM según el caso, dejándonos con un control denominado ON/OFF. 73 En la Figura 5.6 se observan los resultados de este primer control que dio como resultados un sobreimpulso de 3 ºC, un tiempo de establecimiento de 2,3 horas y un error en el estado estable de +/- 0,68 ºC. Figura 5.6. Primera prueba del control ON/OFF de temperatura. Luego se modificó esta estrategia de control adicionando un tiempo inicial en el cual el rendimiento se mantenía en un cierto porcentaje. Se probaron valores de 25%, 50% y 100%. Con los valores de 25% y 50% si bien el sobreimpulso era menor, el tiempo de establecimiento aumentaba; por lo que se optó en dejar el rendimiento inicial en un 100% en los primeros 40 minutos. En la Figura 5.7 se observan los resultados de esta primera modificación que dio como resultados un sobreimpulso de 3,47 ºC, un tiempo de establecimiento de 2,5 horas y un error en el estado estable de +/- 0,7 ºC. Sin embargo, los resultados no mejoraron debido a que en los primeros 40 minutos iniciales ya se había alcanzado la meta de control. 74 Figura 5.7. Segunda prueba del control ON/OFF de temperatura. Teniendo como base esta experiencia se decidió tratar el tiempo inicial como una cantidad variable. En este tiempo inicial el rendimiento se mantenía en 100% hasta llegar a tener una diferencia de 2,5 ºC con la meta de control, cantidad basada en los valores de los sobreimpulsos observados durante las pruebas. Luego se mantenían los calefactores apagados durante 15 minutos , con la finalidad de aprovechar la inercia térmica y lograr un menor sobreimpulso. En la Figura 5.8 se observan los resultados de esta segunda modificación que dio como resultados un sobreimpulso de 0,96 ºC, un tiempo de establecimiento de 1,17 horas y un error en el estado estable de +/- 0,75 ºC. Notablemente superiores a los primeros obtenidos. 75 Figura 5.8. Tercera prueba del control ON/OFF de temperatura. 5.5.2.2 Control proporcional La segunda estrategia que se implementó fue la de un control proporcional, la cual se basa también en el error entre el valor sensado de temperatura y el valor programado (meta de control). En el caso de que se esté por debajo de la meta de control, el rendimiento de la onda PWM se obtiene al dividir el error entre el rango de temperatura, en el caso contrario simplemente se le asigna cero. Además, se definió el incremento del rendimiento de la onda en pasos de 3,3% debido a la limitación de las operaciones con números de 16 bits (el porcentaje es equivalente a 8 ms según la configuración del sistema, como se muestra en la Figura 5.9). En la siguiente figura se muestra la onda del calefactor en el CCAT. 76 Figura 5.9. Onda PWM del calefactor CCAT (Rendimiento en lógica negativa). En la Figura 5.10 se observan los resultados de este primer control proporcional, que dio como resultados un tiempo de establecimiento de 3 horas y un error en el estado estable de 0,14 ºC, mucho menor a los errores anteriores. Sin embargo, trajo consigo un efecto de desplazamiento (offset) de 1,6 ºC por debajo de la meta de control [Oga03]. Figura 5.10. Primera prueba del control proporcional de temperatura. 77 Por este motivo y teniendo en consideración las experiencias anteriores también se decidió modificar el algoritmo de tal manera que se tenga un tiempo inicial de calentamiento al 100% del rendimiento de la onda PWM hasta que se alcancen la temperatura 2,5 ºC por debajo de la meta de control. En la Figura 5.11 se observan los resultados de esta primera modificación, que dio como resultados un sobreimpulso de 1,12 ºC, un tiempo de establecimiento de 3 horas y un error en el estado estable de +/- 0,16 ºC. Sin embargo, aún se tenía un offset de 0,58 ºC por debajo de la meta de control. Figura 5.11. Segunda prueba del control proporcional de temperatura. Finalmente, se llegó a la conclusión de que el offset anterior era debido a un error de cuantización al momento de hallar el rendimiento de la onda PWM debido principalmente a se está trabajando con aritmética entera. La solución que se le dio fue que cuando el cálculo de rendimiento de cómo resultado 0 (cero), se incremente en un paso el rendimiento de la onda, al estar el valor sensado por debajo del valor programado. En la Figura 5.12 se observan los resultados de esta última modificac ión, que dio como resultados un sobreimpulso de 1,8 ºC, un tiempo de establecimiento de 2,4 horas, un error en el estado estable de +/- 0,13 ºC; y, la eliminación del offset. 78 Figura 5.12. Tercera prueba del control proporcional de temperatura. En la siguiente tabla se muestran las características finales del control de temperatura: Característica Sobreimpulso Valor 1,8 ºC Tiempo de establecimiento 2,4 horas Error en el estado estable +/- 0,13 ºC Tabla 5.10. Características del control de temperatura. Cabe resaltar que la temperatura de mando fue de 34 ºC, siempre superior en 3 ºC a la temperatura ambiente. Además, se debe resaltar que el valor del error es menor a +/- 0,5 ºC y que el valor del sobreimpulso es menor a 2 ºC; valores especificados por la norma internacional IEC 60601-2-19: Medical electrical equipment. Part 2: Particular requirements for the safety of baby incubators, de la International Electrothecnical Commission [IEC90]. 79 5.6 Resultados adicionales A continuación se presentan los resultados adicionales alcanzados. • El módulo TEC implementa el protocolo de comunicación entre el ATmega 128 y el Módulo de Ingreso de Datos, procesando los comandos que le llegan. • El módulo SON implementa el protocolo de comunicación entre el ATmega 128 y el Módulo de Sonidos. Envía los comandos de que sonido se desea escuchar, así como el volumen. • El módulo VIS implementa el protocolo de comunicación entre el ATmega 128 y el Módulo de Visualización. Envía los comandos acerca del píxel que se desea dibujar, especificando su color, en alguna página de la memoria de video de dicho módulo. Maneja también la paginación de la memoria de video de la pantalla LCD. • Desarrollo, en lenguaje de programación java, del programa Bitmap2ScenixFrame (Figura 5.13) capaz de pasar la información de la imagen en formato GIF al formato que entiende el microcontrolador Scenix del Módulo de Visualización. Figura 5.13. Programa Bitmap2ScenixFrame. 80 • Desarrollo, en lenguaje de programación Visual Basic, del programa CommSistemaBAN (Figura 5.14) que se comunica con el Sistema BAN a través del puerto serial de la computadora personal, recibe los datos que le envía, los visualiza y los guarda en un archivo con formato CSV. Figura 5.14. Programa CommSistemaBAN. • Desarrollo, en lenguaje de programación C, del programa RTA_DMPO (Figura 5.15) que realiza el análisis de tiempo de respuesta para un conjunto de procesos en un sistema multitarea. Figura 5.15. Programa RTA_DMPO. • Se estructuró una metodología preliminar para el desarrollo de software de sistemas embebidos de tiempo real. La que se implementó a lo largo del desarrollo de esta tesis. 81 Figura 5.16. Burbuja Artificial Neonatal. 82 6 CONCLUSIONES Y RECOMENDACIONES Introducción Todos los objetivos propuestos en este trabajo fueron cumplidos plenamente. El desarrollo del software del sistema embebido de la Burbuja Artificial Neonatal (Fase Experimental), fue realizado de forma satisfactoria y exitosa. Se ha demostrado que el sistema BAN es un sistema de tiempo real planificable que cum ple tanto con su especificación funcional como con su especificación no funcional. 6.1 Conclusiones 6.1.1 Respecto al Sistema BAN Al iniciarse el desarrollo no se tenían experiencias anteriores en el desarrollo de sistemas similares, por lo que no se tenía un dato aproximado de cuánta memoria se iba a necesitar, ni se sabía cuánta capacidad de procesamiento se iba a requerir para cumplir con los requerimientos temporales. Se terminó usando el 8,8% de la memoria Flash, del microcontrolador ATmega 128, para los códigos del Sistema BAN y el 29,3% de la misma para datos. El caso de la memoria SRAM sí fue crítico, se terminó usando el 100% de esta memoria. En lo que respecta a la capacidad del procesador utilizada, ésta fue del 34,014% del total. Lo que nos permite pensar, sin poner en riesgo la planificabilidad del sistema, en la implementación de estrategias de control más sofisticadas mediante el uso de números en punto flotante o enteros escalados en las siguientes etapas del Proyecto Burbuja Artificial Neonatal. 83 Por otro lado, lo que demandó más tiempo fue la implementación en lenguaje ensamblador, el cual se eligió por los motivos expuestos. Sin embargo, haber desarrollado el Sistema BAN en este lenguaje permitió la codificación de rutinas eficientes tanto en espacio como en tiempo. Especialmente, se tuvo control de este último parámetro en todo momento. Cabe resaltar también, que es posible la reutilización del núcleo GHOST, así como las rutinas del Nivel 2 del Sistema BAN que se consideren necesarias en futuros desarrollos. Así mismo, se postula que sistemas de esta naturaleza, con la preponderancia de procesos periódicos, pueden ser resueltos estrictamente mediante el uso de timers (OS_dormir()) y el uso de memoria compartida con acceso protegido (OS_ENTRAR_SECCION_CRITCA() y OS_SALIR_SECCION_CRITICA() ). Sólo se hace necesario el uso de mensajes en el caso de presencia de procesos esporádicos; o, en el caso de que un proceso necesite activar a dos o más procesos que necesiten llevar la cuenta del tiempo que transcurre simultáneamente. 6.1.2 Respecto a GHOST El uso del núcleo GHOST permitió el uso eficiente de un único procesador. La duración de la rutina del planificador es muy pequeña, 51,733 µs, lo que representa un porcentaje de utilización del procesador de 1,293% para un tick de 4 ms. Además, cuenta con un valor bajo de jitter, 2,663%, lo que mejora la precisión del sistema. Asimismo, se considera de mucha importancia tener un núcleo como GHOST, que ayudará a reducir el tiempo de desarrollo de futuros equipos que se proyectan implementar en el GIDEMS, como es el caso del equipo CPAP (Continuous Positive Airway Pressure) para neonatos, o de desarrollos de otros grupos de investigación. 84 6.1.3 Respecto al control En lo que respecta al control de flujo de aire, el algoritmo de control implementado no presenta sobreimpulso respecto a la meta de control. El tiempo de establecimiento logrado fue de 6,5 minutos, con un error mínimo en el estado estable, el cual fue de +/- 0,01 Lpm. Cabe resaltar que debido a la variabilidad de la señal de flujo de aire, la utilización del filtro digital fue fundamental en el proceso de control. Para el caso del control de temperatura, se probaron la estrategia de control ON/OFF y la de control proporcional. Además, se realizaron una serie de modificaciones con la finalidad de mejorar sus características. Bajo los resultados arrojados por las pruebas que se realizaron, el control ON/OFF proporcionaba magnitudes menores para el sobreimpulso, 0,96 ºC, y para el tiempo de establecimiento, 1,17 horas. Esto se debe al hecho de que en el inicio se le proporcionaba más energía al sistema, con lo que se llegaba más rápido a la meta de control y, por ende, la temperatura se establec ía más rápido. Sin embargo, esta estrategia de control presentaba un error en el estado estable de +/- 0,75 ºC, lo que es crítico debido a que las variaciones térmicas tienen implicancias en la salud del neonato de alto riesgo. El control proporcional arrojó un error mucho menor en el estado estable con un valor de +/0,13 ºC; el cual es un valor menor al +/- 0,5 ºC especificado por la norma internacional IEC 60601-2-19. El sobreimpulso que arrojó, de 1,8 ºC, también es menor a los 2 ºC especificados en dicha norma. Aunque el tiempo de establecimiento, de 2,4 horas, es mayor al del primer control implementado, no se especifica ningún valor en dicha norma. 85 6.1.4 Respecto al proceso de desarrollo Haber usado un simulador de software y hardware, como el VMLab, permitió reducir el tiempo de desarrollo del sistema de la BAN. Especialmente en la etapa de pruebas, donde se probó las funciones del Sistema BAN antes de bajarlos a las memorias del microcontrolador ATmega 128 para su final ejecución. El desarrollo de la herramienta Bitmap2ScenixFrame facilitó enormemente el trabajo con imágenes para la pantalla LCD, al permitir la edición de éstas en un formato conocido (GIF) por cualquier editor de imágenes de computadora, debido a que puede transformar este formato al formato entendido por el Módulo de Visualización. La implementación de una interfaz compatible con el puerto serial de una computadora personal ha aportado beneficios en cuanto al desarrollo, al servir de medio de transferencia de información entre el equipo y la PC. La herramienta CommSistemaBAN permitió también la automatización de la toma de datos durante la fase de pruebas, guardando la información que le enviaba la BAN en un archivo del tipo CSV (Comma Separated Value). Los datos recopilados eran luego analizados en su conjunto. Además, la metodología de desarrollo de software de sistemas embebidos de tiempo real que se siguió puede ser tomada como base para la consolidación de una mucho más madura. Finalmente, el presente trabajo sienta las bases para futuras investigaciones en el área de desarrollo de software de sistemas embebidos para equipos médicos de soporte de vida. 86 6.2 Recomendaciones Habiéndose desarrollado el prototipo experimental de la BAN se recomienda continuar con el trabajo de investigación hasta lograr un equipo que pueda ser utilizado en las Unidades de Neonatología de los hospitales y/o clínicas. A continuación, se presentan las recomendaciones: • En los esquemas como los de este equipo, en los que se usan más de un microcontrolador se recomienda siempre utilizar protocolos de comunicación bidireccionales de tal manera que se pueda enviar una confirmación de comando recibido, con lo que se podría implementar esquemas de seguridad que actúen según el estado en el que se encuentran los microcontroladores, dispositivos y demás componentes; con la finalidad de hacer más robusto el equipo. • Se recomienda también, la implementación de una librería que permita trabajar con números reales, como una librería de punto flotante o una librería que trabaje con enteros escalados, con la finalidad de poder implementar estrategias de control más sofisticadas. • Por otro lado, se recomienda implementar un esquema de auditoria capaz de guardar en la memoria no volátil la información asociada a todos los eventos relevantes en el equipo como lo son: cambios en la programación del equipo, activación de alarmas, etc. (p.e. fecha y hora de la ocurrencia del evento). Además, estos datos podrían ser transmitidos a una computadora y almacenados en una base de datos, con el fin de facilitar un programa de tecnovigilancia. • Finalmente, al ser la confiabilidad un tema clave en un equipo médico, sobretodo si se trata de uno de soporte de vida, se recomienda fuertemente iniciar cada nuevo desarrollo con un análisis de riesgos, como lo recomienda la norma internacional IEC601-1-4: Medical Electrical Equipment. Part 1: General requirements for safety. 4. Collateral Standard: Programmable electrical medical systems, de la International Electrothecnical Commission. Con ésta finalidad, se podrían usar métodos como el Fault Tree Analysis (FTA) o el Failure Mode and Effect Analysis (FMEA). 87 7 BIBLIOGRAFÍA [A&T89] David Auslander y Cheng Tham, Real-time software for control: program examples in C. 1989. [ASL05] Aerospace Software Ltd., The Very Basics on FIR Filters. 2005. URL disponible en: http://www.aerospacesoftware.com/fir.htm [Atm04] Atmel Corporation, Hoja de datos del microcontrolador ATmega 128, Rev. 2467MAVR-11/04. Noviembre 2004. [Atm05] Atmel Corporation. 2005. URL disponible en: http://www.atmel.com/ [Aud93] N. Audsley, A. Burns, M. Richardson, K. Tindell y A.J. Wellings, Applying new scheduling theory to static priority pre-emptive scheduling. Software Engineering Journal, 8(5), 284-92. 1993. [B&W96] Alan Burns y Andy Wellings, Real-Time Systems and Programming Languages. Segunda Edición 1996. [Bar05] Richard Baraniuk, Practical Filters . 2005. URL disponible en: http://cnx.rice.edu/content/m10126/latest/ [Beu03] Danilo Beuche, Composition and Construction or Embedded Software Families, Dissertation thesis. Diciembre 2003. URL disponible en: http://wwwivs.cs.unimagdeburg.de/~danilo/diss-lyx-online.pdf [C&A04] Bruno Castillón y Eduardo Ajito, Patent Number EP1380276. Neonatal Bubble. Enero 2004. [ENP04] Europe's Network of patent databases. 2004. URL disponible en: http://es.espacenet.com [Eve05] EventHelix.com Inc., Real-time and embedded software design. 2005. URL disponible en: http://www.eventhelix.com/RealtimeMantra/Basics 88 [IEC90] International Electrothecnical Commission, International Standard IEC601-2-19: Medical electrical equipment. Part 2: Particular requirements for safety of baby incubators. Primera Edición 1990. [IEC96] Interna tional Electrothecnical Commission, International Standard IEC601-1-4: Medical Electrical Equipment. Part 1: General requirements for safety. 4. Collateral Standard: Programmable electrical medical systems. Primera Edición 1996. [Iri05] Andoni Irizar, Tratamiento Digital de Señales. Diseño de Filtros Digitales. Escuela Superior de Ingenieros Tecnum Universidad de Navarra. 2005. URL disponible en: http://www.tecnun.com/asignaturas/tratamiento%20digital/TEMA9/sld001.htm [J&P86] M. Joseph y P. Pandya, Finding response times in a real-time system . BCS Computer Journal, 29(5), 390-5. 1986. [L&L73] C. Liu y J. Layland, Scheduling algorithms for multiprogramming in a hard real-time environment. JACM, 20(1), 46-61. 1973. [L&W82] J. Leung y J. Whitehead, On the complexity of fixed-priority scheduling of periodic, real-time tasks. Performance Evaluation (Netherlands), 2(4),237-50. 1982. [Lab02] Jean Labrosse, MicroC/OS-II The Real-Time Kernel. Segunda Edición 2002. [Low05] Lowegian's dspGuru, Digital Signal Processing Information. 2005. URL disponible en: http://dspguru.com/info/faqs/ [Oga03] Katsuhiko Ogata, Ingeniería de Control Moderna. Cuarta Edición 2003. [OMS98] Organización Mundial de la Salud, El Desarrollo de la Evaluación de las Tecnologías en Salud en América Latina y el Caribe. 1998. [Oxf96] Oxford, Dictionary of Computing. 1996. [RAE05] Real Academia Española, Diccionario de la lengua española. Vigésima segunda Edición. 2005. URL disponible en: http://www.rae.es [San05] Norberto Santos et al., Actualización de temas neonatales Tomo I. Asociación Argentina de Perinatología. 2005. 89 [T&W98] Andrew Tanenbaum y Albert Woodhull, Sistemas Operativos: Diseño e implementación. Segunda Edición 1998. [Wik05] WIKIPEDIA The Free Encyclopedia. 2005. URL disponible en: http://en.wikipedia.org [Wor05] WorNet (r) 1.7, Diccionario en línea. 2005. URL disponible en: http://dict.die.net/alpha%20software 90 8 ANEXOS Anexo A. Glosario de Términos Patente BAN: Patente Burbuja Artificial Neonatal. BAN: Así se le denomina al aparato construido sobre la base de la patente BAN. Sistema BAN: Software del sistema embebido de la BAN. Circuito Cerrado de Aire Temperado (CCAT): encargado de conservar y mantener uniforme la temperatura en el ambiente artificial intermedio mediante un calefactor y un ventilador que generan un flujo de aire temperado que se usa como medio de propagación de calor. Este circuito no está en contacto con el neonato, atributo que permite instalar filtros acústicos para reducir el ruido. Circuito Ventilatorio Continuo (CVC): Conjunto de dispositivos neumáticos conectados consecutivamente para ventilar al neonato con un flujo continuo de aire filtrado, oxigenado, temperado y humedecido La cantidad de este gas es regulada según los requerimientos de cada neonato lo cual permite utilizar menor cantidad de oxígeno y mayor tiempo los filtros bacterianos. Modo Monitor: Modo en el que se encuentra normalmente la BAN, monitorizando el sistema. No permite la modificación de ningún valor programado debido a que el teclado está bloqueado. Modo de Programación: Similar al Modo Monitor con la diferencia que se puede cambiar el valor programado de alguna variable. Duty Cycle (ciclo de trabajo): La razón entre la duración de un pulso y el periodo del pulso. Habitáculo del bebé: La parte del equipo destinada a alojar al bebé. 91 Anexo B. Patente BAN 92 Anexo C. Clasificación de Alarmas Las alarmas previstas para el Sistema BAN son: Temperatura T0 - Exceso de temperatura en la cúpula interna (Rango de trabajo: de 25 a 37 ºC). T1 - Defecto de temperatura en la cúpula interna (Rango de trabajo: de 25 a 37 ºC). T2 - Exceso de temperatura en la cúpula externa (Rango de trabajo: de 25 a 37 ºC). T3 - Defecto de temperatura en la cúpula externa (Rango de trabajo: de 25 a 37 ºC). T4 - Exceso de temperatura en la piel del bebé (Rango de trabajo: de 34 a 37 ºC). T5 - Defecto de temperatura en la piel del bebé (Rango de trabajo: de 34 a 37 ºC). Humedad Relativa H0 - Exceso de humedad relativa en el CVC (Rango de trabajo: de 40 a 90%). H1 - Defecto de humedad relativa en el CVC (Rango de trabajo: de 40 a 90%). Mezcla de Gases G0 - Exceso del flujo de oxígeno (Rango de trabajo: de 0 a 5 Lpm). G1 - Exceso del flujo de aire (Rango de trabajo: de 1 a 5 Lpm). G2 - Defecto del flujo de aire (Rango de trabajo: de 1 a 5 Lpm). G3 - Exceso de flujo en la vía de la mezcla (Rango de trabajo: de 1 a 5 Lpm). G4 - Defecto de flujo en la vía de la mezcla (Rango de trabajo: de 1 a 5 Lpm). 93 Anexo D. Convención de llamada a función A continuación, se presenta la convención de la llamada a una función en el Sistema BAN. Dentro de la función se apilan los valores de los registros que se utilizarán como variables locales y antes del retorno de función se desapilan nuevamente. El cuerpo de una función puede lucir como el siguiente ejemplo: 94 Es en el cuerpo de la función que la va a llamar donde se apilan los parámetros de entrada y salida, como se muestra en el siguiente ejemplo. 95 Anexo E. Algoritmo para el Análisis de Tiempo de Respuesta A continuación, se presenta el algoritmo para el análisis de tiempo de respuesta. 96 Anexo F. Fases del Proyecto BAN 1era Fase | Prototipo Experimental (BAN Alfa) Objetivo: Desarrollar un prototipo experimental del aparato BAN basado en la patente. Usuarios Finales: Personal Médico Norma: IEC 601-2-19 Etapas: Captura de requerimientos Diseño del sistema Construcción del sistema Prueba del desarrollo 2da Fase | Prototipo Funcional (BAN Beta) Objetivo: Desarrollar el prototipo funcional del aparato BAN basado en el prototipo experimental y su rediseño. Usuarios Finales: Neonato de Alto Riesgo y Personal Médico Norma: IEC 601-2-19 Etapas: Captura de requerimientos Diseño del sistema (regido por estándares internacionales) Construcción del sistema Prueba del desarrollo Prueba por parte del usuario Presentación del sistema 3era Fase | Producto (BAN Versión 1) Objetivo: Desarrollar un prototipo de producto del Aparato BAN. Usuarios Finales: Neonato de Alto Riesgo y Personal Médico. Norma: IEC 601-2-19. Etapas: Captura de requerimientos Diseño del sistema (regido por estándares internacionales) Construcción del sistema Prueba del desarrollo Prueba por parte del usuario Presentación del sistema Certificación 97 Anexo G. Microcontrolador ATmega 128 El ATmega 128 es un microcontrolador de 8 bits de arquitectura RISC. Posee 32 registros de 8 bits, 1 registro de estado, 1 registro de puntero de pila, registros de configuración de los periféricos y registros X(r27:r26), Y, Z de 16 bits de propósito general, especialmente utilizados para acceso indirecto a la memoria (punteros). El microcontrolador cuenta con memorias internas con espacios de direcciones separados: 128 KB de memoria Flash, 4 KB de memoria EEPROM y 4 KB de memoria SRAM. Además, cuenta con 4 interrupciones internas, 4 interrupciones externas; 2 temporizadores de 8 bits, 2 temporizadores de 16 bits, 1 contador en tiempo real y 1 temporizador watchdog programable. Cuenta también con 6 puertos de 8 bits y 1 de 5 bits configurables como E/S [Atm04]. Microcontrolador ATmega 128. 98 En la siguiente figura se muestra el diagrama de bloques de la arquitectura del microcontrolador ATmega 128. Diagrama de bloques del microcontrolador ATmega 128. 99 Anexo H. Descripción de las interfaces y pines del ATmega 128 En el archivo “E200 Interfaces - Descripción.pdf”, desarrollado por el GIDEMS, se muestra la descripción de las interfaces entre el Módulo de Procesamiento y Control y los demás módulos de la BAN. Para cada una de las interfaces con los otros módulos, se definen los pines utilizados en cada puerto del ATmega 128, se define si es de entrada y/o salida, y se da una descripción de la función del pin. 100 Anexo I. Especificación de Casos de Uso del Sistema BAN En el presente anexo se muestran a detalle las especificaciones de casos de uso. En las siguientes figuras se tienen los diagramas de casos de uso: Diagrama de Casos de Uso. General. 101 Diagrama de Casos de Uso. Programación. Diagrama de Casos de Uso. Control. 102 1 Iniciar el Sistema BAN 1.1 Descripción General Este caso de uso permite al personal médico inicializar el Sistema BAN para su uso. 1.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico enciende la BAN. 2. El Sistema BAN deshabilita el Módulo de Ingreso de Datos (teclado). 3. Se inicializa la memoria SRAM. 4. Se configura el ATmega 128. 5. Se inicializa las pantallas de presentación. 6. Se configura todos los dispositivos de HW. 7. Se inicializa el Núcleo y los contextos de los procesos de la BAN. 8. Se inicializan los parámetros de control usando la configuración estándar guardada. Esta consiste en la programación de: temperatura en el ambiente de la cúpula interna a 34 ºC, humedad relativa a 60 %, porcentaje de oxígeno a 21 % y flujo de la mezcla de aire y oxígeno a 2 L/min. 9. Se habilita el Módulo de Ingreso de Datos (teclado). Flujos Alternativos No se presentan flujos alternativos. 103 2 Leer datos de los sensores 2.1 Descripción General Este caso de uso permite leer los datos de los 9 sensores de la BAN. 2.2 Escenario o Flujo de Eventos Flujo Básico 1. Se adquieren los datos de las señales de temperatura: en la cúpula interna, en la cúpula externa (dos sensores: izquierda y derecha), en el sistema neumático CVC (calefactor interno) y en al piel del bebé; a través del conversor analógico-digital. 2. Se adquieren los datos de la señal de humedad relativa. 3. Se adquieren los datos de la señal de flujo: en la vía de oxígeno, en la vía de aire y en la vía de la mezcla. 4. Se almacenan los valores adquiridos. Flujos Alternativos No se presentan flujos alternativos. 104 3 Procesar las señales sensadas 3.1 Descripción General Este caso de uso permite convertir los datos adquiridos a sus unidades respectivas; y aplicar filtros a los datos sensados de flujo. 3.2 Escenario o Flujo de Eventos Flujo Básico 1. Se convierten los datos de temperatura adquiridos a grados Celsius (ºC): de la cúpula interna, de la cúpula externa (dos sensores: izquierda y derecha), del sistema neumático CVC (calefactor interno) y de la piel del bebé. 2. Se convierten los datos de humedad relativa adquiridos a unidades porcentuales (%). 3. Se aplican algoritmos de filtrado a los datos de la señal de flujo: en la vía de oxígeno, en la vía de aire. 4. Se convierten los datos de los flujos adquiridos a litros por minuto (Lpm). 5. Se almacenan los valores. Flujos Alternativos No se presentan flujos alternativos. 105 4 Monitorizar los parámetros de la BAN 4.1 Descripción General Este caso de uso permite mostrar al personal médico, tanto los valores que se programan como los valores medidos de los parámetros de temperatura en la cúpula interna, temperatura en la piel del bebé, porcentaje de humedad relativa, flujo de la mezcla de gases, porcentaje de oxígeno en la mezcla; además, permite mostrar si alguna alarma se ha activado. 4.2 Escenario o Flujo de Eventos Flujo Básico 1. Se toman los valores de los parámetros sensados, los valores programados y los estados de las alarmas. Estos valores pueden ser modificados por la adquisición de datos, el Módulo de Ingreso de Datos (programación de parámetros) o por el chequeo de alarmas. 2. Se actualiza la región de la memoria de video del Scenix (Módulo de Visualización), con los nuevos parámetros y los nuevos estados de las alarmas. 3. Se vuelve al paso 1. Flujos Alternativos No se presentan flujos alternativos. 106 5 Activar las alarmas de la BAN 5.1 Descripción General Este caso de uso se encarga del manejo de las alarmas en la BAN. Este sistema de alarma es desarrollado en conjunto entre el Módulo de Ingreso de Datos (sonidos de alarmas), el Módulo de Procesamiento y Control y el Módulo de Visualización. (La clasificación de las alarmas se muestra en el Anexo C). 5.2 Escenario o Flujo de Eventos Flujo Básico 1. El Módulo de Ingreso de Datos detecta un estado de alarma en la BAN, al también sensar las señales de la BAN. 2. El Módulo de Ingreso de Datos manda a sonar el sonido correspondiente a la alarma que se ha activado. 3. El procesador ATmega 128 por su parte también evalúa si un parámetro está fuera del rango establecido, y de darse el caso activa el estado de alarma. 4. El Módulo de Procesamiento y Control se encarga de reflejar el estado de la alarma en la pantalla LCD, comunicándose con el Módulo de Visualización (Scenix). Flujos Alternativos No se presentan flujos alternativos . 107 6 Apagar las alarmas de la BAN 6.1 Descripción General Este caso de uso permite al personal médico apagar el sonido de las alarmas de la BAN. 6.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico presiona un botón de desactivación de las alarmas. 2. El PIC16F877 del Módulo de Ingreso de Datos desactiva el sonido de las alarmas. 3. El PIC16F877 del Módulo de Ingreso de Datos inhabilita, por un intervalo de tiempo de 5 minutos, la activación de las alarmas a fin de que no se vuelva a activar inmediatamente el sonido de la alarma. 4. En todo momento, a pesar de que se desactive el sonido de las alarmas, estas se seguirán mostrando en pantalla. Flujos Alternativos No se presentan flujos alternativos. 108 7 Programar temperatura 7.1 Descripción General Este caso de uso permite al personal médico programar el valor de temperatura en la cúpula interna de la BAN, en un rango de 25°C a 37°C. El valor modificado se visualiza en la región de los parámetros programados de la pantalla. 7.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico presiona un botón de programación de temperatura. 2. El PIC16F877 del Módulo de Ingreso de Datos (teclado) detecta que se ha activado la programación de temperatura. 3. El personal médico puede modificar el valor del parámetro moviendo el encoder del panel de control. Los valores permitidos están en un rango de 25°C a 37°C. 4. Cada vez que se mueve el encoder, el PIC16F877 interrumpe al Módulo de Procesamiento y Control (ATmega 128), señalándole que se está aumentando o disminuyendo el valor de temperatura. 5. El Sistema BAN modifica el valor programado de temperatura. 6. El cambio se debe de ver reflejado en la pantalla LCD del Módulo de Visualización (Scenix). 7. Luego de un tiempo determinado, si no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. Flujos Alternativos No se presentan flujos alternativos. 109 8 Programar humedad relativa 8.1 Descripción General Este caso de uso permite al personal médico programar el valor de porcentaje de humedad relativa en el aire de la cúpula interna de la BAN, en un rango de 40% a 90%. El valor modificado se visualiza en la región de los parámetros programados de la pantalla. 8.2 Escenario o Flujo de Eventos Flujo Básico 1. El flujo es similar al de la función “Programar temperatura”. Se presiona un botón de programación de la humedad relativa; y, los valores permitidos están en un rango de 40% a 90%. Flujos Alternativos No se presentan flujos alternativos. 110 9 Programar flujo de la mezcla de gases 9.1 Descripción General Este caso de uso permite al personal médico programar el valor de flujo de la mezcla de gases dentro de la BAN, en un rango de 3 Lpm a 10 Lpm. El valor modificado se visualiza en la región de los parámetros programados de la pantalla. 9.2 Escenario o Flujo de Eventos Flujo Básico 1. El flujo es similar al de la función “Programar temperatura”. Se presiona un botón de programación de flujo; y, los valores permitidos están en un rango de 3 Lpm a 10 Lpm. 2. Adicionalmente, se leen los valores programados de porcentaje de oxígeno y de flujo total de la mezcla, y empleando las fórmulas que relacionan estas dos variables se hallan los valores de flujo de aire y de flujo de oxígeno requeridos para cumplir con los valores programados. Flujos Alternativos No se presentan flujos alternativos. 111 10 Programar porcentaje de oxígeno 10.1 Descripción General Este caso de uso permite al personal médico programar el valor de porcentaje de oxígeno dentro de la BAN, en un rango de 21% a 100%. El valor modificado se visualiza en la región de los parámetros programados de la pantalla. 10.2 Escenario o Flujo de Eventos Flujo Básico 1. El flujo es similar al de la función “Programar temperatura”. Se presiona un botón de programación de porcentaje de oxígeno; y, los valores permitidos están en un rango de 21% a 100%. 2. Adicionalmente, se leen los valores programados de porcentaje de oxígeno y de flujo total de la mezcla, y empleando las fórmulas que relacionan estas dos variables se hallan los valores de flujo de aire y de flujo de oxígeno requeridos para cumplir con los valores programados. Flujos Alternativos No se presentan flujos alternativos. 112 11 Programar sonido 11.1 Descripción General Este caso de uso permite al personal médico programar el sonido dentro de la BAN. 11.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico presiona un botón de programación de sonidos. 2. El PIC16F877 del Módulo de Ingreso de Datos (teclado) detecta que se ha activado la programación de sonidos. 3. El personal médico puede programar la melodía moviendo el encoder del panel de control. 4. Cada vez que se mueve el encoder, el PIC16F877 interrumpe al Módulo de Procesamiento y Control (ATmega 128), enviándole la nueva melodía programada. 5. El Módulo de Procesamiento y Control envía un mensaje al Módulo de Sonidos para que reproduzca la melodía programada. 6. Se escucha el sonido respectivo. 7. Luego de un tiempo determinado, si no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. Flujos Alternativos No se presentan flujos alternativos. 113 12 Programar volumen de sonido 12.1 Descripción General Este caso de uso permite al personal médico programar el volumen de sonido dentro de la BAN. 12.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico presiona un botón de programación de volumen. 2. El PIC16F877 del Módulo de Ingreso de Datos (teclado) detecta que se ha activado la programación de volumen. 3. El personal médico puede programar el volumen moviendo el encoder del panel de control. 4. Cada vez que se mueve el encoder, el PIC16F877 interrumpe al Módulo de Procesamiento y Control (ATmega 128), enviándole el nuevo volumen programado. 5. El Módulo de Procesamiento y Control envía un mensaje al Módulo de Sonidos para que cambie el volumen. 6. Luego de un tiempo determinado, si no se ha vuelto a Modo Monitor de manera manual, el Sistema BAN vuelve a Modo Monitor. Flujos Alternativos No se presentan flujos alternativos. 114 13 Volver a Modo Monitor 13.1 Descripción General Este caso de uso permite al personal médico volver a la pantalla de Modo Monitor de la BAN; en este modo el teclado está bloqueado. 13.2 Escenario o Flujo de Eventos Flujo Básico 1. El personal médico presiona un botón de vuelta a Modo Monitor. 2. El PIC 16F877 del Módulo de Ingreso de Datos (teclado) interrumpe al Módulo de Procesamiento y Control (ATmega 128). 3. El Sistema BAN detecta que se ha vuelto al Modo Monitor. Flujos Alternativos No se presentan flujos alternativos. 115 14 Controlar temperatura 14.1 Descripción General Este caso de uso permite el control de la temperatura en la BAN según el valor programado por el personal médico, en un rango de 25 ºC a 37 ºC. 14.2 Escenario o Flujo de Eventos Flujo Básico 1. Se lee el valor programado de temperatura. 2. Se leen los valores sensados de temperatura en la cúpula interna y en el sistema neumático CVC (calefactor interno). 3. Para el control de temperatura se utilizan dos ondas PWM (Modulación por Ancho de Pulso), una por calefactor. El rendimiento de cada onda se calcula sobre la base de la diferencia entre el valor sensado de temperatura y el valor programado. 4. Se mandan las palabras de control al Módulo de Manejo de Dispositivos de Control de modo que los calefactores se prendan y apaguen en proporción al rendimiento calculado para cada onda. 5. Se vuelve al paso 1. Flujos Alternativos No se presentan flujos alternativos . 116 15 Controlar humedad relativa 15.1 Descripción General Este caso de uso permite el control del porcentaje de humedad relativa en la BAN según el valor programado por el personal médico, en un rango de 40% a 90% de humedad relativa. 15.2 Escenario o Flujo de Eventos Flujo Básico 1. Se lee el valor programado de humedad relativa. 2. Se lee el valor sensado de humedad relativa. 3. Si el valor de humedad relativa difiere, se calcula la distancia que debe de moverse el actuador. Luego se convierte la distancia calculada a un intervalo de tiempo. 4. Se manda la palabra de control para que el actuador que regula la humedad relativa se mueva según lo especificado. 5. Cuando se cumple el tiempo calculado, se manda la palabra de control para que el actuador se detenga. 6. Se vuelve al paso 1. Flujos Alternativos No se presentan flujos alternativos. 117 16 Controlar flujo y porcentaje de oxígeno en la mezcla de gases 16.1 Descripción General Este caso de uso permite el control de la mezcla de aire y oxígeno en la BAN según los valores de los parámetros programados por el personal médico, en un rango de 3 Lpm a 10 Lpm para el flujo de la mezcla y en un rango de 21% a 100% para el porcentaje de oxígeno. 16.2 Escenario o Flujo de Eventos Flujo Básico 1. Se leen los valores sensados de flujo de aire, flujo de oxígeno y flujo de la mezcla actuales. 2. Si los valores difieren, se controlan los actuadores de aire y oxígeno para que lleguen al valor calculado. 3. Si el valor de aire difiere, se calcula la velocidad con la que debe de moverse la bomba de aire para que dé el flujo de aire requerido. 4. Se manda la palabra de control para la bomba. 5. Si el valor de oxígeno difiere, se calcula la distancia que debe de moverse el regulador de oxígen o. Luego, se convierte la distancia calculada a un intervalo de tiempo. 6. Se mandan la palabra de control para que el actuador que regula el oxígeno se mueva según lo especificado. 7. Cuando se cumple el tiempo calculado, se manda la palabra de control para que el actuador se detenga. 8. Se vuelve al paso 1. Flujos Alternativos No se presentan flujos alternativos. 118 17 Enviar datos a computadora personal 17.1 Descripción General Este caso de uso le brinda al personal médico la posibilidad de poder conectar la BAN a una PC, a fin de poder llevar un registro en el tiempo del estado de los parámetros importantes del Sistema BAN; así como de las programaciones efectuadas de dichos parámetros . 17.2 Escenario o Flujo de Eventos Flujo Básico 1. Se leen los datos sensados de las variables de: temperatura en la piel del bebé, temperatura en la cúpula externa (izquierda), temperatura en la cúpula externa (derecha), temperatura en la cúpula interna, temperatura en el CVC, humedad relativa, flujo de oxígeno, flujo de aire, flujo de la mezcla. 2. Se leen los datos programados de las variables de: temperatura en la cúpula interna, humedad relativa, porcentaje de oxígeno y flujo de la mezcla. 3. Se lee los estados de las alarmas del Sistema BAN. 4. Se organiza toda la información en una trama de datos. 5. Se envía toda la información, por una interfaz serial mediante el protocolo RS232. Flujos Alternativos No se presentan flujos alternativos. 119