• No se han encontrado resultados

Examen 23 de Febrero de 2007

N/A
N/A
Protected

Academic year: 2021

Share "Examen 23 de Febrero de 2007"

Copied!
11
0
0

Texto completo

(1)

Examen – 23 de Febrero de 2007

Instrucciones

Indique su nombre completo y número de cédula en cada hoja.

Numere todas las hojas e indique la cantidad total de hojas que entrega en la primera.

Escriba las hojas de un solo lado.

Empiece cada ejercicio en una hoja nueva.

Sólo se contestarán dudas de letra. No se aceptarán dudas los últimos 30 minutos del examen.

Duración: 3 horas.

Requisito para Aprobación: 1 problema y medio correctamente resueltos

Problema 1

Se desea implementar las rutinas necesarias para controlar un equipo dedicado únicamente a dispensar agua para sanitarios (como los instalados en algunos baños de facultad).

Dichos equipos disponen de un sensor de proximidad y una llave de paso de agua (controlada

electrónicamente). El estado de estos dispositivos se encuentra mapeado en los 2 bits de bajo orden de un puerto de escritura y lectura de 8 bits, ubicado en la dirección CONTROLADOR ( bit1-sensor proximidad, bit0-llave de agua, el bit0 es el menos significativo, 0 significa que no se está sensando y que la llave no va a dejar pasar agua respectivamente).

Además el dispositivo tiene un sensor que detecta un próximo desbordamiento del agua que genera una interrupción que invoca a la rutina desbordamiento(). También dispone de un timer con frecuencia de 5Hz el cual interrumpe invocando a la rutina tiempo().

Se debe monitorear el sensor de proximidad de forma que cuando se detecte un usuario del sanitario más de 4 segundos consecutivos, se active una espera que aguarde que el usuario se retire y luego de pasados 8 segundos adicionales (luego que se dejó de detectar), se debe habilitar el paso del agua mediante la llave controlada electrónicamente. El agua debe correr durante 15 segundos y luego se debe detener el flujo. Durante el tiempo que la llave de agua esté abierta se deberá controlar la posibilidad de desbordamiento, de forma que si se detecta desbordamiento se cierre la llave durante 6 segundos y luego se vuelve a abrir (si aún no terminaron los 15 segundos).

También se debe tener en cuenta el sensor de proximidad de forma que si un usuario se acercara cuando la llave de agua esta abierta, esta debe ser cerrada inmediatamente. Si el usuario se retira antes de los 4 segundos, la llave se abre nuevamente y continúa la cuenta desde que se detecto la proximidad del usuario hasta los 15 segundos, en caso de que el usuario se retire después de los 4 segundos se comenzará

nuevamente de cero, como que no hubiera existido el sensado anterior. También se debe proceder de forma similar cuando se detecte proximidad dentro de los 8 segundos antes de abrir la llave, en este caso si el usuario esta menos de 4 segundos se deberá reanudar la espera de 8 segundos, sino se comenzará también de cero. Se debe tratar de reaccionar al sensor de proximidad lo más rápidamente posible.

Cuando se halla detectado desbordamiento no se le deberá prestar atención al sensor de proximidad.

Se pide:

Implementar en un lenguaje de alto nivel todas las rutinas necesarias para implementar el dispositivo descrito en base a un procesador dedicado.

(2)
(3)

// ( 5Hz, 5 veces por segundo ) #define CUATRO_SEG 5*4 #define SEIS_SEG 5*6 #define OCHO_SEG 5*8 #define QUINCE_SEG 5*15

enum ESTADOS { INICIO, ESP4s, DETECTO, ESP8s, ESP4sDETECTO, AGUA_PRENDIDA, ESP6s, AGUA_PRENDIDA_ESP4s };

ESTADOS estado; int tics, tics2; void timer(){

if ( estado == ESP6s ){

tics2 ++;

tics1 ++;

} else if ( estado != INCIO && estado != DETECTO )

tics ++;

}

void desbordamiento(){

if ( estado == AGUA_PRENDIDA ){

estado = ESP6s;

//apago el agua, ~ es la negación bit a bit

OUT (CONTROLADOR, IN(CONTROLADOR) & ~1 );

tics2 = 0; } } void main(){ estado = INICIO; tics = 0; tics2 = 0;

OUT (CONTROLADOR, IN(CONTROLADOR) & ~1 ); // instalar interrupciones // hablilitar interrupciones switch ( estado ){ case INICIO: if ( IN (CONTROLADOR) & 2 == 2 ){ estado = ESP4s; tics = 0; } break; case ESP4s: if ( IN (CONTROLADOR) & 2 == 0 ){ estado = INICIO;

} else if ( tics >= CUATRO_SEG ){ estado = DETECTO; } break; case DETECTO: if ( IN (CONTROLADOR) & 2 == 0 ){ estado = ESP8s; tics = 0;

(4)

} break; case ESP8s: if ( IN (CONTROLADOR) & 2 == 2 ){ estado = ESP4sDETECTO; tics = 0;

} else if ( tics >= OCHO_SEG ){ estado = AGUA_PRENDIDA; tics = 0;

OUT( CONTROLADOR, IN ( CONTROLADOR ) | 1); } break; case ESP4sDETECTO: if ( IN (CONTROLADOR) & 2 == 0 ){ estado = ESP8s; tics = 0;

} else if ( tics >= CUATRO_SEG ){ estado = DETECTO; } break; case AGUA_PRENDIDA: if ( IN (CONTROLADOR) & 2 == 2 ){ estado = AGUA_PRENDIDA_ESP4s ; tics = 0;

OUT( CONTROLADOR, IN ( CONTROLADOR ) & ~1); } else if ( tics >= QUINCE_SEG ){

estado = INICIO;

OUT( CONTROLADOR, IN ( CONTROLADOR ) & ~1); } break; case AGUA_PRENDIDA_ESP4s: if ( IN (CONTROLADOR) & 2 == 0 ){ estado = AGUA_PRENDIDA; tics = 0;

OUT( CONTROLADOR, IN ( CONTROLADOR ) | 1); } else if ( tics >= CUATRO_SEG ){

estado = DETECTO; } break; case DESBORDAMIENTO: if ( tics2 >= SEIS_SEG ){ if ( tics1 >= QUINCE_SEG ){ estado = INICIO; } else { estado = AGUA_PRENDIDA;

OUT( CONTROLADOR, IN ( CONTROLADOR ) | 1); }

} } }

(5)

Problema 2

Se desea construir un circuito para operar una maquina dispensadora de chicles. La misma permite recibir monedas de $1 y $2 hasta acumular exactamente $3, momento en el cual se enciende la salida que entrega el chicle al usuario y el sistema vuelve a esperar el ingreso de nuevas monedas.

En caso de que el usuario coloque monedas por un monto mayor a $3, la maquina deberá pasar a un estado de Error del cual solo se puede salir presionando el botón de Cancelar. Cuando se presiona el botón de Cancelar el circuito debe encender la salida Devolución, para quedar a la espera del ingreso de nuevas monedas.

La maquina dispensadora tiene una entrada E de 2 bits codificada de la siguiente manera:

00: no se ha insertado moneda ni se ha apretado el botón Cancelar

01: se ha insertado una moneda de $1

10: se ha insertado una moneda de $2

11: se ha apretado el botón de Cancelar

Asimismo se dispone de 2 salidas (Chicle,Devolución) que se detallan a continuación:

Chicle que se activa cuando el sistema debe entregar el chicle.

Devolución que se activa cuando se presiona el botón de Cancelar. Consideraciones:

• Al presionar el botón Cancelar se devuelven todas las monedas que el usuario haya ingresado desde la ultima vez que se habia apretado Cancelar o se haya entregado un chicle.

Se pide diseñar un circuito en base a Flip-Flops JK y compuertas lógicas, utilizando la metodología de máquinas de estado vista en el curso.

(6)

Solución:

Primero realizamos la maquina de estados que modela el sistema:

Para la misma vamos a considerar como como entradas X de 2 bits y como salidas CD, donde C es la salida Chicle y D la salida Devolución

$1

$0

$2

err

00/00 11/01 11/01 11/01 01/10 00/00 00/00 0X/00 10/00 11/01 10/00 10/00 10/10 01/00 01/00

Ahora escribimos la funcion de transición. Para ello vamos a considerar la siguiente codificacion de estados:

$0 00 $1 01 $2 10 err 11

Estado Actual Entradas Prox. Estado Chicle Devolucion

00 00 00 0 0 00 01 01 0 0 00 10 10 0 0 00 11 00 0 1 01 00 01 0 0 01 01 10 0 0 01 10 00 1 0 01 11 00 0 1 10 00 10 0 0 10 01 00 1 0 10 10 11 0 0 10 11 00 0 1 11 00 11 0 0 11 01 11 0 0 11 10 11 0 0 11 11 00 0 1

(7)

Ahora escribimos la tabla de transición para flip flops JK: Estados X=00 X=01 X=10 X=11 Q1Q0 J1K1 J0K0 J1K1 J0K0 J1K1 J0K0 J1K1 J0K0 00 0X 0X 0X 1X 1X 0X 0X 0X 01 0X X0 1X X1 0X X1 0X X1 10 X0 0X X1 1X X0 1X X1 0X 11 X0 X0 X0 X0 X0 X0 X1 X1

Realizamos los Karnaugh asociados:

Q1Q0\X1X0 00 01 11 10 Q1Q0\X1X0 00 01 11 10 00 0 0 0 1 01 0 1 0 0 11 X X X X 10 X X X X 00 X X X X 01 X X X X 11 0 0 1 0 10 0 1 1 0 J1 = Q0.!X1.X0 + !Q0.X1.!X0 K1 = !Q0.X0 + X1.X0 Q1Q0\X1X0 00 01 11 10 00 X X X X 01 0 1 1 1 11 0 0 1 0 10 X X X X Q1Q0\X1X0 00 01 11 10 00 0 1 0 0 01 X X X X 11 X X X X 10 0 0 0 1 J0 = !Q1.!X1.X0 + Q1.X1.!X0 K0 = !Q1.X0 + !Q1.X1 + X1.X0 Q1Q0\X1X0 00 01 11 10 00 0 0 0 0 01 0 0 0 1 11 0 0 0 0 10 0 1 0 0 Q1Q0\X1X0 00 01 11 10 00 0 0 1 0 01 0 0 1 0 11 0 0 1 0 10 0 0 1 0 Chicle= Q1.!Q0.!X1.X0 + !Q1.Q0.X1.!X0 Devolucion= X1.X0

(8)
(9)

Problema 3

Se desea construir un conversor de números enteros con signo de ocho bits utilizando para esto una ROM. Las conversiones necesarias entre las diferentes representaciones son las siguientes:

• De Valor Entero y Signo a Complemento a 1.

• De Complemento a 1 a Valor Entero y Signo.

• De Desplazamiento a Complemento a 2.

• De Complemento a 2 a Desplazamiento.

El conversor tendrá como entrada el número a convertir y un selector de que conversión se quiere realizar y como salida el resultado de ocho bits calculado. Considere el desplazamiento de 2N-1.

El selector de conversión de 2 bits se codificada de la siguiente manera:

00: de Valor Entero y Signo a Complemento a 1.

01: de Complemento a 1 a Valor Entero y Signo.

10: de Desplazamiento a Complemento a 2.

11: de Complemento a 2 a Desplazamiento. Para ello se dispone de las siguientes ROM:

• 1 ROM de 256 x 16

• 1 ROM de 1K x 2

• 1 ROM de 512 x 4

Se pide:

a) Especificar el tamaño y la organización de la ROM necesaria para implementar dicho conversor. Construirla utilizando todas las ROMs disponibles.

(10)

Solución:

a)

La ROM a construir necesita 10 entradas (8 para el número a convertir y 2 para el selector) y 8 salidas para el resultado de la conversión Î 1K x 8.

1. 1 ROM de 256 x 16 Î 1K x 4.

(11)

3. De la ROM de 1K x 2, de 2 y 1 armo ROM Î 1K x 8.

b)

void cargarROM() {

int i, result, selector, entrada, bit7; for (i=0; i<2^10; i++) {

entrada = i & 0x0FF; selector = i & 0x300; selector >>= 8;

bit7 = entrada & 0x80;

if (selector < 2) { // selector es 00 ó es 01 if (bit7 == 0x80) // el número es negativo.

result = ((~entrada) | 0x80); else // el número es positivo

result = entrada; }

else { // selector es 10 ó es 11 if (bit7 == 0x80)

result = (entrada & 0x7F); else result = (entrada | 0x80); } ROM[i] = result; } }

Referencias

Documento similar

La Normativa de evaluación del rendimiento académico de los estudiantes y de revisión de calificaciones de la Universidad de Santiago de Compostela, aprobada por el Pleno or-

- Fase Visual: Color rojo cereza. Puede presentar un pequeño precipitado de sales tartáricas o de polifenoles polimerizados. - Fase Olfativa: Aroma limpio y complejo, donde destaca

Debido a la calidad y el legado de nuestra compañía, los cuales se reflejan en nuestros pianos, elegir un instrumento hecho por Steinway &amp; Sons tiende a ser una decisión

Pero cuando vio a Mar sacar el fuego de bajo su ala, voló de vuelta a su tribu a contarles lo que había visto.... Justo antes de que el sol saliera, Tatkanna se despertó y comenzó

- Un curso formativo para los técnicos de laboratorio de la UPV sobre la prevención de los residuos en los laboratorios, que se llevará a cabo los días 23, 24, 25, 26 y 27

Gastos derivados de la recaudación de los derechos económicos de la entidad local o de sus organis- mos autónomos cuando aquélla se efectúe por otras enti- dades locales o

El tercero tiene notas bajas pero la mayor es estadística, una de las temáticas trabajadas de forma más mecánica, asimismo el último arquetipo muestra que, aun con notas buenas,

¿Cómo se traduce la incorporación de ésta en la idea de museo?; ¿Es útil un museo si no puede concebirse como un proyecto cultural colectivo?; ¿Cómo puede ayudar el procomún