Manual de PRÁCTICAS



centercenterManual de PR?CTICASSistemas de Tiempo Real Gerardo Ortiz Rivera8820090900Manual de PR?CTICASSistemas de Tiempo Real Gerardo Ortiz RiveraUniversidad de GuadalajaraCentro Universitario de los LagosDepartamento de Ciencias Exactas y Tecnologíacenter1270000?ndice:Contenido TOC \o "1-3" \h \z \u ?ndice: PAGEREF _Toc469408172 \h 11.Introducción a los sistemas de tiempo real PAGEREF _Toc469408173 \h 41.1.Definición PAGEREF _Toc469408174 \h 41.2.Características PAGEREF _Toc469408175 \h 51.2.1.Determinismo PAGEREF _Toc469408176 \h 61.2.2.Responsividad PAGEREF _Toc469408177 \h 61.2.3.Usuarios controladores PAGEREF _Toc469408178 \h 61.2.4.Confiabilidad PAGEREF _Toc469408179 \h 61.2.4.Restricciones PAGEREF _Toc469408180 \h 71.2.5.Predecibilidad PAGEREF _Toc469408181 \h 71.3.Practica 1 PAGEREF _Toc469408182 \h 81.4.Practica 2 PAGEREF _Toc469408183 \h 92.Dise?o PAGEREF _Toc469408184 \h 102.1.Actividades de Dise?o PAGEREF _Toc469408185 \h 102.1.1.Encapsulamiento PAGEREF _Toc469408186 \h 112.1.2.Cohesión y acoplamiento PAGEREF _Toc469408187 \h 112.2.Métodos de dise?o PAGEREF _Toc469408188 \h 122.3.El Lenguaje Unificado de Modelado (UML) PAGEREF _Toc469408189 \h 122.3.1.?Qué es y para qué Sirve? PAGEREF _Toc469408190 \h 142.3.2.?Cuáles son las versiones de UML? PAGEREF _Toc469408191 \h 162.3.3.Herramientas para Trabajar UML PAGEREF _Toc469408192 \h 172.3.4.Criticas a UML PAGEREF _Toc469408193 \h 172.4.Arquitectura de STR PAGEREF _Toc469408194 \h 172.5.Dificultades en el dise?o PAGEREF _Toc469408195 \h 192.6.Historia de los Sistemas Operativos PAGEREF _Toc469408196 \h 192.7.Practica 3 PAGEREF _Toc469408197 \h 223.Programación en C para Arduino PAGEREF _Toc469408198 \h 243.1.Características generales de la placa. PAGEREF _Toc469408199 \h 243.2.Entorno de desarrollo. PAGEREF _Toc469408200 \h 243.3.Estructura básica de un programa. PAGEREF _Toc469408201 \h 263.4.Funciones PAGEREF _Toc469408202 \h 263.5.Variables PAGEREF _Toc469408203 \h 273.6.Tipos de Datos PAGEREF _Toc469408204 \h 273.7.Operadores aritméticos PAGEREF _Toc469408205 \h 273.8.Sentencias condicionales PAGEREF _Toc469408206 \h 283.9.Entradas y Salidas Digitales y Analógicas PAGEREF _Toc469408207 \h 303.10.Funciones de tiempo y matemáticas PAGEREF _Toc469408208 \h 303.11.Funciones de generación aleatoria PAGEREF _Toc469408209 \h 303.12.Puerto Serie PAGEREF _Toc469408210 \h 313.13.Ejemplos de Código PAGEREF _Toc469408211 \h 313.14.Practica 4 PAGEREF _Toc469408212 \h 344.Procesos PAGEREF _Toc469408213 \h 364.1.Conceptos PAGEREF _Toc469408214 \h 364.2.Sincronización de procesos PAGEREF _Toc469408215 \h 384.2.1.Concepto Básico PAGEREF _Toc469408216 \h 394.2.2.Problema de la región critica PAGEREF _Toc469408217 \h 394.2.3.Primer Algoritmo PAGEREF _Toc469408218 \h 404.2.4.Segundo Algoritmo PAGEREF _Toc469408219 \h 404.2.5.Hardware de sincronización PAGEREF _Toc469408220 \h 414.2.6.Semáforo: Herramienta de sincronización PAGEREF _Toc469408221 \h 414.3.Frecuencia de reloj PAGEREF _Toc469408222 \h 424.4.Interacción entre tareas PAGEREF _Toc469408223 \h 434.5.Modelado de tareas PAGEREF _Toc469408224 \h 444.6.Practica 5 PAGEREF _Toc469408225 \h 484.7.Practica 6 PAGEREF _Toc469408226 \h 505.Planificador PAGEREF _Toc469408227 \h 525.1.Planificación (scheduling) PAGEREF _Toc469408228 \h 545.2.Planificación Cíclica PAGEREF _Toc469408229 \h 575.3.Practica 7 PAGEREF _Toc469408230 \h 635.4.Practica 8 PAGEREF _Toc469408231 \h 655.5.Practica 9 PAGEREF _Toc469408232 \h 665.6.Practica 10 PAGEREF _Toc469408233 \h 695.7.Practica 11 PAGEREF _Toc469408234 \h 735.8.Practica 12 PAGEREF _Toc469408235 \h 755.9.Practica 13 PAGEREF _Toc469408236 \h 79Bibliografía (Referencias): PAGEREF _Toc469408237 \h 86?Introducción a los sistemas de tiempo realA medida que los computadores son más peque?os, rápidos, fiables y baratos, su rango de aplicaciones se amplía. Construidos inicialmente para resolver ecuaciones, su influencia se ha extendido a todos los órdenes de la vida, desde el uso de lavadoras hasta control de tráfico aéreo. Una de las áreas de expansión más rápida de la explotación de computadores es aquélla que implica el uso de aplicaciones, cuyo objetivo primordial no es el de procesar información, pero que requiere de dicho proceso de información con el fin de realizar su función principal. Una Lavadora controlada por microprocesador es un buen ejemplo de dicho tipo de sistemas. En este caso la función principal es la de lavar ropa, sin embargo y dependiendo del tipo de ropa que será lavada, se deben ejecutar ciertas instrucciones y condiciones para los diferentes tipos de lavado. Este tipo de aplicaciones de computador se conoce genéricamente como de tiempo real (STR) o embebido (SE). Se ha estimado que el 99% de la producción mundial de microprocesadores se utiliza en sistemas embebidos. Estos sistemas plantean requisitos particulares para los lenguajes de programación, lo cual es necesario para programarlos ya que tienen características diferentes con respecto a las de los sistemas de procesamiento de información tradicional.DefiniciónExisten muchas interpretaciones sobre la naturaleza de un sistema de tiempo real, sin embargo, todas tienen en común la noción de tiempo de respuesta: “El tiempo que precisa el sistema para generar la salida a partir de alguna entrada asociada”. Por la cual se definiría como un sistema informático que interacciona con su entorno físico y responde a los estímulos del entorno dentro de un plazo de tiempo determinado. No basta con que las acciones del sistema sean correctas, sino que además, tienen que ejecutarse dentro de un intervalo de tiempo determinado.El Oxford Dictionary of Computing (Diccionario Oxford de computación), proporciona la siguiente definición de un sistema de tiempo real: -“Cualquier sistema en que el tiempo que se produce la salida es significativo. Esto Generalmente es porque la entrada corresponde a algún movimiento en el mundo físico, y la salida está relacionada con dicho movimiento. El intervalo entre el tiempo de entrada y el de saluda debe ser lo suficientemente peque?o para una temporalidad aceptable.”-.Young, S (1982). Real time Languages – design and Development. Ellis Horwood, Define: -“… Cualquier actividad o Sistema de proceso de información que tiene que responder a un estímulo de entrada generado externamente en un periodo finito y especificado.”-.El Proyecto PDCS (Predictably Dependable Computer System) proporciona la definición siguiente (Randel et al. 1995): -“Un Sistema de tiempo real es aquel al que se le solicita que reaccione a estímulos del entorno (incluyendo el paso de tiempo físico) en intervalos del tiempo dictados por el entorno.”-.Wikipedia Define: -“Un sistema de tiempo real es un sistema informático que interacciona con su entorno físico y responde a los estímulos del entorno dentro de un plazo de tiempo determinado. No basta con que las acciones del sistema sean correctas, sino que, además, tienen que ejecutarse dentro de un intervalo de tiempo determinado.”-.Al final podemos determinar cómo definición moderna como: -“Un sistema de tiempo real es un sistema de procesamiento de información el cual tiene que responder a estímulos de entrada generados externamente en un período finito y específico”-.Las respuestas correctas dependen no solo de los resultados lógicos sino también del tiempo en que son entregadas. Las fallas para responder a tiempo son tan malas como una mala respuesta!.CaracterísticasEn su sentido: más, genera todas las definiciones, mismas que cubren un amplio rango de actividades de los computadores. Por ejemplo, un Sistema Operativo (por sus siglas en inglés: OS) como Unix puede ser considerado de TR en el sentido de que, cuando un usuario introduce un comando, él o ella esperarán una respuesta en pocos segundos. Por fortuna, normalmente esto no es un desastre si la respuesta no se produce en ese tiempo. Estos tipos de sistemas se pueden distinguir de otros en los que un fallo al responder puede ser considerado como una respuesta mala o incorrecta. Efectivamente, para algunos éste es el aspecto que distingue un STR de otros en los que el tiempo de respuesta es importante pero no crucial, Por tanto, -“la corrección de un sistema de tiempo real depende no solo del resultado lógico de la computación, sino también del tiempo en el que se producen los resultados”-.Las personas que trabajan en el campo del dise?o de STR distinguen frecuentemente entre un STR estricto (Hard) y no estricto (Soft). Los sistemas de tiempo real estrictos son aquéllos en los que es absolutamente imperativo que las respuestas se produzcan dentro del tiempo límite especificado. Los sistemas de tiempo real no estrictos son aquéllos en los que los tiempo de respuesta son importantes pero el sistema seguirá funcionando correctamente aunque los tiempo limites no se cumpla ocasionalmente. Los sistemas no estrictos se pueden distinguir de los interactivos, en los que no hay tiempo límite explícito. Naturalmente, muchos sistemas tendrán subsistemas tanto del tiempo real estricto como no estricto. Evidentemente, algunos servicios pueden tener un tiempo límite, tanto estricto como no estricto. Por ejemplo, una respuesta a algún suceso de aviso puede tener un tiempo límite Soft de 50 ms (para una reacción óptimamente eficiente) y un tiempo estricto de 200 ms (para garantizar que no se produzcan da?os sobre el equipo o el personal). Entre 50ms y 200 ms el “valor” (o utilidad) de la salida o ilustran estas definiciones y ejemplos, el uso del término Soft no implica un tipo único de requisitos, sino que incorpora un número de propiedades diferentes:El tiempo límite puede no alcanzarse ocasionalmente (normalmente con un límite superior de fallo en un intervalo definido).El servicio se puede proporcionar ocasionalmente tarde (de nuevo, con un límite superior en la tardanza).Un tiempo límite que no cumple ocasionalmente, pero en el que no hay beneficio por la entrega retrasada, se llama firme. En algunos STR, se pueden proporcionar requisitos probabilísticos opcionales a los componentes firmes (por ejemplo, un servicio Hard debe producir una salida cada 300ms; al menos el 80 del tiempo esta salida será producida por un componente firme, X; en otras ocasiones se utiliza un componente Hard, Y, funcionalmente mucho más sencillo).La expresión “sistemas de tiempo real” se utiliza para referirse tanto a tiempos real estricto como no estricto. Cuando la discusión esté relacionada específicamente con sistemas de tiempo real estricto, se utilizará explícitamente el término “Tiempo real estricto”. En un STR estricto o no estricto, el computador interfiere normalmente directamente con algún equipamiento físico, y se dedica a monitorizar o controlar la operación de dicho equipamiento. Una característica fundamental de todas estas aplicaciones es el papal de computador como componente del proceso de información en un sistema de ingeniería más grande. Esta es la razón por la que tales aplicaciones se conocen como Sistemas Embebido.DeterminismoEl determinismo es una cualidad clave en los sistemas de tiempo real. Es la capacidad de determinar con una alta probabilidad, cuanto es el tiempo que se toma una tarea en iniciarse. Esto es importante porque los sistemas de tiempo real necesitan que ciertas tareas se ejecuten antes de que otras puedan iniciar.Esta característica se refiere al tiempo que tarda el sistema antes de responder a una interrupción. Este dato es importante saberlo porque casi todas las peticiones de interrupción se generan por eventos externos al sistema (i.e. por una petición de servicio), así que es importante determinar el tiempo que tardara el sistema en aceptar esta petición de servicio.ResponsividadLa Responsividad se enfoca en el tiempo que tarda una tarea en ejecutarse una vez que la interrupción ha sido atendida. Los aspectos a los que se enfoca son:La cantidad de tiempo que se lleva el iniciar la ejecución de una interrupciónLa cantidad de tiempo que se necesita para realizar la tarea que pidió la interrupción.Los efectos de interrupciones anidadas.Una vez que el resultado del cálculo de determinismo y Responsividad es obtenido, se convierte en una característica del sistema y un requerimiento para las aplicaciones que correrán en él, (por ejemplo, si dise?amos una aplicación en un sistema en el cual el 95 % de las tareas deben terminar en cierto período entonces es recomendable asegurarse que las tareas ejecutadas de nuestra aplicación no caigan en el 5 % de bajo desempe?o).Usuarios controladoresEn estos sistemas, el usuario (por ejemplo, los procesos que corren en el sistema) tienen un control mucho más amplio del sistema.El proceso es capaz de especificar su prioridadEl proceso es capaz de especificar el manejo de memoria que requiere (que parte estará en caché y que parte en memoria swap y que algoritmos de memoria swap usar)El proceso especifica qué derechos tiene sobre el sistema.Esto aunque parece anárquico no lo es, debido a que los sistemas de tiempo real usan tipos de procesos que ya incluyen estas características, y usualmente estos TIPOS de procesos son mencionados como requerimientos. Un ejemplo es el siguiente:?Los procesos de mantenimiento no deberán exceder el 3 % de la capacidad del procesador, a menos que en el momento que sean ejecutados el sistema se encuentre en la ventana de tiempo de menor uso.?ConfiabilidadLa confiabilidad en un sistema de tiempo real es otra característica clave. El sistema no debe solamente estar libre de fallas pero más aún, la calidad del servicio que presta no debe degradarse más allá de un límite determinado.El sistema debe de seguir en funcionamiento a pesar de catástrofes, o fallas mecánicas. Usualmente una degradación en el servicio en un sistema de tiempo real lleva consecuencias catastróficas.RestriccionesAl imponer las restricciones a un sistema tendremos por consecuente estos puntos:Restricciones de tiempo: (Cómputo, Periodo, Plazos).Restricciones de predecibilidad.Restricciones de recursos: una tarea puede requerir acceso a ciertos recursos, además del procesador, como dispositivos de E/S, redes de comunicación, estructuras de datos, archivos y bases de datos.Restricciones de precedencia: una tarea puede requerir resultados de una u otra tarea antes de comenzar su ejecución.Restricción de confiabilidad y desempe?o: una tarea podría tener que cumplir con ciertas restricciones de confiabilidad, disponibilidad o desempe?o.PredecibilidadUna característica distintiva de un sistema de tiempo real es la predecibilidad. La cual implica que debe ser posible demostrar o comprobar a priori que los requerimientos de tiempo se cumplen en cualquier circunstancia. Como consecuencia la predecibilidad implica:una cuidadosa planificación de tareas y recursos.cumplimiento predecible de requisitos temporales: determinismo.anticipación a fallos, y sus requerimientos temporales.consideraciones de sobrecargas: degradación controlada.consideraciones de elementos de inpredecibilidad.dotar al sistema con capacidades de monitorización y control de tiempos (hardware, software, sistema operativo, lenguaje, líneas y protocolos de comunicaciones).Practica 1Laboratorio de: Electrónica y/o Cómputo.Práctica No.: 1.Tema: Sistemas embebidos o empotrados.Un microprocesador es una implementación en forma de circuito integrado de la Unidad Central de Proceso CPU de una computadora. Los subsistemas de entrada/salida y memoria pueden ser combinados con un subsistema de CPU para formar una computadora o sistema embebido completo. Estos subsistemas se interconectan mediante los buses de sistema (formados a su vez por el bus de control, el bus de direcciones y el bus de datos). El subsistema de entrada acepta datos del exterior para ser procesados mientras que el subsistema de salida transfiere los resultados hacia el exterior. Lo más habitual es que haya varios subsistemas de entrada y varios de salida. A estos subsistemas se les reconoce habitualmente como periféricos de E/S. Objetivos:El objetivo se enfocará en identificar las partes que contienen los PIC?s, tipos RISC, sus variaciones e identificar los más usados, Tarjetas de desarrollo, como Freescale, Arduino, Blackberry Pi, etc. Y variados modelos. Marco teórico:Un microcontrolador es un circuito integrado que incluye una CPU, memoria y circuitos de E/S. Entre los subsistemas de E/S que incluyen los microcontroladores se encuentran los temporizadores, los convertidores analógico digital (ADC) y digital a analógico (DAC) y los canales de comunicaciones serie. Estos subsistemas de E/S se suelen optimizar para aplicaciones específicas (por ejemplo audio, video, procesos industriales, comunicaciones, etc.)Lista de materiales, herramientas y equipos:En una hoja cuadriculada para dibujo u opalina tama?o carta, juegos de geometría, lápiz o pluma. Desarrollo de la práctica:Sobre la hoja de opalina se procederá a cuadricularla o usar la hoja cuadriculada, a continuación se procederá con el juego de geometría a realizar el dibujo técnico a tama?o escala que contengan los siguientes: En una hoja se dibujara la tarjeta de desarrollo, ya sea Arduino o Freescale, etc., en otra se dibujara el PIC, para saber las entradas o salidas hacer consulta al ECG para PIC?s Microcontroller.Identifique las partes esenciales como el Procesador, memoria y E/S, ubique donde se encuentra el oscilador, temporizadores, ADC, DAC, u otros componentes tales como USB, HDMI, etc., siempre y cuando existan en el modelo.Análisis de resultados: Luego de realizar las mediciones y dibujos correspondientes estos deben ser estudiados escribiendo una tabla de especificaciones entre modelos diferente. El estudiante debe centrarse en interpretar los datos y reconocer las partes.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Laboratorio de: Electrónica y/o Cómputo. Practica 2Laboratorio de: Electrónica y/o Cómputo.Práctica No.: 2.Tema: Tipos de memorias.La memoria de acceso aleatorio (en inglés: random-access memory), se utiliza como memoria de trabajo para el sistema operativo, los programas y la mayoría del software. Es allí donde se cargan todas las instrucciones que ejecutan el procesador y otras unidades de cómputo. Se denominan "de acceso aleatorio" porque se puede leer o escribir en una posición de memoria con un tiempo de espera igual para cualquier posición, no siendo necesario seguir un orden para acceder a la información de la manera más rápida posible.Objetivos:El objetivo se enfocará en identificar las partes y funcionamiento de las siguientes memorias:Memoria RAM.Memoria ROMMemoria PROMMemoria EPROMMemoria EEPROMMemoria FlashMarco teórico:Anteriormente habíamos visto que la memoria en los microcontroladores debe estar ubicada dentro del mismo encapsulado, esto es así la mayoría de las veces, porque la idea fundamental es mantener el grueso de los circuitos del sistema dentro de un solo integrado.En los microcontroladores la memoria no es abundante, aquí no encontrará Gigabytes de memoria como en las computadoras personales. Típicamente la memoria de programas no excederá de 16 K-localizaciones de memoria no volátil (flash o eprom) para contener los programas.Lista de materiales, herramientas y equipos:En una hoja cuadriculada para dibujo u opalina tama?o carta, juegos de geometría, lápiz o pluma. Desarrollo de la práctica:Sobre la hoja de opalina se procederá a cuadricularla o usar la hoja cuadriculada, a continuación se procederá con el juego de geometría a realizar el dibujo técnico a tama?o escala que contengan los siguientes: En una hoja se dibujara las diferentes memorias en diagrama electrónicas, ya sea varias en una hoja o como el estudiante crea que sea conveniente.Identifique las partes en di de las memorias indicadas en el objetivo.Análisis de resultados: Luego de realizar las mediciones y dibujos correspondientes estos deben ser estudiados escribiendo una tabla de especificaciones entre modelos diferente. El estudiante debe centrarse en interpretar los datos y reconocer las partes.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Dise?oDentro de las características especiales de los sistemas en tiempo real, diferentes a los demás tipos de sistemas y donde introducen en la definición del sistema se incorporan una serie requerimientos no funcionales, que no se refieren directamente a las funciones específicas si no a propiedades emergentes como por ejemplo, requisitos de fiabilidad, eficiencia o implementación. El dise?o por análisis estructurado que emplea la descripción gráfica se enfoca en el desarrollo de especificaciones del programa que está formado por módulos independientes desde el punto de vista funcional.En esta etapa más importante del desarrollo de cualquier sistema de tiempo real es la generación de un dise?o consistente que satisfaga una especificación acreditada de los requisitos. En esto, los sistemas de tiempo real no difieren de las demás aplicaciones, aunque se escala en conjunto conlleva problemas de dise?o fundamentales. La disciplina de la ingeniería del software se encuentra ampliamente aceptada como el núcleo del desarrollo de métodos, herramientas técnicas con el fin de asegurar la correcta gestión del proceso de producción de software y la consecución de programas correctos y fiables. Incluso con esta restricción, no es posible dar completa cuenta de las muchas metodologías de dise?o propuestas. Los temas de dise?o puede no son nuestro principal foco, más el bien el tema central es investigar las primitivas de los lenguajes y los sistemas operáticos que nos permiten construir los sistemas dise?ados. Aunque la mayoría de las aproximaciones al dise?o son descendentes, se fundamentan en la compresión de que es realizable en los niveles inferiores., en esencia, todos los métodos de dise?o incluyen una secuencia de transformaciones desde el estado de los requisitos iniciales hasta el código ejecutable.Actividades de Dise?oEl dise?o de un sistema embebido grande no se puede hacer de una vez. Debe estructurarse de alguna manera. Para gestionar el desarrollo de los STR complejos, se suelen emplear dos aproximaciones complementarias. Estas forman conjuntamente la base de la mayoría de los métodos de ingeniería de software. La descomposición, como sugiere su nombre, implica una participación sistemática del sistema complejo en partes más peque?as, hasta poder aislar componentes que puedan ser comprendidos y dise?ados por individuos o grupos peque?os. En cada nivel de descomposición, deberá haber un nivel de descripción apropiado y un método para documentar (expresar) esta descripción. La abstracción permitirá posponer cualquier consideración referente a los detalles, particularmente las concernientes a la implementación. Esto permite tener una visión simplificada del sistema y de los objetos contenidos en el que. Aun así contendrá las propiedades y características esenciales. La utilización de la abstracción y de la descomposición impregna todo el proceso de ingeniería, y ha influido en el dise?o de los lenguajes de programación de TR y en los métodos de dise?o de software asociados.Si se emplea una notación formal para la especificación de requisitos, los dise?os de alto nivel deberían utilizar la misma notación, para así poder demostrar si cumplen dicha especificación. Sin embargo, muchas notaciones estructurales pretenden servir para completar el dise?o de alto nivel, o incluso para remplazar la notación formal. De cualquier forma, un dise?o estructurado de alto nivel debería ser una especificación acreditada de los requisitos.EncapsulamientoEl desarrollo jerárquico del software condice a la especificación y subsiguiente desarrollo de los subcomponentes del programa. Por la naturaleza de la abstracción, estos subcomponentes deberán tener roles bien definidos, e interfaces y conexiones claras e inequívocas. Cuando la especificación completa del sistema software puede verificarse teniendo en cuenta únicamente la especificación de los subcomponentes inmediatos, se dice que la descomposición es composicional. Esta es una propiedad importante cuando se trata de analizar formalmente programas.Los programas secuenciales sin particularmente idóneos para los métodos composicionales y existen técnicas para encapsular y representar subcomponentes. Simula introdujo la significativa construcción class (clase). Modula-2 emplea la estructura de modulo, que a pesar de ser menos potente, sigue siendo importante. Más recientemente, han aparecido lenguajes orientados a objetos, como C++, Java, Eiffel y últimamente tenemos Python, partiendo de la construcción clase. Ada empela una combinación de módulos y extensiones de tipo para soportar la programación orientada al objeto.Cohesión y acoplamientoLas dos formas anteriores de encapsulamiento conducen al empleo de módulos con interfaces bien definidas (y abstractas). Pero, ?Cómo debería descomponerse en módulos un sistema grande? En gran medida, la respuesta a esta pregunta está en el trasfondo de todas las actividades de dise?o de software. Sin embargo, antes de la discusión de algunos de estos métodos, debemos considerar algunos principios generales más que conducen a un buen encapsulamiento. La cohesión y el acoplamiento son dos medidas que describen la vinculación entre módulos.La cohesión expresa el grado de unión de un módulo: su fuerza interna. Donde Alworth y Zobel en 1987, indican seis medidas de cohesión que van desde la más débil a las más fuerte:Casual: los elementos del módulos mantienen tan solo vínculos muy superficiales; por ejemplo, el haber sido escritos en el mismo mes.Lógica: los elementos del módulo están relacionados desde el punto de vista des sistema completo, pero no en términos reales de software; por ejemplo, todos los gestores de dispositivos de salida.Temporal: los elementos del módulo se ejecutan en momentos similares; por ejemplo, las rutinas de arranque.Procedural: los elementos de los módulos se emplean en la misma sección del programa; por ejemplo, los componentes de la interfaz de usuario.De comunicación (sic): los elementos de módulos operan sobre la misma estructura de datos.Funcional: los elementos del módulo operan conjuntamente para contribuir a la ejecución de una única función del sistema; por ejemplo, proporcionar un sistema de archivos distribuidos.Métodos de dise?oEn la mayoría de los dise?adores de sistemas de tiempo real promueven un proceso de abstracción de objetos, y que existen técnicas formales que permiten especificar y analizar sistemas concurrentes con restricciones temporales. No cabe dudad de que estas técnicas no están aun suficientemente maduras para construir métodos de dise?o “aprobados y contrastado”, más bien, la industria de tiempo real usa, en el mejor de los casos, métodos estructurados y aproximaciones de ingeniería de software aplicable a la mayoría de los sistemas de procesamiento de información. Estos métodos no proporcionan un soporte específico para el dominio de tiempo real, y carecen de la riqueza necesaria para explotar completamente la potencia de los lenguajes de implementación.Existen muchos métodos de dise?o estructurados orientados a los sistemas de tiempo real: PAMELA, un método que permite la representación de diagramas de actividades cíclicas, máquina de estado y manejares de interrupciones. Sin embargo, la notación no está respaldada por abstracciones para los recursos, y en consecuencia los dise?os no son necesariamente adecuados para el análisis de temporización.EPOS (Lauber, 1989) es otros métodos que da soporte al cielo de vida completo de un STR. Proporciona tres lenguajes de especificación: uno para describir los requisitos de cliente, otro para describir la especificación del sistema, y otro para describir la gestión del proyecto, la gestión de la configuración del sistema, y otro para describir la gestión del proyecto, la gestión de la configuración y la garantías de calidad. Se aborda el reconocimiento temprano del comportamiento de las aplicaciones de tiempo real: sin embargo, este trabajo se basas en una animación de la especificación del sistema, y no es un análisis de temporización.Para una comparación de estos métodos, como se comentó en la introducción, la mayoría de los métodos tradicionales de desarrollo de software incorporan un modelo de ciclo de vida donde se ubican las siguientes actividades:Especificación de requisitos: durante la cual se produce una especificación acreditada del comportamiento funcional y no funcional del sistema.Dise?os arquitectónicos: durante el cual se desarrolla una descripción de alto nivel del sistema propuesto.Dise?o detallado: durante el cual se especifica el dise?o completo del sistema.Codificación: durante la cual se implementa el sistema.Prueba: durante la cual se comprueba la eficacia del sistema.Para los sistemas de tiempo real estrictos, se presenta la desventaja importante de que los problemas de temporización solo se podrán detectar durante la prueba, o, lo que es incluso pero, tras el despliegue (deployment) de la aplicación.El Lenguaje Unificado de Modelado (UML).Durante las últimas décadas, se ha desarrollado una plétora de métodos de análisis y dise?o con orientación de análisis y dise?o con orientación al objeto (O.O.). La primera toma de contacto de la industria fue oscurecida por la falta de un proceso de estandarización. En el dominio de tiempo real, la situación fue exacerbada por la falta de un proceso de estandarización. En el dominio de TR, la situación fue exacerbada por el fracaso de las técnicas O.O. para dar un soporte adecuado a los sistemas de tiempo real. Y esto a pesar de los nuevos logros teóricos sobre el análisis de los programas de tiempo real, que hoy en día son capaces de dar soporte a la mayoría de los requisitos de tiempo real.Recientemente, se ha hecho un esfuerzo significativo por parte del Object Management Group para desarrollar el lenguaje unificado de modelado (UML: Unified Modeling Language) como estándar para la notación de orientación al objeto. UML es un lenguaje gráfico para visualizar especificar, construir y documentar los artefactos de un sistema compuestos principalmente de software. Esta claro que, durante los próximos diez a?os, UML se convertirá en la notación dominante para el análisis y dise?o orientados al objeto. Incluso el resto de métodos orientados al objeto.Los principales aspecto de UML, que se adecuan al modelado de sistemas embebido de STR son:Un modelo de objeto (que incorpora atributos para datos, estado, comportamiento, identidad y responsabilidad) que permite capturar la estructura del sistema.Escenarios de casos de uso, que permiten identificar respuestas claves del sistema o las entradas del usuario.Modelado del comportamiento, con máquinas de estado finito (diagramas de estados; statecharts) que facilitan el modelo de la dinámica del comportamiento del sistema.Empaquetado, que proporciona mecanismo para organizar los elementos del modelado representaciones para la concurrencia, la comunicación y la sincronización (para modelar entidades del mundo real).Modelos de la topología física, donde se empelan diagramas de despliegue para mostrar cómo está compuesto el sistema a partir de dispositivos y procesadores.Soporte para patrones y marcos orientados al objeto, que permite representar soluciones comunes a problemas comunes.Sin embargo y como su nombre indica, UML ofrece un Lenguaje, no un método. En consecuencias, es preciso aumentar la notación con un proceso de dise?o. Se propone ROPES (Rapid Object-Oriented Process for Embedded System; proceso raído orientado al objeto para sistemas embebidos) con UML. Se basa en un ciclo de vida iterativo orientado a la generación rápida de prototipos. Las actividades son: análisis, dise?o, implementación y prueba. En concordancia con otros procesos UML, ROPES está dirigido por los casos de uso. Se identifica un conjunto de caso de uso y se clasifican según su prioridad, riesgo y rasgos en común. Después, se emplean para producir prototipos de los sistemas (mediantes herramientas de generación automática de código, cuando sea posible).El trabajo actual en UML se centra en cómo definir paradigmas estándar para el modelo de sistemas de tiempo real usando un perfil UML. Las cuestiones a dilucidar son, entre otras, como modelar el tiempo y otros recursos, y como predecir el rendimiento de los sistemas (Utilizando análisis de planificabilidad).?Qué es y para qué Sirve?El término “lenguaje” ha generado bastante confusión respecto a lo que es UML. En realidad el término lenguaje quizás no es el más apropiado, ya que no es un lenguaje propiamente dicho, sino una serie de normas y estándares gráficos respecto a cómo se deben representar los esquemas relativos al software. Mucha gente piensa por confusión que UML es un lenguaje de programación y esta idea es errónea: UML no es un lenguaje de programación. Como decimos, UML son una serie de normas y estándares que dicen cómo se debe representar algo.UML es una herramienta propia de personas que tienen conocimientos relativamente avanzados de programación y es frecuentemente usada por analistas funcionales (aquellos que definen qué debe hacer un programa sin entrar a escribir el código) y analistas-programadores (aquellos que dado un problema, lo estudian y escriben el código informático para resolverlo en un lenguaje como Java, C#, Python o cualquier otro). Por tanto si estás dando tus primeros pasos en programación, te recomendaríamos que te olvides de UML hasta que tengas unos conocimientos mínimos como uso de condicionales, bucles, y conocimiento de la programación orientada a objetos. Esto es solo una recomendación, en realidad prácticamente cualquier persona puede usar UML, incluso podría usarse para realizar esquemas o documentación de procesos que no tengan que ver con la informática.Hemos dicho que UML es un estándar. Vamos a aclarar primero qué es un estándar. Supongamos que vamos a definir un estándar llamado “LMAPR” o lenguaje de modelado de . Ahora definimos dentro de nuestro estándar estas normas:Un animal debe representarse con su nombre escrito enteramente en minúsculas enmarcado dentro de un rectángulo doble. Encima del nombre debe etiquetarse el tipo de animal así: <<Tipo de Animal>>. Por ejemplo, <<Gato>>.Si un animal envía un mensaje a otro animal deben conectarse los dos animales con una línea punteada terminada en flecha encima de la cual debe figurar el texto msg(“Contenido del mensaje”).Ahora supongamos que tenemos dos gatos, uno de los cuales le dice al otro “Caza un ratón y tráemelo aquí por favor”. Veamos formas de representar esto:. Esta es una forma de representación. Sin embargo, no se adapta al estándar que hemos definido por varios motivos: no indica <<Gato>> encima de los nombres de los animales, no escribe los nombres en minúsculas, no representa los animales con un rectángulo, etc.Veamos la representación que sí se adaptaría al estándar definido:Con este ejemplo sencillo hemos tratado de hacer explícito qué es y para qué sirve UML: un conjunto de normas que nos dicen cómo hay que representar esquemas de software. En el caso del software orientado a objetos, en vez de gatos tendremos clases u objetos instanciados, y dispondremos de numerosos tipos de esquemas y diagramas para representar distintas cosas. Un esquema que cumple las normas UML podría tener este aspecto:O también este otro:?Por qué si ambos esquemas cumplen con UML tienen un aspecto tan distinto? Porque UML define normas para construir muchos tipos de esquemas, no esquemas de un solo tipo.?Quién usa UML? UML lo suelen usar las empresas o medianos o grandes equipos de desarrollo software con el objetivo de planificar y documentar cómo se construyen los programas informáticos complejos. Los usuarios individuales o peque?os equipos de desarrollo de 2 ó 3 personas no suelen usar herramientas UML. UML es un término que se relaciona mucho con “Ingeniería del software”. Al igual que un proyecto de edificio requiere la participación de un arquitecto y unos plantos, un proyecto software requiere la participación de ingenieros informáticos y una planificación y documentación.?Cuáles son las versiones de UML?Los antecedentes de UML se sitúan en la década de los 90 con distintos estándares para modelado de software, no obstante podemos hablar de dos grandes versiones:UML 1.X (comprende UML 1.1, 1.2, 1.3, 1.4, 1.5): desde finales de los 90 se empezó a trabajar con el estándar UML. En los a?os sucesivos fueron apareciendo nuevas versiones que introducían mejoras o ampliaban a las anteriores.UML 2.X (comprende UML 2.1 hasta UML 2.5, 2.6, etc.): en torno a 2005 se difundió una nueva versión de UML a la que podemos denominar UML 2.X. Comprenden varias revisiones.UML 3.X: evolución que se espera para UML 2.X.Hay que tener en cuenta que UML es un conjunto muy amplio de normas. Prácticamente nadie las conoce todas. Según la empresa o universidad, institución o centro de trabajo se usan determinados programas para crear diagramas y se conocen ciertas partes de UML, pero no el conjunto de UML.?Qué versión usar? Para generar diagramas UML se usan programas informáticos. Usa un programa actualizado pero no te preocupes en exceso por qué versión de UML usar, lo importante es que en tu grupo de trabajo o personas a las que se les vaya a enviar documentación sobre un proyecto software sepan interpretar lo que se les envía. A nivel profesional no se le presta demasiada atención a que se cumpla estrictamente con las normas de una determinada versión de UML, sino a que los esquemas estén bien construidos y razonados.Herramientas para Trabajar UMLHay muchísimos programas que permiten trabajar con UML, aunque aprender a usarlos requiere tiempo.Astah community: herramienta sencilla, adecuada para aprender. Se puede descargar una versión gratuita en?. Astah (antes conocido como Jude) también tiene una versión profesional.Rational Rose: conjunto de herramientas IBM usado por muchas empresas.Lucidchart:?herramienta que permite crear muchos tipos de diagramas, entre ellos UML. Puede probarse visitando Visio:?herramienta de Microsoft que permite la creación de muchos tipos de diagramas, entre ellos diagramas UML.Otros: Erwin, Oracle Designer, EasyCASE, Power Designer, etc. son herramientas que incorporan muchas utilidades, entre ellas UML.Criticas a UML UML recibe numerosas críticas por parte de los miembros de la comunidad de desarrolladores software, entre ellas el ser demasiado extenso, carecer de significados precisos para los elementos representados, dificultad para representar algunos tipos de sistemas software o elementos, etc.A pesar de ello y de no ser “perfecto”, es un estándar de amplio uso hoy día y una herramienta fundamental en desarrollos software de gran envergadura.Arquitectura de STRUn STR es una combinación de computadoras, dispositivos de E/S (siglas en ingles de I/O Input/Output), Hardware y software de propósito específico en donde existe una fuerte interacción con el ambiente, el ambiente cambia con el tiempo y el sistema debe controlar y/o reaccionar a diferentes aspectos del ambiente; como resultado se imponen restricciones de tiempos al software, el software es naturalmente concurrente y se exige una alta confiabilidad.Para el manejo adecuado de tiempo real se tomarán las siguientes restricciones:Hardware: Reloj, Procesador de Interrupciones, Timers, Watchdog, Procesador de comunicaciones.Software: retrasos de procesos: absolutos y relativos, calendarios, Timeouts, Clock package en ADA, Especificación de tiempos: caracterización, chequeo de tiempos para tolerancia a fallos.Diagrama con las características a considerar.El dise?o de arquitecturas de tiempo real involucra 2 aspectos:Nivel de nodo: para cada procesador debe proveer velocidad y predictibilidad en la ejecución de tareas de tiempo real, manejo de interrupciones, e interacción con el mundo externo.Nivel de Sistema: En este nivel las comunicaciones y la tolerancia a fallos son 2 aspectos que hacen difícil la predictibilidad. De cualquier manera aspectos son inevitables.Ejemplo:Considere que tiene un automóvil con cuatro tareas a considerar sus actividades en un lapso de tiempo en micro segundo en una computara de automóvil, para esto se mostrará en la siguiente tabla donde se divide el tiempo de cómputo (donde el tiempo que tomara en que el procesador para completar la tarea), el periodo de ejecución (en qué momento de los ciclos se iniciará), y por final el tiempo que tardará el sistema en la respuesta donde se completará o quedar en tiempo de espera, para posteriormente el procesador tome su tiempo para terminar el resto del procesamiento, entonces donde tenemos lo siguiente:C, Tiempo de computo (Peor caso), T, Periodo de ejecución, D, Plazo de respuestas.12049438950Control de VelocidadControl de VelocidadC = 4ms.T = 20ms.D = 5ms.12049438950Control de FrenadoControl de FrenadoC = 10ms.T = 40ms.D = 40ms.12049438950Control de combustibleControl de combustibleC = 40ms.T = 80ms.D = 80ms.12049438950Otro software no-criticoOtro software no-criticoC = 10ms.T = 40ms.282511542672000A continuación se mostrara una tabla donde se acomoda la tarea en la programación en este caso es en ADA y ciclo como quedaría el acomodo de las tareas recursivas.task body speed isbeginloop speed_measurement; next:=next+0.2 sleep_until_next;end loopend speedTask body brake isbeginloop control_brakes; next:=next+0.2 sleep_until_next;end loopend speedtask body fuel isbeginloop fuel_injection; next:=next+0.2 sleep_until_next;end loopend speedtask body non_critical isbeginloop perform computation;end loopend speedDificultades en el dise?oConsiderando el tema anterior tendremos que considerar algunas dificultades a la hora de hacer un dise?o, tomaremos los puntos siguientes y se?alaremos algunas cualidades o desventajas:Dise?o de la aplicación en tiempo real: nos referimos a tiempo real en las acciones que puedan ser ejecutadas en micro segundo, pero más bien es realizar las tareas que programaremos o la serie de instrucciones que daremos al microprocesador considerando el tiempos máquina y/o tiempo de reloj.Control de la concurrencia de procesos: normalmente algunas instrucciones se llamaran o se ejecutarán tantas veces como sean necesarias que realicen las actividades que ocupe la tarea.Selección de la arquitectura de hardware que mejor responda a la aplicación: normalmente a la hora de desarrollar es necesario buscar el mejor microprocesador esto para que ver que pueda resolver ciertas instrucciones en menos tiempo o tener menor capacidad de memoria.Obtención de tiempos: Caracterización especificar los tiempos a los que las acciones deben llevarse a cabo.especificar en cuanto tiempo debe completarse cada acción.responder a situaciones en las cuales no todos los tiempos se cumplenresponder a situaciones en las que los requisitos de tiempos cambian dinámicamente.Consideraciones de Dise?o: ?A quién afecta la introducción de Tiempo Real?A los lenguajes, compiladores.Al sistema operativo.A la arquitectura de hardware.A la metodología de dise?o.A la arquitectura del sistema (HW/SW/Ambiente).Sistemas Operativos de tiempo real: Un programa que actúa como intermediario entre el usuario de la computadora y el hardware de la computadora.Objetivos del Sistema Operativo: Ejecutar programas del usuario y resolver los problemas del usuario de manera fácil y sencilla. Hace que la computadora sea fácil y conveniente de usar. Utiliza el hardware de la computadora de forma eficiente.Estructura del sistema operativo: Hardware - provee los componentes básicos de cómputo (CPU, memoria, dispositivos de E/S).Sistema Operativo - controla y coordina el uso del hardware entre los varios programas de aplicación para los diferentes usuarios.Programas de Aplicación - define las formas en que los recursos del sistema son utilizados para resolver los problemas de cómputo de los usuarios (compiladores, bases de datos, juegos de video, programas de negocios).Usuarios (gente, maquinas, otras computadoras).Modelos de tareas, estados de las tareas, servicios y transiciones:Manejador de recursos - administra y aloja los recursos.Programa de control - controla la ejecución de los programas de usuarios y las operaciones de los dispositivos de entrada/salida.Kernel - el programa que corre en todo momento (todo lo demás es programa de aplicación)..Procesos y threads. Cambio de contexto.Algoritmos de Planificación: Cíclica, RMS, EDF.Inversión de prioridad y protocolo de techo de prioridad.Tareas aperiódicas y Servidor esporádico.Sincronización de unicación entre procesos.Relojes y Timers.Memoria compartida, locking, reserva.E/S síncrona y asíncrona.Transacciones en tiempo real y manejo de archivos.Manejo de interrupciones y device drivers.Historia de los Sistemas Operativos1940. Primeras Computadoras1950. Sistemas en Batch1960. Multiprogramación y Timesharing.1970. Minicomputadoras y Microprocesadores.Finales de 70’s y 80’s. Computadoras personales, Redes, Sistemas Distribuidos y Sistemas Paralelos, Sistemas de Tiempo Real.1990. WWW, Sistemas de Computo Móvil, PC’s. Primeros sistemas - principios de los 1940sEstructuraGrandes maquinas ejecutándose desde una consola Computadora dedicada a un usuario/programador a la vez.Programador / usuario como operadorTarjetas perforadas o cintas programadasProgramación y depuración mediante switches y focos de luz.Primer SoftwareEnsambladores, cargadores, linkers , Librerías de subrutinas comunes Compiladores Drivers de dispositivosUso ineficiente de recursosBaja utilización del CPU Mucho tiempo en inicialización del sistema (setup time)Programación y depuración es lenta y tediosa.1950`s. Sistemas BatchCuenta con un operador distinto al usuario.Incluye un lector de tarjetas. El usuario/programador somete un conjunto de tarjetas perforadas que contienen un Job a ejecutarse.Reduce el tiempo de inicialización ejecutando en Batch Jobs similares. Jobs de varios usuarios son ejecutados en secuencia por un monitor residente. Primer sistema operativo rudimentario.Monitor residente control inicial en el monitor transfiere el control a el primer Job cuando el Job termina se transfiere el control al monitor1960’s. MultiprogramaciónSistemas multiprogramados - varios Jobs se conservan en memoria al mismo tiempo, y el CPU se comparte entre ellosRutinas de E/S provista por el sistema ejecutadas simultáneamente con procesamiento del CPU.Administración de memoria - el sistema debe reservar memoria para varios Jobs.Administración del CPU - el sistema debe elegir entre varios Jobs listos para ejecución.Administración de dispositivos.1960’s. Sistemas de Tiempo CompartidoEl CPU se comparte entre varios Jobs que se encuentran residentes en memoria y en disco (el CPU se asigna a un Job solo si este está en memoria).Un Job es enviado dentro y fuera de la memoria hacia el disco.Existe comunicación en-línea entre el usuario y el sistema; cuando el sistema operativo finaliza la ejecución de un comando, busca el siguiente “estatuto de control” no de una tarjeta perforada, sino del teclado del operador.Existe un sistema de archivos en-línea el cual está disponible para los datos y código de los usuarios1970-1980. Mini-computadoras y MicroprocesadoresComputadoras de menor tama?o.Desarrollo de sistemas operativos (UNIX, DOS, CP/M).Mejora en las interfaces de usuario.Introducción de Microprocesadores.Desarrollo de lenguajes de programación.1980. Sistemas de cómputo personalesComputadoras Personales- sistemas de cómputo dedicados a un solo usuario.Dispositivos de E/S- teclados, ratón, pantalla, impresoras..Conveniente al usuario y de respuesta rápida.Puede adaptarse a la tecnología para soportar otros sistemas operativos.1980’s. Sistemas DistribuidosSistemas Distribuidos - distribuyen el cómputo entre varios procesadores geográficamente dispersos.Sistemas débilmente acoplados - cada procesador tiene su propia memoria local y el procesador se comunica con los demás procesadores mediante líneas de comunicación, buses de alta velocidad y líneas telefónicas.Ventajas: Compartición de recursos Incremento en la velocidad de cómputo compartición de carga Confiabilidad Comunicación1980’s. RedesEstaciones de Trabajo: (Sun, Vax, Silicon Graphics).Redes de ?rea Local (Ethernet, Token Ring, FDDI, ATM), Redes de larga distancia (Arpanet).Redes organizadas como clientes-servidores.Servicios de S.O. Protocolos de comunicación, encripción de datos, seguridad, consistencia en datos distribuidos.1980-1990`s. Sistemas ParalelosSistemas paralelos - sistemas de múltiples procesadores con más de 1 procesador con comunicación entre ellos.Sistema fuertemente acoplado - los procesadores comparten memoria y reloj; la comunicación usualmente se realiza mediante memoria compartida.Ventajas: Incremento de throughput Económica Incremento en la confiabilidad1990`s-puto Paralelo (Teraflops).PC’s poderosas (1.5 Giga Hertz) , Computadoras Multimedia.Redes de Comunicación de distancia mundial, con envió de imágenes, grandes cantidades de datos, audio y video.World Wide Web.Notebooks utilizando tecnologías de comunicación inalámbrica: Computo Móputo Embebido y Robótica.1990-2000`s-Sistemas de Tiempo RealA menudo utilizados como dispositivo de control en aplicaciones dedicadas, como control de experimentos científicos, sistemas de procesamiento de imágenes médicas, sistemas de control industrial, etc... Exige complimiento de restricciones de tiempos.Sistemas de tiempo real críticos. Cumplimiento forzoso de plazos de respuesta.Predecibilidad y análisis de cumplimiento de plazos de respuesta Sistemas de tiempo real acríticos. Exigencia “suave” de plazos de respuesta.Atención lo mas rápido posible a eventos, en promedio.Practica 3Laboratorio de: ElectrónicaPráctica No.: 3.Tema: Dise?o de Puerta en la entrada del estacionamiento del CULagos.Las puertas automáticas modernas han demostrado que pueden sustituir a las antiguas puertas de tipo manual pero la ventaja es que para remplazar estas últimas no se necesita de obra manual; las puertas manuales en los estacionamientos dificultan el acceso a personas que llegan en los automóviles y más si no existe guardia que se dedique a abrirlas o vivas en un edificio y es por eso que precisan una apertura automática.Este problema queda resuelto mediante la instalación de una puerta automática que se adapta a las necesidades; actualmente los dise?os de estas puertas son de apertura central por algún mecanismos implementado; las puertas se abren y cierran mediante algún operador de alto rendimiento y funcionamiento silencioso, las ventajas más significativas radican en la fiabilidad, funcionamiento, seguridad y estética.Objetivos:El centro universitario existe dos puertas que funcionan de manera autónoma atreves de un control remoto, el objetivo se enfocará en identificar las partes y funcionamiento de la puerta, y utilizando el lenguaje UML, diagramas de flujo, diagrama electrónico (SDL), detalle el funcionamiento de la puerta con lo que considere que lleve para su funcionamiento.Marco teórico:El UML tiene un amplio uso donde puede ser utilizado para modelar negocios, software de todas las fases de desarrollo y para todos los tipos de sistemas y modelaje en general, de cualquier manera la construcción que tenga una estructura estática y un comportamiento dinámico. Con el objetivo de alcanzar estas amplias capacidades, el lenguaje es definido a ser extensivo y suficientemente genérico para perimir el modelaje de tales sistemas, evitando tanta especialidad y complejidad.Lista de materiales, herramientas y equipos:En una hoja cuadriculada para dibujo u opalina tama?o carta, juegos de geometría, lápiz o pluma. Una computadora en la cual se utilizara el software Nclass.Desarrollo de la práctica:Descargue e instale el software Nclass, el software es gratuito desde el sitio: , el cual le ayudara a elaborar diagramas de clases de UML, las que posteriormente podrá implementar en un lenguaje de programación.Desarrolle un mapa mental con las diferentes características de los paradigmas de programación estructurado y orientado a objetos.Utilice el software NClass para elaborar diagramas de clases con las siguientes características:Dise?ar un diagrama de clases para representar los siguientes tipos de objetos, especificar por los menos tres atributos y tres acciones en cada caso:Control de emisión y recepción de la puertaControl de tiempo de apertura y cierre.Tolerancia a fallos y se?alamientos.Dise?ar un diagrama de clases para las siguientes situaciones. Represente con detalle todas las clases relacionadas en los problemas: “en un taller mecánico los clientes llevan sus autos a reparar. El talle elabora una orden de trabajo con los datos de los clientes como su nombre, dirección y teléfono de contacto, e incluye también los datos del auto que será reparado: marca, modelo, color, número de las placas. Las orden de trabajo tiene un identificador numérico único”.Calcular el área.Calcular el perímetro.Propiedad para modificar el radio.Propiedad para consultar el valor del radio.Defina una clase denominada rectángulo que tenga las siguiente especificaciones:Atributos: Largo y Ancho.Métodos: CalcularArea()Análisis de resultados: Luego de realizar las mediciones y dibujos correspondientes estos deben ser estudiados escribiendo una tabla de especificaciones entre modelos diferente. El estudiante debe centrarse en interpretar los datos y reconocer las partes.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Programación en C para ArduinoSe describen las características básicas de la placa Arduino y se muestran las principales consideraciones para realizar su programación.Características generales de la placa.Se trata de una placa open hardware por lo que su dise?o es de libre distribución y utilización, que incluso podemos construirnos nosotros mismos (En la Figura 1 se observa el aspecto de la placa). En la siguiente web puede encontrarse mucha información relativa a la placa: 1. Aspecto de la placa Arduino Duemilanove.El programa se implementará haciendo uso del entorno de programación propio de arduino y se transferirá empleando un cable USB. Si bien en el caso de la placa USB no es preciso utilizar una fuente de alimentación externa, ya que el propio cable USB la proporciona, para la realización de algunos de los experimentos prácticos sí que será necesario disponer de una fuente de alimentación externa ya que la alimentación proporcionada por el USB puede no ser suficiente. El voltaje de la fuente puede estar entre 6 y 25 Voltios.Entorno de desarrollo.Para programar la placa es necesario descargarse de la página web de Arduino el entorno de desarrollo (IDE). Se dispone de versiones para Windows y para MAC, así como las fuentes para compilarlas en LINUX. En la Figura 2 se muestra el aspecto del entorno de programación. En el caso de disponer de una placa USB es necesario instalar los drivers FTDI. Estos drivers vienen incluidos en el paquete de Arduino mencionado anteriormente. Existen en las web versiones para distintos sistemas operativos.Figura 2. Entorno de desarrollo.Lo primero que tenemos que hacer para comenzar a trabajar con el entorno de desarrollo de arduino es configurar las comunicaciones entre la placa Arduino y el PC. Para ello deberemos abrir en el menú "Tools"?la opción "Serial Port". En esta opción deberemos seleccionar el puerto serie al que está conectada nuestra placa. En Windows, si desconocemos el puerto al que está conectado nuestra placa podemos descubrirlo a través del Administrador de dispositivos (Puertos COM & LPT/ USB Serial Port).El primer paso para comprobar que todo lo que hemos hecho hasta ahora está bien y familiarizarnos con el interfaz de desarrollo, es abrir uno de los ejemplos. Se recomienda abrir el ejemplo "Blink". Para ello debemos acceder a través del menú File ( Sketchbook ( Examples ( Digital ( Blink.El ejemplo "Blink" lo único que hace es parpadear un LED que está colocado en el pin número 13 de la placa. Vamos a ver qué hay que hacer para subir el programa a la placa Arduino. Primero comprobamos que el código fuente es el correcto. Para ello pulsamos el botón de verificación de código que tiene forma de triángulo inclinado 90 grados (Figura 3.a). Si todo va bien deberá aparecer un mensaje en la parte inferior de la interfaz indicando "Done compiling". Una vez que el código ha sido verificado procederemos a cargarlo en la placa. Para ello tenemos que pulsar el botón de reset de la placa (Figura 3.b) e inmediatamente después pulsar el botón que comienza la carga (Figura 3.c).Durante la carga del programa, en la placa USB, se encenderán los LED que indican que se están enviando y recibiendo información por el puerto serie: TX/RX. Si todo se ha realizado correctamente debe aparecer el mensaje "Done uploading". Ahora tan sólo queda esperar unos 8 segundos aproximadamente para comprobar que todo ha salido bien. Si el led colocado en el pin 13 de la placa se enciende y se apaga cada segundo entonces todo ha ido bien. Por fin tenemos todo listo para empezar a trabajar con la placa Arduino.Figura 3. a) Compilar programa. b) Botón de reset. c) Transferir programa a la placa.Estructura básica de un programa.La estructura básica de programación de Arduino es bastante simple y divide la ejecución en dos partes: setup y loop. Setup() constituye la preparación del programa y loop() es la ejecución. En la función Setup() se incluye la declaración de variables y se trata de la primera función que se ejecuta en el programa. Esta función se ejecuta una única vez y es empleada para configurar el pinMode (p. ej. si un determinado pin digital es de entrada o salida) e inicializar la comunicación serie. La función loop() incluye el código a ser ejecutado continuamente (leyendo las entradas de la placa, salidas, etc.). void setup() {inMode(pin, OUTPUT); // Establece 'pin' como salida}void loop() {digitalWrite(pin, HIGH);// Activa 'pin'delay(1000); // Pausa un segundodigitalWrite(pin, LOW); // Desactiva 'pin'delay(1000);} Como se observa en este bloque de código cada instrucción acaba con ; y los comentarios se indican con //. Al igual que en C se pueden introducir bloques de comentarios con /* ... */.FuncionesUna función es un bloque de código identificado por un nombre y que es ejecutado cuando la función es llamada. La declaración de una función incluye en primer lugar el tipo de datos que devuelve la función (e.j. int si lo que devuelve es un valor entero). Después del tipo de datos se especifica el nombre de la función int .delayVal() { int v; // crea una variable temporal 'v' v = analogRead(pot); // lee el valor del potenciómetro v /= 4; // convierte los valores 0-1023 a 0-255 return v; // devuelve el valor final de la variable } VariablesUna variable debe ser declarada y opcionalmente asignada a un determinado valor. En la declaración de la variable se indica el tipo de datos que almacenará (int, float, long).int inputVariable = 0; Una variable puede ser declarada en el inicio del programa antes de setup(), localmente a una determinada función e incluso dentro de un bloque como pueda ser un bucle. El sitio en el que la variable es declarada determina el ámbito de la misma. Una variable global es aquella que puede ser empleada en cualquier función del programa. Estas variables deben ser declaradas al inicio del programa (antes de la función setup()).int v; // 'v' es visible en todo el programavoid setup() { // No se requiere setup } void loop() { for (int i=0; i<20;)// 'i' es visible solo en el bucle i++; float f;// 'f' es visible únicamente en la función loop()} Tipos de DatosArduino permite manejar los siguientes tipos de datos:Byte. Almacena un valor numérico de 8 bits. Tienen un rango de 0-255.Int. Almacena un valor entero de 16 bits con un rango de 32,767 a -32,768.Long. Valor entero almacenado en 32 bits con un rango de 2,147,483,647 a -2,147,483,648.Float. Tipo coma flotante almacenado en 32 bits con un rango de 3.4028235E+38 a -3.4028235E+38.Arrays. Se trata de una colección de valores que pueden ser accedidos con un número de índice (el primer valor del índice es 0). Ejemplos de utilización:Definición y asignación. int myArray[] = {value0, value1, value2...}Definición. int myArray[5]; // declara un array de 6 enterosAsignación del cuarto componente. myArray[3] = 10;Recuperar el cuarto componente y asignarlo a x. x = myArray[3];Operadores aritméticosEmpleando variables, valores constantes o componentes de un array pueden realizarse operaciones aritméticas y se puede utilizar el operador cast para conversión de tipos. Ej. int a = (int)3.5; Además pueden hacerse las siguientes asignaciones:x ++. Lo mismo que x = x + 1.x --. Lo mismo que x = x - 1, or decrements x by -1.x += y. Lo mismo que x = x + y, or increments x by +y.x -= y. Lo mismo que x = x - y .x *= y. Lo mismo que x = x * y. x /= y. Lo mismo que x = x / y. Para su utilización en sentencias condicionales u otras funciones Arduino permite utilizar los siguientes operadores de comparación:x == y. x es igual a y.x != y. x no es igual a y.x < y, x > y, x <= y, x >= y. Y los siguientes operadores lógicos:Y lógico: if (x > 0 &#38;&#38; x < 5). Cierto si las dos expresiones lo son.O lógico: if (x > 0 || y > 0). Cierto si alguna expresión lo es.NO lógico: if (!x > 0). Cierto si la expresión es falsa. El lenguaje de Arduino presenta las siguientes constantes predefinidas:TRUE / FALSE.HIGH/LOW. Estas constantes definen los niveles de los pines como HIGH o LOW y son empleados cuando se leen o escriben en las entradas o salidas digitales. HIGH se define como el nivel lógico 1 (ON) o 5 V. LOW es el nivel lógico 0, OFF, o 0 V.INPUT/OUTPUT. Constantes empleadas con la función pinMode() para definir el tipo de un pin digital usado como entrada INPUT o salida OUTPUT. Ej. pinMode(13, OUTPUT); Sentencias condicionalesif:??es un estamento que se utiliza para probar si una determinada condición se ha alcanzado, como por ejemplo averiguar si un valor analógico está por encima de un cierto número, y ejecutar una serie de declaraciones (operaciones) que se escriben dentro de llaves, si es verdad. Si es falso (la condición no se cumple) el programa salta y no ejecuta las operaciones que están dentro de las llaves.Referencia Arduino:?… else: ?viene a ser un estructura que se ejecuta en respuesta a la idea “si esto no se cumple haz esto otro”. Por ejemplo, si se desea probar una entrada digital, y hacer una cosa si la entrada fue alto o hacer otra cosa si la entrada es baja.else:?puede ir precedido de otra condición de manera que se pueden establecer varias estructuras condicionales de tipo unas dentro de las otras (anidamiento) de forma que sean mutuamente excluyentes pudiéndose ejecutar a la vez. Es incluso posible tener un número ilimitado de estos condicionales. Recuerde sin embargo que sólo un conjunto de declaraciones se llevará a cabo dependiendo de la condición probada.Referencia Arduino:? declaración for se usa para repetir un bloque de sentencias encerradas entre llaves un número determinado de veces. Cada vez que se ejecutan las instrucciones del bucle se vuelve a testear la condición. La declaración for tiene tres partes separadas por (;). La inicialización de la variable local se produce una sola vez y la condición se testea cada vez que se termina la ejecución de las instrucciones dentro del bucle. Si la condición sigue cumpliéndose, las instrucciones del bucle se vuelven a ejecutar. Cuando la condición no se cumple, el bucle termina.Cualquiera de los tres elementos de cabecera puede omitirse, aunque el punto y coma es obligatorio. También las declaraciones de inicialización, condición y expresión puede ser cualquier estamento válido en lenguaje C sin relación con las variables declaradas.Referencia Arduino:? bucle del tipo while es un bucle de ejecución continua mientras se cumpla la expresión colocada entre paréntesis en la cabecera del bucle. La variable de prueba tendrá que cambiar para salir del bucle. La situación podrá cambiar a expensas de una expresión dentro el código del bucle o también por el cambio de un valor en una entrada de un sensor.Referencia Arduino:? bucle do while funciona de la misma manera que el bucle while, con la salvedad de que la condición se prueba al final del bucle, por lo que el bucle siempre se ejecutará al menos una vez.Referencia Arduino:? igual que if, switch..case controla el flujo del programa especificando en el programa que código se debe ejecutar en función de unas variables. En este caso en la instrucción switch se compara el valor de una variable sobre los valores especificados en la instrucción case.break?es la palabra usada para salir del switch. Si no hay break en cada case, se ejecutará la siguiente instrucción case hasta que encuentre un break o alcance el final de la instrucción.default?es la palabra que se usa para ejecutar el bloque en caso que ninguna de las condiciones se cumpla.Referencia Arduino:?: transfiere el flujo de programa a un punto del programa que está etiquetado.Referencia Arduino:? usa en las instrucciones do, for, while para salir del bucle de una forma diferente a la indicada en el bucle.Referencia Arduino:? usa en las instrucciones do, for, while para saltar el resto de las instrucciones que están entre llaves y se vaya a la siguiente ejecución del bucle comprobando la expresión condicional.Entradas y Salidas Digitales y AnalógicasFunción pinMode(pin, mode): Función usada en la function setup() para configurar un pin dado para comportarse como INPUT o OUTPUT. Ej. pinMode(pin, OUTPUT); configura el pin número 'pin' como de salida. Los pines de Arduino funcionan por defecto como entradas, de forma que no necesitan declararse explícitamente como entradas empleando pinMode().Función digitalRead(pin): Lee el valor desde un pin digital específico. Devuelve un valor HIGH o LOW. El pin puede ser especificado con una variable o una constante (0-13). Ej. v = digitalRead(Pin);Funcion digitalWrite(pin, value): Introduce un nivel alto (HIGH) o bajo (LOW) en el pin digital especificado. De nuevo, el pin puede ser especificado con una variable o una constante 0-13. Ej. digitalWrite(pin, HIGH);Función analogRead(pin):Lee el valor desde el pin analógico especificado con una resolución de 10 bits. Esta función solo funciona en los pines analógicos (0-5). El valor resultante es un entero de 0 a 1023. Los pines analógicos, a diferencia de los digitales no necesitan declararse previamente como INPUT o OUTPUT.Función analogWrite(pin, value): Escribe un valor pseudo-analógico usando modulación por ancho de pulso (PWM) en un pin de salida marcado como PWM. Esta función está activa para los pines 3, 5, 6, 9, 10, 11. Ej analogWrite(pin, v); // escribe 'v' en el 'pin' analógico. Puede especificarse un valor de 0 - 255. Un valor 0 genera 0 V en el pin especificado y 255 genera 5 V. Para valores de 0 a 255, el pin alterna rápidamente entre 0 V y 5 V, cuanto mayor sea el valor, más a menudo el pin se encuentra en HIGH (5 V). Por ejemplo, un valor de 64 será 0 V tres cuartas partes del tiempo y 5 V una cuarta parte. Un valor de 128 será 0 V la mitad del tiempo y 5 V la otra mitad. Un valor de 192 será 0 V una cuarta parte del tiempo y 5 V tres cuartas partes.Funciones de tiempo y matemáticasdelay(ms). Realiza una pausa en el programa la cantidad de tiempo en milisegundos especificada en el parámetro (máximo 1000, mínimo 1).millis(). Devuelve la cantidad de milisegundos que lleva la placa Arduino ejecutando el programa actual como un valor long unsigned. Después de de 9 horas el contador vuelve a 0.min(x,y). max(x,y). Devuelve el mínimo y el máximo respectivamente de entre sus parámetros.Funciones de generación aleatoriarandomSeed(seed). Especifica un valor o semilla como el punto de inicio para la función random(). Este parámetro debe ser realmente aleatorio y para ello puede emplearse la función millis() o incluso analogRead() para leer ruido eléctrico desde una entrada analógica.random(max), random(min, max). Esta función devuelve un valor aleatorio entre el rango especificado.Puerto SerieSerial.begin(rate). Abre un Puerto serie y especifica la velocidad de transmisión. La velocidad típica para comunicación con el ordenador es de 9600 aunque se pueden soportar otras velocidades.Serial.println(data). Imprime datos al puerto serie seguido por un retorno de línea automático. Este comando tiene la misma forma que Serial.print() pero este último sin el salto de línea al final. Este comando puede emplearse para realizar la depuración de programas. Para ello puede mandarse mensajes de depuración y valores de variables por el puerto serie. Posteriormente, desde el entorno de programación de Arduino, activando el "Serial Monitor" se puede observar el contenido del puerto serie, y, por lo tanto, los mensajes de depuración. Para observar correctamente el contenido del puerto serie se debe tener en cuenta que el "Serial Monitor" y el puerto serie han de estar configurados a la misma velocidad (Para configurar la velocidad del puerto serie se hará con el comando Serial.begin(rate)).Serial.read(). Lee o captura un byte (un caracter) desde el puerto serie. Devuelve -1 si no hay ningún carácter en el puerto serie.Serial.available(). Devuelve el número de caracteres disponibles para leer desde el puerto serie.Ejemplos de CódigoSalida digitalEn este ejemplo el LED conectado al pin 13 parpadea cada segundo. int ledPin = 13; // LED que se encuentra en el pin 13 void setup(){ pinMode(ledPin, OUTPUT);// El p1n 13 será una salida digital } void loop(){ digitalWrite(ledPin, HIGH);// Enciende el LED delay(1000); // Pausa de 1 segundo digitalWrite(ledPin, LOW); // Apaga el LED delay(1000);// Pausa de 1 segundo } Salida digital IIEn este ejemplo el LED conectado al pin 13 parpadea en un intervalo de tiempo variable que depende del número de veces que se ejecuta el programa (función?loop) int ledPin = 13;// LED que se encuentra en el pin 13int n = 0; //Entero que contará el paso por la función loopvoid setup(){ pinMode(ledPin, OUTPUT);// El p1n 13 será una salida digital } void loop(){ digitalWrite(ledPin, HIGH);// Enciende el LED delay(1000); // Pausa de 1 segundo digitalWrite(ledPin, LOW);// Apaga el LED n++;//Incrementamos n delay(delayVal(n));//Pausa de un tiempo variable} //Función que devuelve un valor tipo entero según el parámetro pasado int delayVal(int f){ return f*100;} Entrada digitalEste ejemplo lee el valor de un interruptor conectado en el pin 2. Cuando el interruptor está cerrado en el pin de entrada habrá un estado alto (HIGH) y se encenderá el LED. int ledPin = 13; // Pin de salida para el LED int inPin = 2; // Pin de entrada (donde está conectado el interruptor) void setup() { pinMode(ledPin, OUTPUT); pinMode(inPin, INPUT); } void loop() { if (digitalRead(inPin) == HIGH){// Si se activa interruptor digitalWrite(ledPin, HIGH);// Enciende el LED delay(1000); // Pause de 1 segundo digitalWrite(ledPin, LOW); // Apaga el LED delay(1000); // Pausa de 1 segundo } } Salida PWMModulación por ancho de pulso (PWM) puede emplearse, por ejemplo, para establecer el brillo de un led o controlar un servomotor. En el siguiente ejemplo se va aumentando y decrementando el brillo del pin 9 mediante PWM. int ledPin = 9; // Pin controlado por PWM void setup(){} void loop() { for (int i=0; i<=255; i++){ analogWrite(ledPin, i); // Establece el brillo a i delay(100); // Pausa de 100 ms } for (int i=255; i>=0; i--) { analogWrite(ledPin, i); delay(100); } } Entrada a partir de un potenciómetroEn el siguiente código se emplea arduino para controlar la frecuencia de parpadeo de un LED. int potPin = 0; // Pin de entrada para el potenciómetro int ledPin = 13; // Pin de salida para el LEDvoid setup() { pinMode(ledPin, OUTPUT); // Declara el pin del LED como de salida} void loop() { digitalWrite(ledPin, HIGH);// Enciende el LED delay(analogRead(potPin));// Lee el valor del potenciómetro digitalWrite(ledPin, LOW);// Apaga el LED delay(analogRead(potPin)); } Practica 4Laboratorio de: Electrónica o cómputo.Práctica No.: 4.Tema: Armado básico de Arduino.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:Utilizando Arduino y uno de sus ejemplos que se encuentran en su programa como su lenguaje de programación hacer que un led o diodo emisor de luz se encienda y apague en un periodo de 100 mili segundos utilizando una práctica ya determinada que trae nuestro programa Arduino:Marco teórico:Arduino es un sistema digital programable con un?micro-controlador?con el propósito de facilitar la parte electrónica en el?desarrollo de diferentes proyectos. Está compuesto por una placa AVR de la familia de?micro-controladores?RISC de la compa?ía de semiconductores ATMEL, así mismo la elección de los procesadores usados en?la placa está guiada por la sencillez y precio bajo, permitiendo desarrollar diferente tipos de sistemas. El IDE con el que Arduino trabaja es fácil de aprender y utilizar, así como el lenguaje de programación es sencillo, ya que el público clave de este sistema es aquellos con conocimientos básico en el ámbito electrónico para el desarrollo de objetos o entornos interactivos. La forma en el que el sistema trabaja es mediante la recepción de datos a través de sus pines, los cuales pueden ser conectados una gran cantidad de sensores, y puede devolver el manejo de luces, motores u otros actuadores. Los entornos desarrollados en el sistema pueden ejecutarse sin la necesidad de estar conectado a una computadora, obteniendo la corriente de voltaje por tanto corriente alterna como directa.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica s utilizaran:Arduino unoProtoboardLedscablesDesarrollo de la práctica:Para realizar dicha programación y funcionamiento de nuestro programa nos basaremos en el programa utilizando para Arduino. Utilizando uno de sus ejemplos ya antes mostrado, en la pesta?a ARCHIVO, posteriormente en la sub ventana Ejemplo: 01 básicos y abriremos la que dice BLINK, abrirá la practica que utilizaremos y posteriormente para realizar el funcionamiento predeterminado cambiaremos a 100 el valor de 1000 de los delay que se encuentran hasta el final de nuestro programa, verificaremos nuestro programa para ver que no tenga ningún error y si este funciona perfectamente lo cargaremos a nuestro Arduino.Posteriormente llevaremos a cabo el montado y conectado de nuestra Protoboard con Arduino y cada uno de su componente ara que esta pueda funcionar adecuadamente, dándonos como resultado la siguiente imagen:/* Ejemplo de encendido y apagado de un LED */// Se define el pin 13 donde se conectara el LEDint led =13;// Se inicializa el pin digital como una salidaVoid setup (){ pinMode(led, OUTPUT);}/*Se crea una función ciclo donde se enciende y apaga el LED cada segundo*/Void loop(){ digitalWrite (led, HIGH; //se enciende el led delay (100); //se espera un segundo digitalWrite(led, LOW); //se apaga el leddelay (100); //se espera un segundo}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. ProcesosUn proceso puede informalmente entenderse como un programa en ejecución. Formalmente un proceso es "Una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistema asociados". Cada proceso tiene su contador de programa, registros y variables, aislados de otros procesos, incluso siendo el mismo programa en ejecución 2 veces. Cuando este último caso sucede, el sistema operativo usa la misma región de memoria de código, debido a que dicho código no cambiará, a menos que se ejecute una versión distinta del programa.Los procesos son gestionados por el sistema operativo y están formados por:Las instrucciones de un programa destinadas a ser ejecutadas por el microprocesador.Su estado de ejecución en un momento dado, esto es, los valores de los registros de la unidad central de procesamiento para dicho programa.Su memoria de trabajo (memoria crítica), es decir, la memoria que ha reservado y sus contenidos.Otra información que permite al sistema operativo su planificación.Un proceso se rige en peque?as porciones, conocidas como páginas, y cada proceso tiene su propia tabla de paginación, fungiendo como una optimización del sistema operativo ante los fallos de página.Esta definición varía ligeramente en el caso de sistemas operativos multihilo, donde un proceso consta de uno o más hilos, la memoria de trabajo (compartida por todos los hilos) y la información de planificación. Cada hilo consta de instrucciones y estado de ejecución.Los procesos son creados y eliminados por el sistema operativo, así como también éste se debe hacer cargo de la comunicación entre procesos, pero lo hace a petición de otros procesos (interrupción o tiempo de reloj). El mecanismo por el cual un proceso crea otro proceso se denomina bifurcación (fork). El proceso de arranque de GNU/Linux inicia con un sólo proceso (init) y después comienza a crear los hilos necesarios para tener el sistema listo para su uso. Los nuevos procesos pueden ser independientes y no compartir el espacio de memoria con el proceso que los ha creado o ser creados en el mismo espacio de memoria.ConceptosUn sistema operativo ejecuta una variedad de programas:Sistemas Batch: Jobs.Sistemas de tiempo compartido: programas de usuarios o tareas.Proceso: Un programa en ejecución, la ejecución del proceso debe progresar de manera secuencial.Un proceso incluye:Program Counter (Contador de programas).Stack (es una palabra inglesa, que significa pila de cosas o apilamiento).Data section (Sección de Datos, normalmente memorias).A la hora de programar procesos se tiene que identificar los estados de todos los proceso de manera que conforme el procesador vaya realizando algunos o todos los proceso en algún momento no terminara de completar toda la serie de instrucciones, por esa razón utilizares el estado de los procesos:Nuevo: EL proceso es creado.Ejecución: se ejecutan las instrucciones.Espera: El proceso está en espera por ocurrencia de algún evento.Listo: el proceso está esperando a que le asignen el procesador.Terminado: El proceso finaliza su ejecución.Diagrama de estados de los procesoEn un Bloque de control de procesos tenemos esta información asociada con cada proceso:Estado de proceso.Contador de programa.Registro del CPUInformación de planificación del CPUMemoriaInformación para administraciórmación de estatus de E/S.A la hora de crear estas planificaciones de procesos es necesario de echar mano de algunos recursos de programación de corte canónico, en este caso tenemos las pilas y colas, en un punto anterior se nombró las pilas, y aquí en este punto mencionaremos a las colas:Cola de Jobs (Cola de Trabajo): conjunto de todos los procesos en el sistema.Colas de listos: conjunto de procesos residentes en memoria, listos y en espera para ejecución.Colas de dispositivos: conjunto de procesos esperando por algunos dispositivos de E/S.Migración de los procesos entre varias colasCuando estas colas son desarrolladas tendremos que implementar los planificadores, para esto tendremos los de largo plazo (Job Scheduler), estos secciona que proceso trae a la cola de procesos listo, esto quiere decir que un procesos estará en espera hasta que le toque su turno de ser despachado, cuando sea así entrara a la de listo donde estará en ejecución hasta terminar su tarea programada, el otro es el planificador de corto plazo (CPU scheduler), selecciona que procesos debe ejecutarse enseguida y reserva el CPU, este a comparación del anterior depende de la prioridad que tenga la tarea a realizarse más aun la cantidad de instrucciones que pueda contener en la cola, si se determinan esas condiciones el procesador tiene la facultad de reservar espacio en memoria para la tarea o resultados que puedan obtener en las mejores de las circunstancias.Cuando el CPU cambia a otro proceso, el sistema debe salvar el estado del proceso antiguo y cargar el estado del proceso nuevo a esto le llamaremos el cambio de contexto, ahora el cambio de contexto se considerara “overhead”; si el sistema no realiza algún computo útil durante el cambio, el tiempo de realización del cambio de contexto es dependiente del soporte de hardware.En cualquier momento de todo esto puede venirse lo que se le conoce como la creación de proceso, donde se le asignara memoria (para cárgalo de código, datos y stack), recursos, información del PCB, y cargar en memoria), además se inicializan registros para protección del estadio de memoria reservada a este proceso. El proceso padre puede crear procesos hijos, los cuales a su vez pueden crea otros procesos, formando así un árbol de procesos. Compartición de procesos padre e hijos:Los padre e hijos comparten tofos los recursosEl hijo comparte un subconjunto de los recursos del padre.El hijo y el padre no comparten recursosEn la ejecución:EL padre y el hijo se ejecutan concurrentemente.El padre espera hasta que el hijo termina.Ejemplo UNIX:La llamada a fork crea un proceso nuevo.A la hora de terminar un proceso, se considera el proceso en ejecución tiene dentro de su cola la última instrucción y pide al sistema que lo elimine (exit):Los datos de salida van de hijo a padre (por fork).Los recursos del proceso son desalojados por el sistema operativo.El padre puede terminar la ejecución de un hijo (abort) donde se considera:El proceso hijo se ha excedido en los recursos alojados.La tarea asignada al proceso hijo ya no es requerida.El proceso padre termina: donde el sistema operativo no permite que el hijo continúe si ejecución si el proceso padre termina o termina la cascada.Los procesos cooperativos se pueden definir como procesos independiente o cooperativos, los independientes no pueden afectar o ser afectados por la ejecución de otros procesos. Los cooperativos pueden afectar o ser afectados por la ejecución de otros procesos. Las ventajas:Compartición de información.Mayor velocidad de cómputo.Modularidad.Conveniencia.Existen al final de cuentas como todo dentro de este mundo, el problema del producto-consumidor donde existen varios paradigmas para procesos cooperativos, el proceso productor produce información que es consumida por el proceso consumidor, la solución puede ser mediante memoria compartida o mediante buzones de envió de mensaje. Se puede considerar la comunicación entre proceso donde provee mecanismos para permitir que el proceso se comuniquen y se sincronicen y tenemos:Sistema de mensajes: los procesos se comunican entre si sin tener que compartir variable.Operaciones: send (mensaje), los mensajes pueden tener tama?o fijo o variable.Medio de comunicación: implementación física (p. ej. Memoria compartida, bus de hardware) e implementación lógica.Los tipos de comunicación más utilizados son los buzones como medio común para comunicación entre procesos de forma: 1 proceso envía mensaje a 1 proceso, 1 proceso envía mensaje a N procesos, N procesos envían mensajes a 1 proceso, y por último N procesos envían mensaje a N proceso. Todo mediante una línea de comunicación o bus de hardware. Para esto veremos mas adelante las sincronizaciones y proceso.Sincronización de procesosEn la robótica?se utiliza una se?al de reloj para sincronizar eventos como puede ser la transferencia de datos. En términos,?se habla de sincronización cuando varios procesos se ejecutan a la vez con el propósito de completar una tarea y evitar así reportes y rega?adas, que pudieran desembocar en un estado inesperado. También se habla de sincronización de datos cuando dos dispositivos se actualizan de forma que contengan los mismos datos. Un ejemplo de sincronización de archivos puede ser entre una PDA y la agenda electrónica del ordenador. En multimedia se habla de sincronización cuando el audio y el video están ajustados, de forma que no haya ningún desfase.Concepto BásicoEl acceso concurrente a datos compartidos puede llevar a inconsistencias en los datos, el mantenimiento de las consistencia en los datos requieren mecanismos para asegurar la ejecución ordenada de procesos cooperativos, los mecanismos de consistencia deben permitir la aplicación correcta de los algoritmos de planificación sin perjudicar a la Predecibilidad.Ejemplo:Datos compartidos.type item = ... ;var buffer : array [0..n-1] of item;in, out: 0..n-1;counter:0..n;in:=0; out := 0; counter := 0;Proceso productor. Proceso Consumidor.repeat repeatproduce un dato en nextp while counter = 0 do no-op;while counter = n do no-op; nextc:=buffer[out];buffer[in] := nextp; out:=out+1 mod n;in := in+1 mod n counter:=counter-1;counter := counter + 1; consume the item in nextcuntil false; until false;Las operaciones: counter := counter + 1 y counter := counter - 1, deben ser atómicas.Problema de la región critican procesos compiten para utilizar algún dato compartido. Cada proceso tiene un segmento de código, llamado región crítica, en el cual son accesados los datos compartidosProblema - asegurar que cuando un proceso esta ejecutando en su región crítica, ningún otro proceso puede entrar en su región crítica.Estructura del proceso Pirepeatsección de entradasección críticasección de salidauntil false; La solución al problema de la región crítica debe satisfacer tres requisitos:Exclusión mutua. Si el proceso Pi está ejecutando en su región crítica, ningún otro proceso puede estar ejecutándose en su región crítica.Progreso. Si en un momento dado no existe ningún proceso y se le concede la región a un proceso, la decisión de concederle la región a otro proceso que la solicite no puede posponerse indefinidamenteEspera acotada. Debe existir una cota en el número de veces que otros procesos se les permite entrar en su región crítica, después de que un proceso ha hecho una petición para entrar y antes de que le sea concedida.Primer AlgoritmoVariables compartidas: var turn: (0,1); inicialmente turn = 0; si turn = i entonces Pi puede entrar en su región crítica.Proceso Pirepeat while turn ? i do no-op; región crítica turn:=j; últimas instruccionesuntil false;*** satisface exclusión mutua pero no progreso.Segundo AlgoritmoVariables compartidas: var turn: (0,1); flag: array[0..1] of boolean; inicialmente turn = 0, y flag[0], flag[1] = false; si turn = 1 entonces Pi puede entrar en su región crítica.Proceso Pirepeat flag[i]:=true; turn:=j; while (flag[j] and turn = j) do no-op; región crítica flag[i]:=flase; últimas instruccionesuntil false;*** satisface los tres requisitos.Hardware de sincronizaciónPrueba y modifica el contenido de un “word” automáticamentefunction test-and-set (var target:boolean):boolean;begin test-and-set:=target; target:=true;end;Algoritmo de exclusión mutua:Variables compartidas: var lock:boolean; lock:=false;Proceso Pirepeat while test-and-set(lock) do no-op;; región crítica lock:=false; últimas instruccionesuntil false;Semáforo: Herramienta de sincronizaciónSemáforo Svariable entera S.solo puede ser ingresar mediante dos operaciones atómicas:wait(S): S:= S-1; if S < 0 then block(S);signal(S): S:= S+1; if S ? 0 then wakeup(S);block(S) - provoca la suspensión del proceso que la invoca.wakeup(S) - provoca que un proceso bloqueado siga con su ejecución.Ejemplo de sección critica con semaformoVariables compartidas: var mutex: semaforo; mutex:= 1;Proceso Pirepeat wait(mutex); sección crítica signal(mutex); sección siguienteuntil false;Ejemplo de Semáforo para SincronizaciónEl semaforo flag se inicializa a 0P0 P1............ ..........A wait(flag)signal(flag) B Ejecuta B en P1 solo después de que A se ejecuta en P0Tipos de SemáforosSemáforo contador- valor entero que puede variar en un dominio sin restricción.Semáforo Binario. valor entero que varia de 0 a 1. Implementación de ambos semáforos.Función como herramienta para implementar la sección crítica, y para sincronizar procesos.Problemas clásicos de la sincronizaciónProblema del buffer acotado.Problema de los escritores lectores.Problema de los filósofos comiendo.Monitores.Frecuencia de reloj2991499622403La frecuencia de reloj es la velocidad alternada continuamente entre 0 y 1, donde el tiempo lleva el reloj el cambio a la cual se llama el periodo del reloj o duración de ciclos de reloj, en los ciclos de reloj el tiempo se mide por ciclos/segundo (Las frecuencia de reloj es lo contrario del periodo de reloj. Medidas para la frecuencia es en hertzios) con que una computadora realiza las operaciones más básicas. Los relojes se utilizan a menudo para sincronizar los circuitos.Generan una repetición, un patrón fiable de 0s y un 1s que pueda accionar ciertos acontecimientos en un circuito, tal como escribir a un latchSi varios circuitos comparten una se?al común del reloj, pueden coordinar sus acciones con respecto a una otras.Esto es similar a como los seres humanos utilizan los relojes verdaderos para la sincronización, a diferencia de los chips en la placa madre pueden tener diferentes frecuencias de reloj. En general, en computación, cuando se habla de "la frecuencia de reloj", se está haciendo referencia a la velocidad del CPU (el microprocesador).La velocidad del procesador se mide por su frecuencia de oscilación (número de ciclos de reloj por segundo), se mide en Mhz (Mega Hertz) millones de ciclos de reloj.τciclo de reloj=1f; τciclo de maquina=4*1fLa velocidad de reloj sólo es útil para comparar entre microprocesadores?de una misma familia de un mismo fabricante. Es decir que un determinado procesador de una determinada familia no puede ser comparado con otro procesador de otra familia, incluso aunque sean de un mismo fabricante. Por ejemplo, puede ser que un procesador de 50 MHz emplee más eficientemente los ciclos por segundo que otro procesador con la misma frecuencia de reloj, esto haría que ciertas tareas en el primer procesador se ejecuten más rápidamente que en el segundo procesador. De todas maneras, existen otros múltiples factores que determinan la velocidad?final de la computadora.?Interacción entre tareasEl sistema operativo indica a la computadora la manera de utilizar otros programas de software y administra todo el hardware, tanto el interno como el externo, que está instalado en la computadora.?Los sistemas operativos pueden ser basados en caracteres o gráficos. Un sistema operativo basado en caracteres, tal como MS-DOS, le permite escribir comandos en un indicador para controlar la computadora. Un interfaz gráfico del usuario, o GUI, le permite enviar comandos a la computadora al hacer clic en iconos o al seleccionar elementos en los menús. Windows 95 cuenta con un GUI.?La mayoría de los sistemas operativos pueden manejar programas de 16 o 32 bits, o ambos. Microsoft Windows 3.x ejecuta únicamente los programas de 16 bits; Windows 95 de Microsoft puede ejecutar ambos programas de 16 o 32 bits.Raras veces las tareas de un sistema son independientes unos de otros. Frecuentemente, los procesos cooperan entre sí, o compiten por algún recurso. Para esto es necesario realizar operaciones de comunicación y sincronización. Dos procesos se comunican cuando hay una transferencia de información de uno a otro.Dos procesos están sincronizados cuando hay restricciones en el orden en que ejecutan algunas de sus acciones.En la mayoría de los sistemas de tiempo real las tareas interaccionan mediante:datos comunes (protegidos)mensajesEn todos estos casos puede ocurrir que una tarea tenga que esperar un suceso de otra menos prioritaria. Esta situación se denomina bloqueo, y produce una inversión de prioridad indeseable.La inversión de prioridad no se puede eliminar completamente, pero es posible limitar su duración.1473362133350002015490127473134429593345192675293345816772116840734222933450230032106680134147933452942001145392942001145398868141145399475941145391296197171450Y0Y716753171450X0X67408011751127429111751TareaPTaAccionesT144A1; Ax; Ay; A2T232B1; By; B2;T322C1T410D1; Dx; D2AcciónPCUsaA142Ax41XAy41YA241B131By32YB231C122D111Dx14XD211Modelado de tareas?Cómo se distingue a un Sistema de tiempo real?, bueno, un STR tiene restricciones de tiempo, Procesador: recurso activo (CPU, procesador de E/S, etc.), Recurso: recurso pasivo (dispositivo de E/S, disco, cinta, red), Tarea: conjunto de unidades de ejecución, Job: unidad de trabajo ejecutada por el sistema. Para estas restricciones temporales se tomaran en cuenta:Tiempo de inicio (release time).Plazo de respuesta.Tiempo de respuesta máximo.Considere que en la mayoría de los STR tiene las restricciones anteriormente mencionada, pero consideraremos el plazo de respuestas, estas pueden ser de tipo plazo crítico: donde el resultado tarde puede ser fatales, de poca utilidad o con consecuencias desastrosas; y plazos no críticos (suaves): se desea que el computo termine a tiempo, pero resultados que llegan tarde son útiles (hasta cierto punto). Definiciones: un Job tiene un plazo crítico cuando el dise?ador del sistema tiene que comprobar que nunca pierde si plazo, un sistema es de tiempo real critico cuando la mayor parte de los plazos son críticos. Sobrecargas. Restricciones de ponentes: tanque, censores, actuadores, interfaces A/D y computadora.255588914528300En el sistema (planta), dada una u(t), se produce una y(t).El sistema recibe una se?al de referencia r(t), el cual indica la temperatura deseada.El objetivo del sistema de control es que y(t), sea lo más parecida a r(t).Para lograr el objetivo, es preciso aplicar a la planta la se?al u(t)y(t) muestra el valor real de la temperatura del termoRestricciones de Tiempos:Tiempos de cómputo.Periodos de muestreo.Tiempos de acceso a los dispositivos (censores actuadores)Plazos de Respuesta.Análisis de Planificación.Planificar el sistema con un Sistema OperativoLos tiempos hay que obtenerlos, ya sea mediante mediciones instrucción por instrucción, mediante analizadores lógicos o osciloscopios digitales.El periodo de muestreo y el plazo de respuesta dependen de la aplicaciónQue tipos de Sistemas de tiempo real son críticos?Tiempo Real no es cómputo rápido.?Cómo comprobar/verificar que siempre se cumplen los plazos en un sistema de tiempo real crítico?Implementar mecanismos para monitorizar el estricto cumplimiento de tiemposQue consecuencia trae la pérdida de plazos en este tipo de SistemasRestricciones de Tiempo tolerantes: algunos plazos se permite que se pierdan:n de m plazos perdidos. (% por ciento de plazos perdidos)Tareas con Cómputo obligatorio y cómputo opcional.Calidad de servicio: (obtener 70% de los mensajes de la red).Mejor esfuerzo: que se cumplan el mayor número de plazos posibles.4065270635000(a) Requerimientos de tiempos sin restricciones: Sistemas de transacciones en línea, Switches de telefonía.(b) Requerimientos de plazos con pocas restricciones:Sistema de obtención de precios de cotizaciones en bolsa.(c) Requerimientos de plazos con restricciones:MultimediaParámetros TemporalesJi:Job, unidad de trabajoTarea (ti ): conjunto de JobNNúmero de tareasMNúmero de recursosai:tiempo de arribo (reléase time)si:tiempo de inicio de ejecuciónTiPeríodo de activaciónCi:Tiempo de ejecución máximo: Cj < Dj = Tj DiPlazo de respuesta relativa del Job Jidi:Plazo de respuesta absoluta del Job Jifi:tiempo de finalizaciónRiTiempo de respuesta máximoPPrioridad5205657Se trata de asegurar que: Cj < Dj < Tj y Rj < DjUna tarea se ejecuta concurrentemente con otras tareas.Tiempo de ejecución: máximo, mínimo, promedio?Cuál de estos parámetros es fijo o variable??Tiempo de inicio: Fijo, con jitter, o esporádico.?Cómo se obtienen las prioridades de las tareas??Por qué no se utiliza la velocidad de procesamiento?Restricciones del SistemaRestricciones de los parámetros temporales.Restricciones de recursos: una tarea puede requerir acceso a ciertos recursos compartidos por otras tareas, como dispositivos de E/S, redes de comunicación, estructuras de datos, archivos y bases de datos.Restricciones de precedencia: una tarea puede requerir resultados de una u otra tarea antes de comenzar su ejecución.Restricciones de Expulsividad. Una tarea puede ser expulsada (o no) de su ejecución por otra tarea en medio de su ejecución.Restricciones de confiabilidad y desempe?o: una tarea podría tener que cumplir con ciertas restricciones de confiabilidad, disponibilidad o desempe?o.Restricciones de PrecedenciaTipos de TareasTareas Periódicas.Tareas Aperiódicas.Tareas Imprecisas: Tareas con partes obligatoria y opcional. Tareas Multiframe: El tiempo de computo varia de instancia a instancia.Tareas Elásticas: el periodo puede extenderse o comprimirse.Tareas Periódicas con arrivo aperiodico y número de periodos de vida no finito.Tareas con manejo de energia: tareas que pueden aumentar o disminuir su velocidad de procesamiento en cualquier instante para reducir su consumo de energía.Modelo de Tareas PeriódicasTareas : ti ... tn . Cada tarea consiste de Job: Ji1, Ji2, ….., Jinri:tiempo de inicio (release time)TiPeríodo de activaciónCi:Tiempo de ejecución máximo: Cj < Dj = TjDiPlazo de respuesta relativa del Job Jidi:Plazo de respuesta absoluta del Job JiRiTiempo de respuesta máximoUiUtilización de ti Ui = Ci / TiHhiperperíodo del sistema: lcm (T1,…Tn)EjemploTareaTCPUt116410.250t240520.125t3803230.4000.775Tareas Aperiódicas y EsporádicasEventos que ocurren en tiempos inesperadosai:tiempo de arrivo de la tarea ti IiTiempo entre arrivos.Ci:Tiempo de ejecución máximo: Cj < Dj DiPlazo de respuesta relativa del Job JiCada tarea consiste de un solo Job: Ji, Ji, ….., Jn. Cada tarea arriva en tiempos inesperados.Tareas aperiódicas:los Job tienen plazos suaves o no tienen plazos.Tareas esporádicas:los Job tienen plazos de respuesta críticos.Ejemplo de Tareas AperiódicasTareas ImprecisasEstas tareas contienen una parte obligatoria una parte opcional.Mi:parte obligatoria de la tarea ti Oi:parte opcional de la tarea ti Mi precede en ejecución a OiPi puede no ejecutarse o ejecutarse parcialmenteEl plazo de Mi debe de cumplirseEl plazo de Oi podria no cumplirse.La ejecución de Oi permite refinar el resultado de MiSe trata de producir la mayor ejecución posible de todas las partes opcionales, de forma que:no comprometan a ninguna parte obligatoriaque se ejecuten al máximo posible las partes opcionales pero que no causen la pérdida de plazos de las partes obligatoriasEjemplo de Tareas ImprecisasTareasTMOPUt1305530.333t2405520.250t35010210.2400.823Las tareas 3 pierden el plazo de su parte opcional en su primer Job, en t=50.Practica 5Laboratorio de: Electrónica o cómputo.Práctica No.: 5.Tema: Controlar 8 Leds desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha y viceversa.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este primer laboratorio se realizara el control de leds por medio de un micro controlador (ARDUINO), Para esta primera practica el procedimiento es encender y apagar 8 leds de manera secuencial mediante 8 salidas digitales del Arduino, estos leds tendrán un recorrido de derecha a izquierda y viceversa, el tiempo que se demora en encender y apagar está definido por el usuario en el software (100 milisegundos) con la posibilidad de cambiarlo de acuerdo a la necesidad.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:8 resistencias1 Plataforma Arduino UNO o MEGA1 ProtoBoard8 Leds 5mmDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este primer laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los leds en la ProtoBoard.– La pata más larga del diodo LED es el polo positivo (ánodo).– La pata más corta del diodo LED es el polo negativo (cátodo).Paso 4: conectar el Arduino con los leds en la ProtoBoard.En el Ardunio ubicar donde nos dice Digital (PWM) que serían las salidas digitales en donde usaremos los pines del 2 al 9 para los leds.En el mismo rango encontraremos el pin GND (Tierra) que ira a la ProtoBoard donde se encuentran nuestras resistencias.#define maxleds 8 //creamos la variable maxleds de 8 elementos int led[maxleds] = {2,3,4,5,6,7,8,9}; //creamos un vector de enteros para los pines a utilizarvoid setup () //Esta función se ejecutará una única vez después de que se conecte la placa Arduino a la fuente de alimentación, o cuando se pulse el botón de reinicio de la placa. { for (int i=0;i<maxleds;i++) pinMode(led[i],OUTPUT); //configura los pines de los LEDS como salida. }// se ejecuta consecutivamente, permitiéndole al programa variar y responder. void loop() { for (int i=0;i<=maxleds;i++) // ciclo for para cambiar de salida derecha { prender(led[i],100); //llama a la funcion prender, pasando como parametro el arreglo y el tiempo apagar(led[i],100); //llama a la funcion apagar, pasando como parametro el arreglo y el tiempo. }for (int i=maxleds;i>=0;i--) // ciclo for para cambiar de salida izquierda { prender(led[i],100); //llama a la funcion prender ingresando los parametrosapagar(led[i],100); //llama a la funcion apagar ingresando los parametros} }}void prender(int i, int t) //Declaramos la funcion para enceder el led { digitalWrite(i, HIGH);//led esta encendido delay(t); //tiempo de encendido }void apagar(int i, int t) //Declaramos LA funcion para apagar el led { digitalWrite(i, LOW); //led esta apagado delay(t); //tiempo de apagado }Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 6Laboratorio de: Electrónica o cómputo.Práctica No.: 6.Tema: controlar 8 Leds desde Arduino, un LED encendido que se mueve de izquierda a derecha según la posición del Potenciómetro.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:Se realizara el control de leds por medio de un micro controlador (ARDUINO) y un Potenciómetro, donde ahora la tarea no será periódica si no aperiódica.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:8 resistencias1 Plataforma Arduino UNO o MEGA1 ProtoBoard8 Leds 5mm1 Potenciómetro 10KDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este primer laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los leds en la ProtoBoard.La pata más larga del diodo LED es el polo positivo (ánodo).La pata más corta del diodo LED es el polo negativo (cátodo).Paso 4: conectar el Arduino con los leds y el potenciómetro en la ProtoBoard.En el Arduino ubicar donde nos dice Digital (PWM) que serían las salidas digitales en donde usaremos los pines del 2 al 9 para los leds.En el mismo rango encontraremos el pin GND (Tierra) que ira a la ProtoBoard donde se encuentran nuestras resistencias.-Conectar el potenciómetro de 10k a la placa Arduino, el pin del medio del potenciómetro se conecta al pin análogo A0 y los otros dos uno es el GND (Tierra) y la otra ira conectada al pin 5V.#define maxleds 8 //creamos la variable maxleds de 8 elementos#define pot A0 //creamos una variable pot con el pin A0int led[maxleds] = {2,3,4,5,6,7,8,9}; //creamos un vector para los pines a utilizar// Solo se ejecuta una vez, al iniciar o resetear el Arduinovoid setup (){ Serial.begin(9600); // La comunicacion serial sera a 9600 baudios for (int i=0;i<maxleds;i++) pinMode(led[i],OUTPUT); // Definimos los pines del 2 al 9 como salida}// Ciclovoid loop(){ int valor = analogRead(pot); // lee el valor del potenciometro int i=map(valor, 0, 1023, 0, 7); // hace un mapeo o conversion prender(led[i],500); //llama a la funcion prender ingresando los parametros apagar(led[i],100); //llama a la funcion apagar ingresando los parametros Serial.print(i); // imprime por el puero serial el valor de i} void prender(int i, int t) //funcion para enceder el led{ digitalWrite(i, HIGH);//led esta encendido delay(t); //tiempo de encendido}void apagar(int i, int t){ digitalWrite(i, LOW);//led esta apagado delay(t); //tiempo de apagado}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. PlanificadorEl planificador (en inglés scheduler) es un componente funcional muy importante de los sistemas operativos multitarea y multiproceso, y es esencial en los sistemas operativos de tiempo real. Su función consiste en repartir el tiempo disponible de un microprocesador entre todos los procesos que están disponibles para su ejecución.La tarea del planificador es producir planes de ejecución validos:A cada Job se le asigna un procesador para ejecución en cualquier momento.Los Job solo se ejecutan después de su tiempo de inicio El tiempo de procesamiento asignado cada Job corresponde a su máximo tiempo de ejecución.Las restricciones de la precedencia y de uso de recursos se satisfacen.Un plan de ejecución válido es un plan de ejecución factible si cada Job cumple con sus restricciones temporales.La tarea del planificador es producir planes de ejecución validos:A cada Job se le asigna un procesador para ejecución en cualquier momento.El Job solo se ejecutan después de su tiempo de inicio. El tiempo de procesamiento asignado cada Job corresponde a su máximo tiempo de ejecución.Las restricciones de la precedencia y de uso de recursos se satisfacen.Un plan de ejecución válido es un plan de ejecución factible si cada Job cumple con sus restricciones temporales.Un algoritmo de planificación es óptimo: (a) si el algoritmo encuentra siempre encuentra planes de ejecución (schedules) en el caso de que estos existan, y (b) si el algoritmo no encuentra planes de ejecución, quiere decir que estos realmente no existen.Métricas para evaluación del desempe?oTiempo de respuesta (Response time): Ri=fi-aiTiempo medio de respuesta (Average response time) = 1ni=1n(fi-ai)Retraso (Lateness): Li=fi-diTardanza (Tardiness): Ei=max?(0,Li)Longitud o tiempo de holgura (Laxity or Slack time): Xi=di-ai-Ci (# de Jobs que son ejecutados pero que pierden plazos) Loss Rate: porcentaje Jobs que son descartados.Hard: Li negativo y Ri < diSoft: Minimizar el promedio absoluto de Li, Ri, Miss Rate y Loss Rate.Métodos de Planificación Planificar el uso de los recursos con el fin de poder garantizar los requisitos temporales. Un método de planificación tiene dos aspectos importantes:Un algoritmo de planificación que determina el orden de acceso de la tareas a los recursos del sistema ( en particular al procesador )Un método de análisis que permite calcular el comportamiento temporal del sistema.Así se puede comprobar si los requisitos temporales están garantizados en todos los casos posibles.En general se estudia el peor comportamiento plejidad debida a la periodicidad de las tareas:La planificación por sí sola no resuelve el problema.La activación periódica de tareas requiere una forma estricta de análisis y garantías.La tarea no solo arriba una sola vez, sino varias.Es necesario un mecanismo para asegurar que el plazo de cada activación también se cumple.El análisis fuera de línea provee garantías de cumplimiento de plazos a priori. Sin embargo se necesita de mecanismos de soporte de cumplimiento de plazos durante la ejecución a fin de conseguir una ejecución predecible.Planificación vs. PlanificabilidadPlanificación = enfoque para priorizar una tarea sobre otraPlanificabilidad = análisis formal que permite garantizar que un conjunto de tarea periódicas pueden (o no) ser asignadas a un recurso compartido (p.ej. el procesador) tal que cada una de las tareas cumpla con su plazo de respuestaPlanificabilidad = Control de admisiónAsignación de Prioridades:Cumplir los plazos de los procesos de mayor prioridad.?Quién asigna las prioridades?Naturalmente el usuario (aunque después pague por ello!!)Desafortunadamente:El sistema necesita asignar prioridades también por llevar un control de admisión(Orden de prioridades asignado por el sistema) ? (Orden de prioridades asignado por el usuario)Se requiere una solución intermediaCompromiso de PrioridadesMezcla de prioridades asignadas por el usuario y el sistema?Significa esto algún sacrificio por ambas partes-es posible tolerarlo?Clasificación de Métodos de PlanificaciónExpulsivo: Permite que las tareas en ejecución sean interrumpidas en cualquier momento para asignar el procesador a otra tarea activa, de acuerdo al método de planificación.No expulsivo: Una vez que inicia su ejecución una tarea no es interrumpida hasta que termina. Las decisiones de planificación solo pueden llevarse a cabo hasta que termina la tarea.Estático: Los parámetros son fijos y calculados antes de la ejecuciónDinámico: Los parámetros pueden cambiar durante la ejecución.Off-line: La planificación se realiza antes de la ejecución. El plan de ejecución se almacena en una tabla.On-line: El planificador toma decisiones sobre la ejecución, cuando una tarea inicia su ejecución o cuando termina de ejecutarse.Best-effort: Algoritmo dinámico que trata de encontrar un plan de ejecución factible, pero si no lo encuentra hará lo mejor posible para cumplir los plazos de las tareasOff-line scheduling: el plan de ejecución se calcula fuera de línea y se basa en el conocimiento de los tiempos de inicio y de cómputo de todos los jobs.Para sistemas determinísticos: con parámetros temporales fijos que no cambien o que cambien muy poco.On-line scheduling: el planificador toma decisiones sin conocimiento del tiempo en que arrivaran jobs en el futuro.No existe un plan de ejecución optimo si los jobs son no-expulsivosCuando un job arriva, se acepta en el sistema si cumple con la prueba de aceptación.Planificación (scheduling)La planificación consiste en asignar un orden de ejecución a un conjunto de tareas que se ejecutan concurrentemente. En la planificación existen 3 elementos:Procesadores.Recursos.Tareas.Planificador y Manejador de Recursos (Sistema Operativo).Cada tarea es planificada por un algoritmo de planificación y distintos recursos son asignados mediante un protocolo de acceso a recursos.Planificar el uso de los recursos con el fin de poder garantizar los requisitos temporales. Un método de planificación tiene dos aspectos importantes:Un algoritmo de planificación que determina el orden de acceso de las tareas a los recursos del sistema (en particular al procesador).Un método de análisis que permite calcular el comportamiento temporal del sistema. Así se puede comprobar si los requisitos temporales están garantizados en todos los casos posibles. En general se estudia el peor comportamiento posible.Planificación vs. PlanificabilidadPlanificación = enfoque para priorizar una tarea sobre otraPlanificabilidad = análisis formal que permite garantizar que un conjunto de tarea pueden (o no) ser asignadas a un recurso compartido (p.ej. el procesador) tal que cada una de las tareas cumpla con su plazo de respuestaPlanificabilidad = Control de admisiónClasificación de Métodos de PlanificaciónExpulsivo: Permite que las tareas en ejecución sean interrumpidas en cualquier momento para asignar el procesador a otra tarea activa, de acuerdo al método de planificación.No expulsivo: Una vez que inicia su ejecución una tarea no es interrumpida hasta que termina. Las decisiones de planificación solo pueden llevarse a cabo hasta que termina la tarea.Estático: Los parámetros son fijos y calculados antes de la ejecuciónDinámico: Los parámetros pueden cambiar durante la ejecución.Off-line: La planificación se realiza antes de la ejecución. El plan de ejecución se almacena en una tabla.On-line: El planificador toma decisiones sobre la ejecución, cuando una tarea inicia su ejecución o cuando termina de ejecutarse.Best-effort: Algoritmo dinámico que trata de encontrar un plan de ejecución factible, pero si no lo encuentra hará lo mejor posible para cumplir los plazos de las tareas.Métodos de PlanificaciónPlanificación basada en el reloj (basada en el tiempo): el plan de ejecución se calcula fuera de línea y se basa en el conocimiento de los tiempos de inicio y de cómputo de todos los Jobs. El plan de ejecución está en una tabla y no es concurrente.Planificación round robín con prioridades: las tareas tienen prioridades asignadas por el usuario (fuera de línea). Dentro de cada prioridad las tareas se planifican en round robín. Cada tarea se ejecuta en forma continua como máximo un tiempo= quantum.Planificación basada en prioridades: las prioridades las asigna el algoritmo de planificación. La tarea con mayor prioridad se ejecuta en cualquier instante.tareas periódicas independientestareas periódicas y aperiódicas, independientes.tareas periódicas que comparten recursos.Planificación basada reserva de tiempo: a cada tarea se le reserva una utilización del CPU. El planificador elige las tareas a ejecutar en base al tiempo que tengan asignado.Planificación Heurística: la planificación se hace siguiendo el enfoque del mejor esfuerzoPlanificación Flexible: este método puede basarse en cualquiera de los métodos anteriores. Sin embargo, los parámetros no son fijos y pueden cambiar de valor en respuesta a las condiciones del ambiente. En este método, es posible degradar al sistema o permitir la perdida de plazos en condiciones de sobrecarga.Off-line scheduling: el plan de ejecución se calcula fuera de línea y se basa en el conocimiento de los tiempos de inicio y de cómputo de todos los Jobs.Para sistemas determinísticos: con parámetros temporales fijos que no cambien o que cambien muy poco.On-line scheduling: el planificador toma decisiones sin conocimiento del tiempo en que arrivaran Jobs en el futuro.No existe un plan de ejecución optimo si los Jobs son no-expulsivosCuando un Job arriva, se acepta en el sistema si cumple con la prueba de aceptación.TareaTCA2510B258C505D504E1002Planificación basada en el reloj (tiempo)El plan de ejecución se elabora a priori con parámetros fijos. Es un esquema que se repite cada ciclo principal. El ciclo principal dura 100 ms.Se compone de 4 ciclos secundarios de 25 ms cada uno.Planificación basada en prioridadesEl planificador dicta su política de ejecución sobre una cola de procesos ordenados por prioridades, y el despachador elige para ejecución a los procesos que estén listos para ejecución de acuerdo a un orden de prioridades.El Job con mayor prioridad es ejecutado hasta completarse, o hasta que alguna tarea de mayor prioridad se alista, o hasta que se bloquea.El procesador nunca esta ocioso si hay tareas listas para ejecución.Con prioridades fijas (nunca cambian) o dinámicas (cambian en cualquier momento durante la ejecución).Expulsivas o no-expulsivas.Rate Monotonic (prioridades fijas): mayor prioridad al de menor periodo.EDF (prioridades dinámicas): mayor prioridad a la tarea con plazo más cercano Se implementa: (expulsivo o preemptive)Asignando prioridades a las tareasLas decisiones de planificación se realizancuando alguna tarea se alista,cuando se le termina el tiempo de ejecución a una tarea, termina de ejecutarse, o se bloquea por algún recurso),cuando las prioridades de las tareas cambian.cuando ocurre un evento inesperado (sobrecarga)Cada vez que se toma una decisión de planificación, la tarea con mayor prioridad se ejecuta.En el caso no-preferente (non-preemptive), las decisiones de planificación son hechas solo cuando el procesador termina la ejecución de alguna tarea.El método de planificación (algoritmo) es estático, si las prioridades se asignan una sola vez y permanecen fijas, y es dinámico si las prioridades cambian durante la ejecución.Prioridades Fijas:Rate Monotonic (prioridades fijas): mayor prioridad al de menor periodo.Prioridades Dinámicas:EDF (Earliest Deadline First): mayor prioridad a la tarea con plazo más cercano Shortest slack time first (la tarea con menor tiempo de holgura primero): en cualquier instante t, la holgura (slack) de un Job, es igual a d -t menos la parte de computo restante del Job.Programación de Tareas PeriodicasPlanificación CíclicaSi todas las tareas son periódicas, se puede confeccionar un plan de ejecución fijoSe trata de un esquema que se repite cada TM=M C M (Tj) (Ciclo Principal)El ciclo principal se divide en ciclos secundarios, con período.Ts (TM=K Ts) En cada ciclo secundario se ejecutan las actividades correspondientes a determinadas tareas. El sistema debe ser determinista, todos los parámetros temporales deben ser conocidos a priori.TareaTCA2510B258C505D504E1002El ciclo principal dura 100 ms.Se compone de 4 ciclos secundarios de 25 ms cada uno.Programación del Ejecutivo cíclico196786559055Plan cíclico: (tk, t(tk)), al instante tk, ejecuta la tarea t(tk) o tiempo ocioso Planificador: proximo punto de desicion i y entrada k de la tabla = 0timer = tkdo foreveracepta interrupcion del timertimer = ? i/N ? + tkEjecuta la tarea tsleep Se asume que solo hay una tarea por framePlan cíclico: (tk, t(tk)), al instante tk, ejecuta la tarea t(tk) o tiempo ocioso Planificador: proximo punto de desicion i y entrada k de la tabla = 0timer = tkdo foreveracepta interrupcion del timertimer = ? i/N ? + tkEjecuta la tarea tsleep Se asume que solo hay una tarea por frameprocedure Cyclic_Executive is type Cycle is mod 4; Frame ; Cycle : = 0;begin loop Wait_for_Interrupt; case Frame is when 0 => A; B; C; when 1 => A; B; D; E; when 2 => A; B; C; when 3 => A; B; D; end case; Frame : = Frame + 1; end loop;end Cyclic_Executive;El cumplimiento de tiempos debe verificarse al final de cada frame.Las reglas para seleccionar el valor de m para una tarea con parametros {(Ti, Ci, Di)} para n tareas es:m ≤ di, m ≥ ci, i=1, 2, …, n.M / n = entero (m divide a Ti, en al menos una tarea)debe haber al menos un frame en el intervalo entre el tiempo de inicio y el plazo de cada Job.2m - gcd (m, Ti, ) ≤ Di, for i = 1, 2, … , nEjemplo: selección del valor de mTareas = {(T,C,D)} = {(15, 1, 14), (20, 2, 26), (22, 3,22)};Hiperperiodo = 660Valores posibles de mm ≤ min{Di} = 14 ? m = 1, 2, 3, 4, … , 14m ≥ max{Ci} = 3 ? m = 3, 4, 5, … , 14m divide a Ti, ? m = 3, 4, 5, 10, 112m - gcd(m, Ti, ) ≤ di ? m = 3, 4, 5Suponga que T = {(5, 1, 4), (20, 7, 26), (22, 5)}, Reglas:m ≤ min{Di} = 4m ≥ max{Ci} = 7No pueden satisfacerse simultáneamentePodemos descomponer tareas grandes en tareas peque?as T’ = {(5, 1, 4), (20, 3, 26), (20, 4, 26), (22, 2), (22, 3)} para planificarlas en un procesador La programación del planificador del ejecutivo cíclico cambia cuando las tareas se descomponen.Cambios de modoLos cambios de modo son difíciles de realizar.Cambios de Modo: Eliminación o creación de tareas, o cambios en los parámetros de las tareas.?Cuándo realizar el cambio de modo?. Ventajas y desventajas de realizarlo (a) al fin del frame en ejecución, (b) durante el ciclo principal actual,(c) durante la ejecución de la tarea actual, (d) cuando arriva la interrupción.Tareas Aperiódicas y EsporádicasTareas aperiódicas: atendidas enBackground: cuando ninguna tarea se está ejecutando.Slack Stealing: cuanto puede retrasarse una tarea periódica.Manejo de tareas aperiódicas: convertir cada tarea esporádica en una periódica: servidor periódico (T, C, D).Uso del servidor aperiódico de la menor prioridad.Tareas esporádicas: Uso de test de aceptación.Tareas AperiódicasTípicamente:la ejecución en background: cuando ninguna tarea se ejecutasu ejecución puede retrasarseLos Jobs aperiódicos provienen de eventos externos.Por lo tanto:Entre más pronto terminen mejor, lo cual hace al sistema más responsivoMinimizar el tiempo de respuesta de los Jobs aperiódicos es un objetivo de dise?o.El enfoque es:ejecutar los Jobs aperiódicos antes que los periódicos cuando esto sea posible: cuando no se pierden los plazos de los Jobs periódicos.esto se conoce como slack stealing.Un servidor periódico sigue al plan cíclicoUn servidor aperiódico verifica la cola de tareas aperiódicasla ejecución en background: cuando ninguna tarea se ejecutala ejecución en tiempo ocioso (slack stealing): las tareas periódicas se retrasan de forma que no pierdan sus plazos.Todas las tareas terminan antes del fin de sus frames y las tareas aperiódicas no son expulsables.al frame k, ek se reserva para tareas periódicasslack time = s = f - ekal comienzo de cada frame, encuentra una tarea aperiódica j con tiempo de ejecución el que sea menor a s, si s >= ej. la tarea podrá ejecutarse, en caso contrario buscar en el siguiente frameejecuta otra tarea aperiódica en el slack que resta: s = s - ej al frame kHaz slack stealing en los siguientes frames.Test de Aceptación:IF S(s, l) < e THENReject jobELSEAccept jobSchedule executionENDEjemplo de Tareas AperiódicasTama?o del frame: 4S1(1.5) arriva al tiempo 4S2(0.5) arriva al tiempo 9.5S3(2.0) arriva al tiempo 10.5203454032385Tama?o del frame: 4S1(17,4.5) arriva al tiempo 3S2(29,4) arriva al tiempo 5S3(22,1.5) arriva al tiempo 11S4(44,5.0) arriva al tiempo 142044065571500Verificar si existe slack, como se hace con las tareas aperiódicas.Si no existe suficiente slack rechaza a la nueva tarea.Construcción del Plan CíclicoAplicar las reglas para seleccionar el valor del frame.Si no existe un plan de ejecución factible (no existe un valor factible del frame), partir los jobs en partes menores y seleccionar de nuevo el valor del frame.Asignar las partes en los frames.Algoritmo flujo de red iterativo: Permite encontrar un plan de ejecución, si este existe.Encuentra los planes factibles para cada tama?o de frame, desde el frame más grande al más peque?o.Si se encuentra un plan factible, este nos dirá si es necesario descomponer las tareas en partes.Si el algoritmo no encuentra un plan factible para todos los tama?os de frames, no existe un plan factible.Algoritmo para la construcción del plan cíclico.Asuma que cada tarea se puede dividir (es expulsable)elegir f que divida a H y a 2f - gcd ( f, pi ) ? Di Para cada f, construya un diagrama de flujo de red.una fuente y un destinoun vértice (vertex) para cada Job Ji,k (instancia de la tarea) y una flecha (edge) desde el destino con capacidad Ci.un vértice para cada frame fk y una flecha (edge) desde cada frame hacia el destino (sink) con capacidad f.Si Ji,j puede planificarse en el frame fk, a?ade una flecha (edge) entre los vértices con capacidades f.Encuentre el máximo flujo entre el destino (source) y la fuente (sink).la planificación es factible si el flujo máximo es igual al tiempo de ejecución total. Tres tareas (15, 1, 14) (20, 2, 26) and (22,3)H = 330 , f > 3, y f = 3, 4, 5, 10, o 11 f no puede ser muy grande dado que 2f - gcd(….) ? 14f puede tener valores 3, 4, y 5right1397000Tres tareas (4, 1) (5, 2, 7) and (20, 5) H=20, f > 5, pero f < 4Job slices: divide la 3ra. tarea en (20, 1) (20, 3) y (20, 3)338709020954sourcesinkJi,kf100sourcesinkJi,kf1f puede tener valor de 4Grafica de flujo de redTres tareas (4, 1) (5, 2, 7) y (20, 5), H=20, f = 2 o 4PropiedadesNo hay concurrencia en la ejecución Cada ciclo secundario es una secuencia de invocaciones de procedimientos Los procedimientos pueden compartir datos No hace falta usar mecanismos de exclusión mutua Los períodos deben ser armónicos Puede ser necesario utilizar períodos más cortos de lo necesario No hace falta analizar el comportamiento temporal El sistema es correcto por construcciónVentajas del ejecutivo cíclicoSimplicidad y Predecibilidad:Las restricciones temporales pueden checarse fácilmente.El plan de ejecución cíclico puede representarse en una tabla para usarse por el kernel.Cambio de contexto muy peque?o, poco overhead de planificación.Fácil para representar restricciones de precedenciaDesventajas del ejecutivo cíclicoLas tareas esporádicas son difíciles de tratar Se puede utilizar un servidor de consultaEl plan cíclico es difícil de construir Si los períodos son de diferentes órdenes de magnitud el número de ciclos secundarios se hace muy grande Puede ser necesario partir una tarea en varios procedimientos. En el caso más general es NP-duroEs poco flexible y difícil de mantener Cada vez que se cambia una tarea hay que rehacer toda la planificación.No permite integrar tareas con plazos críticos y acríticos.Practica 7Laboratorio de: Electrónica o cómputo.Práctica No.: 7.Tema: Planificación de sistemas de tiempo real.En un Programa concurrente, no es necesario especificar el orden exacto con el que se ejecutan el proceso. Se utilizan primitivas de sincronización para imponer restricciones locales en el orden de ejecución, como pueden ser las primitivas de exclusión mutua, pero en este caso el comportamiento temporal del programa se caracteriza por ser no determinista. Si el programa es correcto entonces la funcionalidad de sus salidas será la misma pase lo que pase en su comportamiento interno o en los detalles de la implementaciónObjetivos:Dando un paso más para aumentar en determinismo en los sistemas, suponga que todas las tareas son periódicas, en que instantes de activación se repiten en el tiempo en intervalos fijos.Marco teórico:Existen multitud de factores que afectan al comportamiento temporal de un sistema. Muchos de ellos pueden ser insignificantes y otros son altamente determinantes. Por ejemplo, la temperatura puede afectar a la frecuencia del reloj de cuarzo del procesador. O el tipo de procesador RISC o CISC también puede afectar los tiempos de ejecución. Si se tiene en cuenta todos estos factores, el análisis de los sistemas puede resultar extremadamente complicado. Para hacer un estudio general del comportamiento temporal de los sistemas interesa tener en cuenta solamente los factores más determinantes, obviando los menos significativos. Del contrario va a resultar imposible hacer un análisis claro y sencillo del comportamiento temporal de un sistema.Interesa pues partir de un modelo teórico lo más sencillo posible, que tenga en cuenta los elementos más determinantes, y hacer el estudio temporal sobre que sistemas contemple solamente estos factores.Lista de materiales, herramientas y equipos:Hoja cuadriculara.Juego de geometría.Calculadora.Desarrollo de la práctica:En un sistema de tiempo real con las siguientes tareas:TareaT. de EjecuciónPeriodo/PlazoA110B312C720D15Comprueba si existe una planificación de tiempo real viable.Desarrolla un plan cíclico para la ejecución de estas tareas, calculando el periodo principal y secundario y mostrando la tabla de tareas para el ejecutivo cíclico.En un sistema de tiempo real con las siguientes tareas.TareaT. de EjecuciónPeriodo/PlazoA510B820C555Comprueba si existe una planificación de tiempo real viable.Dibuja el cronograma resultante de aplicar las políticas de planificación, comprueba en cada caso si se cumple siempre los plazos.Análisis de resultados: El estudiante tiene que hacer los cálculos ya repasados para determinar la gráfica de la planificación de los procesos.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 8Laboratorio de: Electrónica o cómputo.Práctica No.: 8.Tema: Programación de Ejecutivos Cíclicos (Multitareas).La multitarea es la característica de los sistemas operativos modernos de permitir que varios procesos o aplicaciones se ejecuten aparentemente al mismo tiempo, compartiendo uno o más procesadores.Los sistemas operativos multitarea son capaces de dar servicio a más de un proceso a la vez para permitir la ejecución de muchos más programas.Objetivos:Los programas escritos para microcontroladores en “modo cooperativo”, normalmente se construyen como un ciclo infinito el cual se repite una y otra vez, procesando en cada iteración un segmento de datos o realizando alguna tarea específica sobre cada uno de los recursos de hardware y software. El programador debe descomponer las tareas extensas o demandantes en tiempo de CPU a una serie de pasos que se ejecutan total o parcialmente en cada pasada por el ciclo. Tomemos en cuenta el siguiente ejemplo de función main que es el punto de entrada de un programa que corre en un microcontrolador:Marco teórico:Para que el sistema funcione como debe, cada función debe?tomar el control de CPU durante un intervalo de tiempo?y luego?devolver el control al loop principal?para que otras actividades puedan continuar con el uso del CPU. Para lograr esto, podemos implementar cada una de las?funciones (tareas) del loop principal?en su respectivo archivo de código fuente. De manera que las variables, funciones y estados de dicha tarea queden encapsuladas en un solo archivo fuente. Nosotros recomendamos implementar cada una de las tareas?como una máquina de estados?en la siguiente forma.Lista de materiales, herramientas y equipos:pilador en C o C++, puede ser DevC++, CodeBlock, o ZinjaI.Desarrollo de la práctica:Análisis de resultados: El estudiante tiene que tener las habilidades de pasar de diagrama de flujo a código y hacer que funciones el multiproceso.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 9Laboratorio de: Electrónica o cómputo.Práctica No.: 9.Tema: Controlar 8 LEDs desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, usando los valores de dos Potenciómetros para controlar los tiempos que el LED permanece encendido y apagado.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este segundo laboratorio se realizara el control de Leds por medio de un micro controlador (ARDUINO) y dos Potenciómetros.Para esta tercera práctica el procedimiento es encender y apagar 8 leds mediante dos pines análogos donde se controlaran los tiempos de encendido y apagado desde los dos potenciómetros.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:8 resistencias1 Plataforma Arduino UNO o MEGA1 ProtoBoard8 Leds 5mm2 Potenciómetro 10KDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los leds en la ProtoBoard.Nota:La pata más larga del diodo LED es el polo positivo (ánodo).La pata más corta del diodo LED es el polo negativo (cátodo)Paso 4: conectar el Arduino con los leds y los dos potenciómetros en la ProtoBoard.En el Ardunio ubicar donde nos dice Digital (PWM) que serían las salidas digitales en donde usaremos los pines del 2 al 9 para los leds.En el mismo rango encontraremos el pin GND (Tierra) que ira a la ProtoBoard donde se encuentran nuestras resistencias.Conectar los dos potenciómetros de 10k a la placa Arduino, los pines del medio de los potenciómetros se conectan al pin análogo A0 y A1 los otros dos son el GND (Tierra) y el otro ira conectado al pin 5V.#define maxleds 8 //creamos la variable maxleds de 8 elementos#define pot1 A0 //creamos la variable pot con el pin A1#define pot2 A1 //creamos la variable pot con el pin A2int led[maxleds] = {2,3,4,5,6,7,8,9}; //creamos un vector para los pines a utilizarvoid setup (){ Serial.begin(9600); for (int i=0;i<maxleds;i++) pinMode(led[i],OUTPUT); // Los pines del 2 al 9 seran de salida}void loop(){ for (int i=0;i<=maxleds;i++) { int timeon = analogRead(pot1); // lee el valor del potenciometro 1 int t1=map(timeon, 0, 1023, 0, 1000); // hace un mapeo o conversion int timeoff = analogRead(pot2); // lee el valor del potenciometro 2 int t2=map(timeoff, 0, 1023, 0, 1000); // hace un mapeo o conversion prender(led[i],t1); //llama a la funcion prender ingresando los parametros apagar(led[i],t2); //llama a la funcion apagar ingresando los parametros } for (int i=maxleds;i>=0;i--) { int timeon = analogRead(pot1); // lee el valor del potenciometro 1 int t1=map(timeon, 0, 1023, 0, 1000); // hace un mapeo o conversion int timeoff = analogRead(pot2); // lee el valor del potenciometro 2 int t2=map(timeoff, 0, 1023, 0, 1000); // hace un mapeo o conversion prender(led[i],t1); //llama a la funcion prender ingresando los parametros apagar(led[i],t2); //llama a la funcion apagar ingresando los parametros }}void prender(int i, int t) //funcion para enceder el led{ digitalWrite(i, HIGH);//led esta encendido delay(t); //tiempo de encendido}void apagar(int i, int t){ digitalWrite(i, LOW);//led esta apagado delay(t); //tiempo de apagado}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 10Laboratorio de: Electrónica o cómputo.Práctica No.: 10.Tema: Controlar 8 LEDs desde el Arduino, un LED encendido que se mueve en forma continua de izquierda a derecha, vía una interfaz gráfica en Processing/ControlP5 para controlar el tiempo de encendido y el tiempo de apagado.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este cuarto laboratorio se realizara el control de LEDs por medio de un micro controlador (ARDUINO) y mediante una interfaz gráfica donde se controlaran los tiempos de encendido y apagado.Para esta tercera práctica el procedimiento es encender y apagar 8 LEDs mediante 8 salidas digitales del Arduino, pero ahora se manipulara los tiempos desde la interfaz gráfica.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:8 resistencias1 Plataforma Arduino UNO o MEGA1 ProtoBoard8 Leds 5mmDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este cuarto laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los leds en la ProtoBoard.Nota:La pata más larga del diodo LED es el polo positivo (ánodo).La pata más corta del diodo LED es el polo negativo (cátodo).Paso 4: conectar el Arduino con los Leds en la ProtoBoard.En el Ardunio ubicar donde nos dice Digital (PWM) que serían las salidas digitales en donde usaremos los pines del 2 al 9 para los Leds.En el mismo rango encontraremos el pin GND (Tierra) que ira a la ProtoBoard donde se encuentran nuestras resistencias.Paso 5: Crearemos la interfaz que controlara los tiempos de encendido y apagado para los Leds, mediante la utilización de barras horizontales o sliders, en esta imagen se puede ver como quedo la interfaz después de realizar el código en processing, con esta modalidad nos ahorraríamos los potenciómetros.Nota: Adjunto el Link donde podrán descargar la librería controlP5, también encontrara la ruta donde esta librería debería estar y lograrla importar en Proccesing.:\Sistemas Embebidos USC\Processing 2.0.3\processing-2.0.3\modes\java\librariesCODIGO ARDUINO:#define maxleds 8 //creamos la variable maxleds de 8 elementosint t1=0; // creamos una variable t1 enteraint t2=0; // creamos una variable t2 enteraint valor=0; // creamos una variable valor enteraint led[maxleds] = {2,3,4,5,6,7,8,9}; //creamos un vector para los pines a utilizarint i; //creamos una variable entera ivoid setup (){ Serial.begin(9600); // La comunicacion serial sera a 9600 baudios for (int i=0;i<maxleds;i++) pinMode(led[i],OUTPUT); // El pines del 2 al 9 seran de salida}void loop(){ for (int i=0;i<=maxleds;i++) { if (Serial.available()>0) // si hay datos en el puerto serial entra a la condicion { valor = Serial.read(); // lee el valor que hay en el puerto serial if (valor == 'O') t1 = Serial.parseInt(); // lee y toma el siguiente valor y lo convierte a entero if (valor == 'F') t2 = Serial.parseInt(); // lee y toma el siguiente valor y lo convierte a entero } prender(led[i],t1); //llama a la funcion prender ingresando los parametros apagar(led[i],t2); //llama a la funcion apagar ingresando los parametros } for (int i=maxleds;i>=0;i--) { if (Serial.available()>0) { valor = Serial.read(); if (valor == 'O') t1 = Serial.parseInt(); if (valor == 'F') t2 = Serial.parseInt(); } prender(led[i],t1); apagar(led[i],t2); }}void prender(int i, int t) //funcion para enceder el led{ digitalWrite(i, HIGH);// led esta encendido delay(t); // tiempo encendido}void apagar(int i, int t){ digitalWrite(i, LOW);// led esta apagado delay(t); // tiempo apagado}CODIGO PROCCESING:import controlP5.*; //importar libreria controlP5import processing.serial.*; //importar libreria serialControlP5 cp5; // definir la variable cp5 del tipo ControlP5Slider slider1; // definir la variable slider1 del tipo SliderSlider slider2; // definir la variable slider2 del tipo SliderSerial serial; // definir la variable serial del tipo SerialKnob perilla1;Textlabel texto1, texto2, texto3, texto4; // definir las variables texto del tipo TextlabelTextlabel texto5, texto6, texto7;// configuración inicialvoid setup(){serial = new Serial(this, Serial.list()[1],9600); // inicializamos el puerto serial a 9600 baudiosString puerto = Serial.list()[1]; //definimos la variable puerto de tipo cadenasize(750,330); // tama?o de la ventanacp5 = new ControlP5(this); // crear el objeto ControlP5// crear el Slider para el tiempo encendido (Vertical)slider1 = cp5.addSlider("O",0,1000,500,80,120,30,100);slider1.setColor(new CColor(0xFFFFFFFF,0xFF555555,0xFFBBBB20,0xFFFFFFFF,0xFFFFFFFF));slider1.setLabelVisible(false);// crear el Slider para el tiempo apagado (Horizontal)slider2 = cp5.addSlider("F",0,1000,500,400,150,255,40);slider2.setColor(new CColor(0xFFFFFFFF,0xFF555555,0xFFBBBB20,0xFFFFFFFF,0xFFFFFFFF));slider2.setLabelVisible(false);//crear una perilla //perilla1 = cp5.addKnob("q",0,500,150,400,40,100);//perilla1.setColor(new CColor (0xFF00FF00,0xFF555555,0xFF009F00,0xFFFFFFFF,0xFFFFFFFF));// crear textotexto1 = cp5.addTextlabel("label") .setText("OPEN HARDWARE") .setPosition(250,20) .setColorValue(0xffffffFF) .setFont(createFont("Rod",30)) ;// crear textotexto2 = cp5.addTextlabel("label1") .setText("TIEMPO ENCENDIDO (ms)") .setPosition(10,220) .setColorValue(0xffffffFF) .setFont(createFont("Comic Sans MS",15)) ; // crear texto texto3 = cp5.addTextlabel("label2") .setText("TIEMPO APAGADO (ms)") .setPosition(460,120) .setColorValue(0xffffffFF) .setFont(createFont("Comic Sans MS",15)) ; // texto texto4 = new Textlabel(cp5,"Laboratorio #4 ",490,230,600,200); texto4.setFont(createFont("MV Boli",15));texto5 = new Textlabel(cp5,"Tecnologia Sistemas",490,250,600,200); texto5.setFont(createFont("MV Boli",15));texto6 = new Textlabel(cp5,"USC",490,270,600,200); texto6.setFont(createFont("MV Boli",15));texto7 = new Textlabel(cp5,"Johan Suarez",490,290,600,200); texto7.setFont(createFont("MV Boli",15));}void draw(){background(58,0,255); // color de fondo de la ventana texto4.draw(this); // introduce el texto en la ventana texto5.draw(this); texto6.draw(this); texto7.draw(this);}void controlEvent (ControlEvent evento) // se activa el evento{String nombre = evento.getController().getName(); // recoje el nombre del slider y lo convierte en Stringint valor = int(evento.getController().getValue()); // recoje el valor del slider y lo convierte en enteroserial.write(nombre + ":" + valor + "johan"); // envia por el puerto serial el nombre y el valorprintln(nombre + ":" + valor + "johan"); // imprime por pantalla el nombre y el valor}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 11Laboratorio de: Electrónica o cómputo.Práctica No.: 11.Tema: Controlar un LED RGB desde el Arduino, vía PWM con 3 potenciómetros, uno para cada color.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este quinto laboratorio se controlara un Led RGB por medio del ARDUINO.Para este laboratorio el procedimiento es controlar la intensidad de cada uno de los colores primarios (rojo, verde y azul) para generar diferentes combinaciones de colores.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:3 — resistencias3 — potenciómetros 10k1 — Plataforma Arduino UNO o MEGA1 — ProtoBoard1 — Led RGBDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este quinto laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los potenciómetros en la ProtoBoard y el Led.Paso 5: Conectar el Arduino con el led RGB y los potenciómetros.Conectar las entradas analogas provenientes de los potenciómetros a los pines análogos del Arduino (A0, A1 y A2).Conectar las salidas PWM (9 (rojo), 10 (verde), 11 (azul)) del arduino, a los pines del led RGB mediante las resistencias.#define maxleds 3 //creamos la variable maxled 3 elementos#define pot0 A0 //creamos la variable pot con el pin A0#define pot1 A1 //creamos la variable pot con el pin A1#define pot2 A2 //creamos la variable pot con el pin A2int led[maxleds] = {9,10,11}; //creamos un vector para los pines a utilizarint valor1=0; //creamos la variable valor 1 de tipo enteroint valor2=0;int valor3=0;void setup (){ Serial.begin(9600); for (int i=0;i<maxleds;i++) pinMode(led[i],OUTPUT); // los pines del 3,5,6 seran de salida}void loop(){ int rojo = analogRead(pot0); // lee el valor del potenciometro 0 int valor1=map(rojo, 0, 1023, 0, 255); // hace un mapeo o conversion int verde = analogRead(pot1); // lee el valor del potenciometro 1 int valor2=map(verde, 0, 1023, 0, 255); // hace un mapeo o conversion int azul = analogRead(pot2); // lee el valor del potenciometro 2 int valor3=map(azul, 0, 1023, 0, 255); // hace un mapeo o conversion analogWrite(led[0], valor1); // escribe el valor de la varibale por el pin xx analogWrite(led[1], valor2); analogWrite(led[2], valor3);}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 12Laboratorio de: Electrónica o cómputo.Práctica No.: 12.Tema: Controlar un LED RGB desde el Arduino, vía PWM con una interfaz gráfica en Processing/ControlP5 para controlar el valor de cada color.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este laboratorio se realizara el control de un led RGB por medio de ARDUINO, con la diferencia que se creara una interfaz gráfica para reemplazar los potenciómetros.Para esta práctica el procedimiento es controlar la intensidad de cada uno de los colores primarios (rojo, verde y azul) para generar diferentes combinaciones de colores. Ahora la intensidad de cada color se define por medio de una interfaz gráfica.Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Para la correcta programación y funcionamiento de esta práctica se utilizaran:3 resistencias1 Plataforma Arduino UNO o MEGA1 ProtoBoard1 Led RGBDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este cuarto laboratorio.Paso 2: Ubicar el Led en la ProtoBoard.Paso 3: Ubicar las resistencias en la ProtoBoard.Paso 4: Conectar el Arduino con el Led RGB.Conectar las salidas PWM (3 (rojo), 5 (verde), 6 (azul)) del Arduino, a los pines del Led RGB mediante unas resistencias.Paso 5: Realizar la interfaz gráfica de usuario en Processing, desde ahí se podrá controlar la intensidad de cada color del Led RGB.center2857500#define MAXLED 3 //creamos la variable maxled 3 elementosint led[MAXLED] = {3,5,6}; //creamos un vector para los pines a utilizarint valor = 0; //creamos la variable valor de tipo enteroint i = 0; //creamos la variable valor 1 de tipo enterovoid setup(){ Serial.begin(9600); // la comunicacion serial sera a 9600 baudios for(int i = 0; i < MAXLED ; i++) { pinMode(led[i], OUTPUT); // los pines del 3,5,6 seran de salida }}void loop(){ if(Serial.available() > 0) // si hay datos en el puerto serial entra a la condicion { valor = Serial.read(); // lee lo que hay en el puerto serial if(valor == 'R') i = 0; if(valor == 'G') i = 1; if(valor == 'B') i = 2; valor = Serial.parseInt(); // lee y toma el siguiente valor convirtiandolo en entero analogWrite(led[i], valor); // escribe el valor por el pin xx }}CODIGO PROCCESING CONTROL P5:import controlP5.*; // importar libreria controlP5import processing.serial.*; // importar libreria serialControlP5 cp5; // definir la variable cp5 del tipo ControlP5Knob rojo, verde, azul; // definir la variable rojo,verde y azul del tipo KnobTextlabel texto1, texto2, texto3, texto4, texto5, texto6; // definir las variables texto del tipo TextlabelSerial serial; // definir la variable serial del tipo Serial// configuración inicialvoid setup(){serial = new Serial(this, Serial.list()[1],9600); // inicializamos el puerto serial a 9600 baudiosString puerto = Serial.list()[1]; //definimos la variable puerto de tipo cadenasize(620,400); // tama?o de la ventanacp5 = new ControlP5(this); // crear el objeto ControlP5// crear el knob para la intensidad de color rojorojo = cp5.addKnob("R",0,255,0,70,120,120);rojo.setColor(new CColor(0xFFFFFFFF,0xFFFF0000,0xFF000000,0xFFFFFFFF,0xFFFFFFFF));// crear el knob para la intensidad de color verdeverde = cp5.addKnob("G",0,255,0,260,120,120);verde.setColor(new CColor(0xFFFFFFFF,0xFF00FF00,0xFF005F00,0xFFFFFFFF,0xFFFFFFFF));// crear el knob para la intensidad de color azulazul = cp5.addKnob("B",0,255,0,450,120,120);azul.setColor(new CColor(0xFFFFFFFF,0xFF0000FF,0xFF00005f,0xFFFFFFFF,0xFFFFFFFF));// crear textotexto1 = cp5.addTextlabel("label") .setText("OPEN HARDWARE") .setPosition(150,30) .setColorValue(0xff000000) .setFont(createFont("Algerian",40)) ;texto2 = cp5.addTextlabel("label1") .setText("ROJO") .setPosition(105,250) .setColorValue(0xff000000) .setFont(createFont("Algerian",15)) ; texto3 = cp5.addTextlabel("label2") .setText("VERDE") .setPosition(290,250) .setColorValue(0xff000000) .setFont(createFont("Algerian",15)) ;texto4 = cp5.addTextlabel("label3") .setText("AZUL") .setPosition(486,250) .setColorValue(0xff000000) .setFont(createFont("Algerian",15)) ; // otra forma de crear textotexto4 = new Textlabel(cp5,"Laboratorio #6",40,290,600,200); texto4.setFont(createFont("Andalus",17));texto4.setColorValue(0xff000000);texto5 = new Textlabel(cp5,"Tecnologia Sistemas",40,305,600,200); texto5.setFont(createFont("Andalus",17));texto5.setColorValue(0xff000000);texto6 = new Textlabel(cp5,"USC... Johan",40,320,600,200); texto6.setFont(createFont("Andalus",17));texto6.setColorValue(0xff000000);}void draw(){background(255,255,255); // color de fondo de la ventana texto4.draw(this); // introduce el texto en la ventana texto5.draw(this); texto6.draw(this);}void controlEvent (ControlEvent evento) // se activa cuando ocurra un evento con los botones{String nombre = evento.getController().getName(); // recoje el nombre del slider y lo convierte en cadenaint valor = int(evento.getController().getValue()); // recoje el valor del slider y lo convierte en enteroserial.write(nombre + ":" + valor); // envia por el puerto serial el nombre y el valorprintln(nombre + ":" + valor); // imprime por pantalla el nombre y el valor}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Practica 13Laboratorio de: Electrónica o cómputo.Práctica No.: 13.Tema: Controlar 8 LEDs desde el Arduino, a través de un IC 74HC595, definiendo mínimo 8 patrones de movimiento que son controlados desde un Potenciómetro.Arduino es una compa?ía de hardware libre y una comunidad tecnológica que dise?a y manufactura placas que se consideran como computadoras?de desarrollo de hardware y software, compuesta respectivamente por circuitos impresos?que integran un microcontrolador y un?entorno de desarrollo?(IDE), en donde se programa cada placa. Arduino se enfoca en acercar y facilitar el uso de la electrónica y programación de sistemas embebidos en proyectos multidisciplinarios. Toda la plataforma, tanto para sus componentes de hardware como de software, son liberados con licencia de código abierto?que permite libertad de acceso a ellos.Objetivos:En este laboratorio se realizara el control de 8 Leds por medio de un integrado IC 74HC595, el cual recibe los datos en forma serial y su salida es en forma paralela (8 bits).Para esta práctica el procedimiento es crear 8 secuencias diferentes y por medio de un potenciómetro ir graduando la secuencia. Gracias a la comunicación serial del Arduino, este se puede comunicar de manera serial con el integrado por medio de 3 pines los cuales son:pinLatch = 2;pinReloj = 3;pinDato = 4;El 74HC595: tiene 8 salidas marcadas Qa-Qc (o Q0-Q7), no puede leer datos de estos pines, sólo se pueden utilizar como salidas. Las siguientes conexiones son necesarias:GND (pin 8) a masaVcc (pin 16) a 5VOE (pin 13) a masaMR (pin 10) a 5VEsta configuración hace que todas las salidas estén activas y disponibles todo el tiempo,DS (pin 14) al pin digital 11 (cable azul)SH_CP (pin 11) al pin digital 12 (cable amarillo)ST_CP (pin 12) al pin digital 8 (cable verde)Marco teórico:Modelado de tareas Periódicas en Arduino basados en los microcontroladores Amtel AVR pueden ejecutar una sola secuencia de instrucciones a la vez. El problema de esto es por ejemplo, si ustedes están enviando números a su display y luego el usuario presiona un botón. Si nuestro ciclo toma mucho tiempo en ejecutarse puede que pase mucho tiempo antes de que podamos leer la línea de nuestro usuario y perdamos el evento, o tal vez simplemente estamos ocupando un ciclo en hacer algo interesante. Esto es una "desventaja" de microcontroladores sencillos y es algo con lo que las computadoras han tenido que convivir prácticamente desde que fueron inventadas.Lista de materiales, herramientas y equipos:Desde ahora serán conocidos como dataPin (DS), clockPin (SH_CP) y latchPin (ST_CP) respectively.Materiales:Los materiales que usaremos para este séptimo laboratorio son los siguientes:8 — resistencias8 — Leds1 — Potenciómetro 10k1 — plataforma Arduino Uno o MEGA1 — Integrado IC 74HC5951 — ProtoboardDesarrollo de la práctica:Paso 1: Disponer de todos los materiales necesarios para este quinto laboratorio.Paso 2: Ubicar las resistencias en la ProtoBoard.Paso 3: Ubicar los potenciómetros en la ProtoBoard y el Led.Paso 5: Conectar el Arduino con el led RGB y los potenciómetros.Conectar las entradas analogas provenientes de los potenciómetros a los pines análogos del Arduino (A0, A1 y A2).Conectar las salidas PWM (9 (rojo), 10 (verde), 11 (azul)) del arduino, a los pines del led RGB mediante las resistencias.Diagrama:ProtoBoard:Esquemático:Imágenes del proceso de montaje:Paso 1:?Disponer de todos los materiales necesarios para este séptimo laboratorio.Paso 2:?Ubicar las resistencias en la ProtoBoard.Paso 3:?Ubicar los Leds en la ProtoBoard.Paso 4:?Ubicar el Integrado IC 74HC595 en la ProtoBoard con sus pines de alimentación.Paso 5:?Ubicar el Potenciómetro de 10k.Paso 6:?Conectar el Arduino al integrado, por medio de sus salidas digitales. Las salidas digitales del Arduino a utilizar, son los pines del 2 al 4.Desde el integrado a Arduino.DS (pin 14) al pin digital 2SH_CP (pin 11) al pin digital 3ST_CP (pin 12) al pin digital 4Y Desde ahora serán conocidos como dataPin (DS), clockPin (SH_CP) y latchPin (ST_CP) respectively.CODIGO ARDUINO:#define PIN 3 //creamos la variable PIN de 3 elementos#define Pot A0 //creamos la variable pot con el pin A0const int Latch = 2; // Este pin sets baja cuando quiero que el 595 se escucheconst int Clock = 3; // Este pin es utilizado por shiftout para alternarconst int Data = 4; // Este pin se utiliza para pasar al siguiente bitint led[PIN] = {2,3,4}; //creamos un vector para los pines a utilizarint Serie1[17]={ 0,1,3,7,15,31,63,127,255,127,63,31,15,7,3,1,0 };int Serie2[7]= { 129,66,36,24,36,66,129 };int Serie3[11]={ 7,14,28,56,112,224,112,56,28,14,7 };int Serie4[6]= { 24,129,36,24,129,21 };int Serie5[8]= { 129,130,132,136,144,160,192,128 };int Serie6[7]= { 24,20,18,17,18,20,24 };int Serie7[4]= { 192,48,12,3 };int Serie8[8]= { 80,10,255,255,0,255,10,80 };// Solo se ejecuta una vez, al iniciar o resetear el Arduinovoid setup() { for (int i=0; i<PIN; i++){ pinMode(led[i], OUTPUT); } pinMode(Pot, INPUT);}// se ejecuta siempre como un ciclovoid loop(){ int Pos = analogRead(Pot); // lee el valor del potenciometro Pos = map(Pos, 0, 1023, 0,7); // hace un mapeo o conversion Casos(Pos); // llama a la funcion casos}void Casos(int Valor) //funcion para enceder el led{ switch(Valor) { case 0: //hacer algo cuando sea igual a 0 for(int j=0;j<17;j++) { On(Serie1[j]); } break; case 1: //hacer algo cuando sea igual a 1 for(int j=0;j<7;j++) { On(Serie2[j]); } break; case 2: //hacer algo cuando sea igual a 2 for(int j=0;j<11;j++) { On(Serie3[j]); } break; case 3: //hacer algo cuando sea igual a 3 for(int j=0;j<6;j++) { On(Serie4[j]); } break; case 4: //hacer algo cuando sea igual a 4 for(int j=0;j<8;j++) { On(Serie5[j]); } break; case 5: //hacer algo cuando sea igual a 5 for(int j=0;j<7;j++) { On(Serie6[j]); } break; case 6: //hacer algo cuando sea igual a 6 for(int j=0;j<4;j++) { On(Serie7[j]); } break; case 7: //hacer algo cuando sea igual a 7 for(int j=0;j<8;j++) { On(Serie8[j]); } break; } }// Uso de la orden interna shiftout funciónvoid On(int Valor){ digitalWrite(Latch, LOW); // se?al al 595 para escuchar los datos shiftOut(Data, Clock, MSBFIRST, Valor); // Se?al de la 595 que esta hecho digitalWrite(Latch, HIGH); // enviar datos serial delay(100); //Pausa el programa por un tiempo determinado (en milisegundos) especificado por el parámetro. Hay 1000 milisegundos en un segundo}Análisis de resultados: Luego del armado e implementación del código describa los que hace.Conclusiones y recomendaciones: Comprendidos y analizados los resultados de la práctica, el estudiante puede ahora emitir un juicio sobre ellos. No solo indicar si fueron o no correctos, sino indicar el por qué se dieron esos resultados. Aquí también deben indicarse si se cumplieron o no los objetivos de la práctica. Bibliografía (Referencias):Sistemas de tiempo real y lenguajes de programación, 3era Edición, Alan Burns & Andy Wellings, Addison Wesley.[Young, 1982] Young, S. (1982). Real time Languages – Design and development. Ellis Horwood.Sistema de tiempo real, (s.f.) en Wikipedia, recuperado 08 diciembre de 2016, : Problemas de Dise?o, (s.f.) en dise?o activo, recuperado 08 de diciembre de 2016, , (s.f.) UML, recuperado 08 de diciembre de 2016, de memorias, (s.f.) en sites., recuperado 10 de diciembre del 2016, de modelaje unificado, (s.f.), recuperado 10 de diciembre del 2016, (Informática), (s.f.), Wikipedia, recuperado 10 de diciembre del 2016, (informática)Frecuencia de Reloj, (s.f.), Wikipedia, recuperado 10 de diciembre del 2016, de Arduino, de la asignatura SITR, Universidad de Valencia, Espa?a ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery

Related searches