Interrupción de memoria

1.- ¿Cuál es la diferencia entre la comunicación síncrona y la Comunicación asíncrona? Explica cuál es la más utilizada en los sistemas Empotrados y por qué.
En la Comunicación síncrona se envía una señal de reloj en la transmisión que marca Las pautas de la comunicación, esta señal se puede proporcionar a través de una Línea adicional entre los sistemas que se quiere comunicar, o bien, se puede Extraer de alguna forma específica de codificación mientras que en la Comunicación asíncrona tanto el transmisor como el receptor deben secuenciar la Comunicación de acuerdo con una base de tiempos, pues la transmisión o la Recepción pueden ocurrir en cualquier momento.

2.- Enumera los bits que se transmiten en un sistema asíncrono RS-232 y la finalidad de cada uno


El Primer bit de la transmisión consiste en un bit de inicio (start), que es un Cero lógico. Luego le siguen los bits del dato, comenzando por el bit menos Significativo y finalizando con un bit, o dos, de parada (stop).

3.- Explica que es el generador de baudios y qué relación tiene Con las velocidades de transmisión en la interfaz RS-232.
La velocidad de comunicación de la USART del PIC (la tasa de Baudios) se controla mediante el USART ‘baud rate generator’ SPBRG. El SPBRG es Un timer de 16 bits que está continuamente contando. Esencialmente, la tasa en Baudios deseada se fija cargando el registro
SPBRG con el valor correcto para Proporcionar la velocidad deseada. La tasa en baudios también se ve afectada Por el valor del bit BRGH. BRGH determina si se desean comunicaciones de alta o De baja velocidad. Cuando sea posible, usando el modo de alta velocidad (BRGH=1) siempre ofrece unos valores de Tasa en baudios más cercanos al valor deseado que el modo de baja velocidad. Por tanto, es preferible emplear el modo de alta velocidad. Se dispone además De un bit, el BRG16 que permite usar El registro SPBRG como si fuese de 8 bits, en la mayoría de los casos esto es Suficiente.

4.- Indica el proceso para gestionar el puerto serie por Interrupciones. Explica los sucesos que ocurren al llegar un carácter a la USART del PIC18.
Para ambas Direcciones (o sólo una si no hay necesidad de la otra) definimos un trozo de Memoria que forma el búfer circular que no es más que una cola de tipo FIFO (primero en entrar, primero en salir). El puerto serie actuará como productor y La CPU actuará como el consumidor de los datos (en la dirección de RX). Asumimos que la CPU realmente puede leer los datos más rápidamente que el Puerto serie puede proporcionarlos, así la situación de que no hay espacio en El búfer circular y los datos se puedan perder, ocurrirá muy raramente. En la Dirección TX funciona de manera opuesta, nuestro programa es el productor y la USART es el consumidor.  Si no hay Espacio en el búfer (lo que significa que tenemos un búfer de transmisión Demasiado pequeño o producimos los datos demasiado rápido) la transmisión Fallará y tendrá que ser reintentada más tarde. Los sucesos que ocurren al Llegar un carácter a la USART del PIC18 son: •Configurar el puerto y preparar La interrupción USART RX. Cuando los datos llegan se llama a la interrupción. Dentro De la interrupción: si hay espacio disponible en el búfer, se guardan los Nuevos datos y se incrementa el índice “head”.  En la aplicación, la función de lectura de datos sería la Siguiente:  Si head != tail tenemos datos Disponibles en el buffer.  •Devolvemos Los datos a los que apunta el índice “tail”.  Incrementamos el índice “tail”.

5.- Indica las carácterísticas más importantes del bus I2C y Explica brevemente cada una


Las Carácterísticas más sobresalientes del bus I2C son: Se necesitan solamente dos Líneas, la de datos (SDA) y la de reloj (SCL). Cada dispositivo conectado al Bus tiene un código de dirección seleccionable mediante software. Habiendo Permanentemente una relación maestro/esclavo entre el micro y los dispositivos Conectados. El bus permite la conexión de varios maestros, ya que incluye un Detector de colisiones. El protocolo de transferencia de datos y direcciones Posibilita diseñar sistemas completamente definidos por software. Los datos y Direcciones se transmiten con palabras de 8 bits. Las líneas SDA y SCL Transportan información entre los dispositivos conectados al bus. Antes de que Se establezca un intercambio de datos entre el circuito Máster y los Esclavos, El Máster debe informar el comienzo de la comunicación (condición de Start)
: la línea SDA cae a cero mientras SCL permanece En nivel alto. A partir de este momento comienza la transferencia de datos. Una Vez finalizada la comunicación se debe informar de esta situación (condición de Stop). La línea SDA pasa a nivel alto mientras SCL permanece en estado alto. Para Efectuar la transferencia de datos, el maestro genera la condición de Start. Cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra Transferida contiene la dirección del esclavo seleccionado. Luego el maestro Lee el estado de la línea SDA, si vale 0 (impuesto por el esclavo), el proceso De transferencia continúa. Si vale 1, indica que el circuito direccionado no Valida la comunicación, entonces, el maestro genera un bit de stop para liberar el bus I2C. Este acuse de recibo se Denomina ACK (acknowledge o reconocimiento) y es una parte importante del Protocolo I2C. Al final de la transmisión, el maestro genera la condición de Stop y libera el bus I2C, las líneas SDA y SCL pasan a estado alto.

6.- Indica la diferencia entre la gestión del bus I2C mediante el Método de “bitbang” y empleando la controladora del bus SSP del PIC18.
El método ‘bitbang’ implica el uso de los puertos de E/S para Generar las señales del bus I2C de modo que se debe actualizar el puerto para Sacar cada uno de los bits que forma toda la comunicación, incluyendo las Condiciones de ‘start’ y ‘stop’, el envío de la dirección del dispositivo, el Envío de los datos y el test del reconocimiento o ‘ack’ que envía el Dispositivo esclavo. Este proceso es tedioso y lento desde el punto de vista Del software. Por el contrario, el método que emplea la controladora del bus SSP del PIC18 dispone de un circuito secuencial que genera los trenes de pulsos De comunicación con el bus. La condición de start se genera activando un bit en Un registro de control en lugar de tener que sacar todos los bits que forman la Condición. El envío de la dirección se realiza también escribiendo la dirección En un registro de salida en lugar de sacar por el puerto de E/S la dirección un Bit tras otro en formato serie. El controlador se encarga de la temporización De los pulsos que envían los datos en formato serie por el bus I2C. También se Encarga de recoger el reconocimiento ‘ack’ del esclavo y copiarlo a un registro De estado para que el programa lo pueda leer y testear. Para realizar esta tarea existen dos registros de configuración que deben programarse previamente.

7.- Explica para que se usa y que significa la conexión de Dispositivos SPI en “daisy chain”


Método de conexión de periféricos en paralelo con un sistema microprocesador, en el que aquellos se combinan agrupándolos en Diversas ramas seriales, cada una de las cuales corresponde a un canal. Cada Canal requiere una sola interfaz con la unidad central. Su principal ventaja Reside en la facilidad de ampliación de las ramas en serie, y su principal Desventaja en que si el primer elemento de un canal se avería, deja fuera de Servicio a los demás

8.- Indica cómo se programaría el puerto I2C mediante un controlador De bus I2C similar al que integra el PIC. Pon un ejemplo de transacción.
Para manejar el puerto I2C mediante el controlador integrado Debemos programar los registros de control, estado y datos del controlador. Por Ejemplo, el controlador SSP del PIC dispone de los siguientes registros: Registros de control SSPCON1 y SSPCON2, registro de estado SSPSTAT, registro de Recepción/transmisión SSPBUF y registro de velocidad SSPADD. El registro SSPCON1 nos permite configurar el tipo de comunicación I2C, el tipo de señal de Reloj y control de errores en el bus para detectar colisiones y ‘overflow’. El Registro SSPCON2 se emplean los bits SEN, RSEN, PEN y ACKEN para generar Condiciones particulares en el bus I2C de forma automatizada, sin tener que Manipular directamente las señales del bus como sucedería en el caso de usar Métodos ‘bit-bang’. Hay un bit en el controlador, el bit ACKSTAT que nos Informa del estado del bit de reconocimiento que tiene que generar el esclavo De forma que podamos validar los datos que acabamos de enviar. El proceso para Enviar un dato por el bus I2C sería: Enviar condición de start. Poner a nivel Lógico 1 el bit SEN y esperar que el controlador esté listo. Enviar dirección Del dispositivo. Escribir en el registro de salida SSPBUF y esperar que el Controlador esté listo. Opcionalmente leer bit ACK y comprobar que el esclavo Responde. Enviar datos al dispositivo. Escribir en el registro de salida SSPBUF Y esperar que el controlador esté listo. Opcionalmente leer bit ACK y enviar Más datos. Finalmente enviar condición de stop. Poner a nivel lógico 1 el bit PEN y esperar que el controlador esté listo.

9.- Describe brevemente las carácterísticas del bus SPI, así como El proceso o cronograma necesario para realizar la comunicación.
Las principales carácterísticas son: El bus SPI es una interfaz de Comunicación serie síncrono maestro/esclavo. Necesita de 4 hilos (reloj, señal De datos de maestro a esclavo, señal de datos de esclavo a maestro y señal de Selección). El maestro genera la señal de reloj del bus, los datos se Transmiten y se reciben simultáneamente por dos hilos distintos, haciendo un Protocolo full-dúplex. A diferencia del bus I2C, los datos no tienen por qué Transmitirse en grupos de 8 bits, pueden tener cualquier longitud. Señales: SCLK: Para el reloj serie, que siempre se genera por el maestro MISO: Es la línea de Datos del esclavo al maestro MOSI: Es la línea de datos del maestro al esclavo En Una aplicación típica con un convertidor A/D por ejemplo, se conectaría la Señal SCLK del micro a la entrada SCLK del convertidor, conectamos la señal MISO a la patilla DOUT del convertidor y la MOSI a la entrada DIN del Convertidor Los protocolos serie como el SPI, necesitan una señal auxiliar de ‘chip-select’ para activar el periférico. Empleando esta señal de selección de Chip es posible conectar varios periféricos al mismo bus SPI en paralelo. Si Hay que emplear una señal chip-select (CS), puede generarse por una patilla Sobrante del microcontrolador. Cada periférico conectado al bus necesita su Propia señal CS.

1.- ¿Cómo funcionan los potenciómetros digitales? Enumera alguna De las aplicaciones en las que se emplean


Aunque Los potenciómetros digitales resultan muy útiles para controlar una variable Analógica como la ganancia de un circuito o el nivel de tensión con precisión y Sencillez tienen el inconveniente de que su ancho de banda es limitado, por lo Que no se pueden emplear para señal de gran ancho de banda, como audio y sobre Todo RF. Además, tienen también el grave inconveniente de que no admiten Tensiones mayores que la de su alimentación y no admiten tensiones negativas. Si se incumplen estas normas se obtendrá una señal recortada por los diodos de Protección de que disponen estos integrados CMOS.

2.- Enumera los pasos que hay que realizar para obtener una Conversión A/D con el convertidor integrado del PIC


Configuración del módulo A/D: Configurar los pines analógicos y Las referencias. Seleccionar el canal de entrada en ADCON0. Seleccionar el Tiempo de adquisición en ADCON2. Seleccionar la frecuencia de conversión en ADCON2. Conectar el módulo A/D en ADCON0. Configurar la interrupción de Conversión (Si se desea) Bajar la bandera ADIF Poner a 1 el bit de máscara Adíe. Poner a 1 el bit de interrupción global GIE. Esperar el tiempo de Adquisición programado (si es necesario). Comenzar la conversión: . Poner a 1 El bit GO de ADCON0. Esperar que acabe la conversión de dos formas: O bien Muestreando el bit GO/DONE hasta que valga cero O bien esperando el disparo de La interrupción. Leer el resultado de la conversión en los registros ADRESH: ADRESL. Bajar la bandera ADIF si se están usando las interrupciones. Para la Siguiente conversión activar de nuevo el bit GO y esperar. 


3.- Explica cómo se emplea un convertidor A/D Externo por bus I2C. ¿Qué hay que programar para emplearlo? ¿Se emplean todos Los dispositivos del mismo modo?
Lo primero que hay que hacer es configurar el Convertidor. Todos estos dispositivos disponen de una palabra de control que Debe programarse con el modo de funcionamiento y las opciones de conversión Previamente de comenzar a enviar o recibir datos. Los dispositivos suelen tener Dos modos de funcionamiento: Conversión continua: permite realizar conversiones De forma continua Conversión por disparo: Solo realiza la conversión cuando se Programa para ello y luego vuelve al estado de reposo. Para realizar una 

adquisición se efectúa una Escritura con la dirección del dispositivo en el bus I2C (1101000). Esto Provoca el comienzo de conversión. A continuación, se debe hacer ‘pooling’ Sobre el bit RDY hasta que se ha terminado la conversión. Entonces se realiza Una lectura de los registros que contienen el valor de la conversión.

4.- Multiplexores analógicos


Los Multiplexores analógicos son simples llaves de paso CMOS que permite realizar Todo tipo de circuitos analógicos bajo control digital empleando estas llaves De paso como simples interruptores controlados. Al igual que sucede con los Potenciómetros digitales, las llaves de paso al ser integrados CMOS disponen de Las entradas protegidas con diodos y eso impide el empleo de estas llaves de Paso o multiplexores con señales superiores al voltaje de alimentación e Inferiores a cero. Sin embargo, la tensión de alimentación de estos Dispositivos puede ser tan alta como 30 voltios y además los 405X disponen de La posibilidad de usar alimentación simétrica y señales de control compatibles TTL. De esta forma el margen dinámico puede ser tan amplio como +-15V.

1.- Indica las diferencias entre STR de tipo “hard” y de tipo “soft”


Los STR de tipo hard son Estrictos, es decir todas las acciones deben terminar dentro del plazo Especificado mientras que los de tipo soft son flexibles, es decir, se pueden Perder plazos de vez en cuando y el valor de respuesta decrece con el tiempo.

2.- ¿cuál es la definición de STR? Explícala


Un sistema operativo en tiempo real debe ser capaz de proporcionar Resultados correctos en los plazos de tiempo señalados. No implica Necesariamente que sea rápido, simplemente debe realizar sus tareas en el Tiempo señalado.

3.- Indica cómo se organizan las tareas en un programa mediante la Técnica de primer plano/trasfondo. Pon un ejemplo.
Para solucionar el problema de la falta de prioridades entre las Tareas en el programa de seguimiento de luz, sería posible convertir las tareas De alta prioridad en interrupciones. Estas interrupciones tomarán el control de La CPU tan pronto como sea necesario, sobre todo si sólo se utiliza una Interrupción. Es muy probable que las tareas en el bucle vengan disparadas por Tiempo, las cuales podrán utilizar la tasa de repetición del bucle como base de Tiempo. Las tareas dirigidas por interrupciones es probable que vengan Disparadas por eventos. Con esta estructura simple del programa hemos logrado Una tasa de repetición fiable para las tareas del bucle, y además hemos priorizado Las tareas que lo necesitan. Las tareas con mayor prioridad vienen dirigidas Por interrupciones en el primer plano (cuando tienen que ejecutarse), mientras Que las tareas de menor prioridad se ejecutan en el bucle de forma casi Continua en segundo plano.

4.- Indica cómo se estructura un programa basado en un RTOS. Pon Algún ejemplo


Debido a que Estamos preocupados por satisfacer las necesidades de tiempo real, hacemos uso De un tipo particular de sistema operativo que cumpla este requisito, el Sistema Operativo en Tiempo Real (RTOS). Un programa escrito para un RTOS está Estructurado mediante tareas, generalmente (pero no siempre) por orden de Prioridad, que son controladas por el sistema operativo. El RTOS realiza tres Funciones principales: Decide qué tarea debe realizar y durante cuánto Tiempo  Proporciona comunicación y Sincronización entre tareas  Controla la Utilización de los recursos compartidos entre las tareas, por ejemplo, la Memoria y los periféricos hardware.  Un RTOS en sí mismo es un programa de propósito general. Está adaptado para una Aplicación particular mediante la escritura de las tareas para ella y por la Personalización de la aplicación de varias maneras. Si bien podemos escribir Nuestro propio RTOS, realmente es una actividad especializada y, en general, Realizada por especialistas.

5.- Explica en que consiste la planificación Round-Robín y cuáles Son sus carencias


En la Planificación Round robín el sistema operativo se ejecuta mediante una Interrupción periódica (el tick de reloj). Las tareas son seleccionadas en un Orden fijo para su ejecución. En cada tick de reloj, la tarea actual se Suspende y se permite que la siguiente comience la ejecución. Todas las tareas Se consideran de igual importancia y esperan en secuencia a su trozo de tiempo De CPU.  A las tareas no se las permite Ejecutarse hasta el final, sino que son interrumpidas (preempted), es decir, su Ejecución se detiene en medio del proceso. Este es un ejemplo de un ‘planificador pre-emptivo’. Las implicaciones de esta conmutación de tareas ‘pre-emptivas’, y sus necesidades de recursos, no son despreciables y deben ser Tenidas en cuenta. Cuando se permite a la tarea ejecutarse de nuevo, debe ser Capaz de continuar el funcionamiento sin problemas, sin ningún efecto Secundario debido a la planificación. Por lo tanto, se debe guardar el contexto Completo (todas las banderas, registros y otras direcciones de memoria) cuando Se realiza la conmutación de la tarea. Sin embargo, los elementos del programa Que resultan críticos en cuanto a su temporización no deben ser interrumpidos, Y este requisito tendrá que ser escrito en el programa. 

6.- Explica en qué consiste la planificación preemptiva con Prioridades y sus ventajas


En el Planificador pee-emptivo con prioridad, a las tareas se les dan prioridades. Las tareas de alta prioridad ahora están autorizadas a terminar antes de Cualquier otra tarea de menor prioridad. El planificador todavía funciona Mediante un tick de reloj. En cada tick de reloj, comprueba qué tareas listas Tienen la más alta prioridad. Estas son las que consiguen el acceso a la CPU. Una Tarea que se encuentre en ejecución y que todavía necesite tiempo de CPU, y sea De alta prioridad, mantiene la CPU. Una tarea de baja prioridad que se está Ejecutando es sustituida por una de mayor prioridad, en caso de que está última Haya pasado al estado de “lista”. La tarea de alta prioridad se convierte en la Tarea que “se lleva el gato al agua”. En casi todos los casos, prosigue su Camino.  El diagrama muestra tres tareas, Cada una de diferentes prioridades y diferentes tiempos de ejecución. Al Principio, todas están listas para ejecutarse. La tarea 1, es seleccionada por El planificador para ejecución, ya que tiene la más alta prioridad. En la Siguiente tick de reloj, el planificador reconoce que la tarea 1 todavía debe Ejecutarse, por lo que se le permite que continúe. Lo mismo ocurre en el Siguiente tick de reloj y por fin se completa la tarea durante el siguiente Tramo. La tarea 1 no necesita ahora tiempo de CPU y pasa a estar suspendida. En El siguiente tick de reloj el planificador, por lo tanto, selecciona la tarea Que tiene la prioridad más alta, que ahora es la tarea 3. Esta también se Ejecuta hasta que se completa. Por último, la tarea 2 tiene la oportunidad de Ejecutarse. Por desgracia para ella durante su primer cuanto de tiempo la tarea 1 pasa al estado de lista de nuevo. En el siguiente tick de reloj, por lo Tanto, se selecciona la tarea 1 para ejecutarse de nuevo. Una vez más, se Permite su ejecución hasta su finalización. Cuando la tarea 2 está lista para Ejecución, y sólo cuando ninguna otra tarea está lista, la tarea 2 puede volver A entrar en ejecución y, finalmente se completa. A raíz de esto, durante una Porción de tiempo, no hay ninguna tarea activa y por eso no hay actividad de la CPU. La tarea 1 pasa a estar lista una vez más y comienza a ejecutarse de nuevo Hasta su terminación.

7.- Indica cómo se programan las tareas en un RTOS y que proceso Se sigue para estructurar el programa


Las Tareas deben escribirse como si se ejecutaran continuamente, como programas Semiautónomos y auto contenidos, a pesar de que pueden ser interrumpidos por el Planificador. No pueden llamar a una sección de código de otra tarea, pero Pueden tener acceso a código común, por ejemplo, a las librerías de C. Las Tareas pueden depender de los servicios prestados por otras tareas y puede ser Necesario sincronizarlas con otras tareas. En todos los casos menos en el más Simple, el RTOS permite al programador establecer prioridades. En el caso de Tener prioridad estática, las prioridades son fijas. En el caso de prioridades Dinámicas, las prioridades se pueden cambiar a medida que el programa se Ejecuta. Una forma de ver las prioridades es considerar como de importante es Una tarea para el funcionamiento y buen comportamiento del sistema, su usuario Y el entorno.  Las prioridades pueden Entonces asignarse:  Máxima prioridad: Las tareas esenciales para la supervivencia del sistema.  Media prioridad: las tareas esenciales para La correcta operación del sistema.  Baja Prioridad: las tareas necesarias para la adecuada operación del sistema. Estas Tareas pueden ser de vez en cuando descartadas o bien un retraso en su Conclusión podría ser aceptable.

8.- Explica el concepto de inversión de prioridades en un RTOS y Cuando se produce


Mediante el Uso de un semáforo, una tarea de prioridad baja puede darle la vuelta a los Papeles y convertirse en la de más prioridad. Si una tarea de baja prioridad Establece un semáforo para un recurso que necesita la tarea de alta prioridad, La tarea de baja prioridad puede dejar bloqueada a la de alta prioridad.

9.- En el contexto de un STR ¿Qué es un tick de reloj? Explica Para que se emplea


El tick de Reloj es básicamente una interrupción en un sistema empotrado que ejecuta el Planificador de tareas de un sistema de tiempo real. De esta forma se puede Periódicamente cambiar de tarea. Esto lo realiza el planificador que en cada ‘cuanto de tiempo’ marcado por el tick de reloj evalúa la tarea que está lista Para ejecutar en función de la prioridad de la tarea y de la evolución de las Demás tareas en el sistema.

10.- Explica para que se utilizan los semáforos en los STR


En un STR, varias tareas pueden necesitar acceder al mismo recurso Compartido, Este podría ser hardware (incluyendo memoria o periférico) o un Módulo de software común. Esto requiere cierta atención. Un método para tratar Esto es el semáforo. Se asigna un semáforo a cada recurso compartido, el cual Se utiliza para indicar si está en uso. En un semáforo binario, la primera Tarea que necesita usar el recurso se encuentra el semáforo en un estado VERDE Y cambiará el estado a ROJO antes de comenzar a utilizar el recurso. Cualquier Otra tarea que necesite utilizar el mismo recurso pasará al estado de Bloqueada. Cuando la primera tarea ha completado el acceso al recurso, cambia El semáforo de nuevo a VERDE. Esto lleva al concepto de exclusión mutua, cuando Una tarea está accediendo al recurso, todas las demás están excluidas. El Semáforo contador es empleado para un conjunto de recursos idénticos, por Ejemplo, un grupo de impresoras. Ahora, el semáforo está inicialmente puesto al Número de unidades del recurso. A medida que cada tarea utiliza una de las Unidades, se produce un decremento del semáforo en una unidad, incrementando de Nuevo al final de su uso. Por lo tanto, el semáforo contador contiene el número De unidades que están disponibles para su uso. El poner un semáforo en ROJO Provoca como efecto que otra tarea acabe bloqueada, los semáforos pueden Utilizarse como un medio de proporcionar sincronización en el tiempo y Señalización entre las distintas tareas. Una tarea puede bloquear a otra Mediante el establecimiento de un semáforo y se puede liberar en un momento de Su elección en la puesta a cero del semáforo. Mediante el uso de un semáforo, Una tarea de prioridad baja puede darle la vuelta a los papeles y convertirse En la de más alta prioridad. Si una tarea de baja prioridad establece un Semáforo para un recurso que necesita la tarea de alta prioridad, la tarea de Baja prioridad puede dejar bloqueada a la de alta prioridad. Esto lleva a una Peligrosa condición conocida como inversión de prioridades.

11.- Explica el funcionamiento del planificador en un STR y cuáles Son los tipos de planificadores más usados


Una Parte central del RTOS es el planificador. Este determina a que tarea se le Permite ejecutarse en un determinado momento. Entre otras cosas, el Planificador debe ser consciente de qué tareas están listas para ejecutarse y Sus prioridades (si las tuvieran). Los tipos de planificadores más usados son: -Planificación Cíclica -Planificación Round Robín – Planificación pre-emptiva con prioridades. -Planificación Cooperativa.