Está en la página 1de 5

UNIVERSIDAD DE MÁLAGA INGENIERÍA DE TELECOMUNICACIÓN

DPTO. DE TECNOLOGÍA ELECTRÓNICA 17 DE DICIEMBRE DE 2008


EXAMEN DE SISTEMAS DIGITALES TIEMPO: 2 HORAS y 30 MINUTOS

APELLIDOS NOMBRE
DNI ESPECIALIDAD

LEA ATENTAMENTE EL ENUNCIADO DEL EXAMEN Y LAS PREGUNTAS. RESPONDA


JUSTIFICADAMENTE LAS PREGUNTAS EN EL ESPACIO RESERVADO PARA ELLO.

Se desea diseñar una aplicación digital de control de caudal de agua en un depósito, para evitar que ésta lo
desborde. La aplicación consta de un sensor-flotador que genera un tren de pulsos (N pulsos/seg.) proporcional
a la velocidad o caudal del agua (V) que atraviesa una tubería, V=N*α m/s, (α=1/1000 m/pulsos). Dicha
información llega a un sistema basado en el MSP430F169 el cual genera, en respuesta, un tren de pulsos
dirigido a un servo de control de una válvula. El servo actúa sobre la válvula de forma que su ángulo de
apertura sea proporcional al ciclo de trabajo de los pulsos que llegan al servo. El sistema dispone, además, de
un pulsador de emergencia, y de 2 LEDs indicadores de varias condiciones de trabajo del sistema.

A continuación se muestra el código principal de la aplicación, y la definición de variables y


vectores de Interrupción:

#include "msp430x16x.h" ; Definición de ; ----------------------------------------------------------------


etiquetas ; DEFINICIÓN DE VARIABLES
; ---------------------------------------------------------------- ; ----------------------------------------------------------------
; PROGRAMA PRINCIPAL ORG 09ECh
; ---------------------------------------------------------------- cantidad DS16 1
ORG 1500h Tabla1 DC16 01770h, 03A98h, 07530h, 0EA60h
main mov #XXXXh,SP Tabla2 DC16 01Fh, 03Fh, 07Fh, 0FFh
mov #WDTPW+WDTHOLD, &WDTCTL ; seg_cnt DC16 128
; Inicialización modos de funcionamiento y ; ------------------------------------------------------------------
periféricos. ; VECTORES DE INTERRUPCIÓN
call #conf_puertos ; ------------------------------------------------------------------
call #conf_TimerA ORG 0FFE0h+RESET_VECTOR
; Inicializa variables DW main
clr cantidad ORG 0FFE0h+PORT1_VECTOR
; Modo de espera a interrupción en bajo DW Port1_RTI
consumo ORG 0FFE0h+TIMERA0_VECTOR
espera bis #ZZZZZ,SR DW TimerA0_RTI
nop ORG 0FFE0h+TIMERA1_VECTOR
DW TimerA1_RTI

- 1 / 5-
1. Elija un valor para la dirección de la base de la pila (main mov #XXXXh,SP) y justifique el porqué
de esa elección. (0.5p)

Valdría cualquier dirección de RAM por debajo de 09ECh, ya que a partir de dicha dirección están colocadas
las variables. Recordemos que la pila crece hacia direcciones más bajas, mientras que las variables se
colocarían desde 09ECh (incluida) hacia A000h.

2. Configure los pines de los puertos E/S necesarios para las conexiones indicadas en la figura
anterior. Considere que los LEDs están apagados al inicio, y que el pulsador actúa por interrupción.
No olvide configurar las interrupciones necesarias de los puertos E/S, ni las funciones especiales
CCI1A y OUT2 en los pines correspondientes. Justifique cada decisión. (1.5p)
conf_puertos ; : prepara bits de los puertos (P1) para su funcionamiento
; ------------------------------------------------------------------------------
bic.b #BIT2+BIT1,&P1DIR ; Entradas CCI1A(P1.2) y boton en P1.1
bis.b #BIT5+BIT4+BIT3,&P1DIR ; Salidas LEDS y OUT2(P1.3)
bis.b #BIT3+BIT2,&P1SEL ; Función especial CCI1A y OUT2
bic.b #BIT1,&P1IES ; Flanco de subida para botón
bis.b #BIT1,&P1IE ; Habilita permiso int botón
mov.b #00,&P1IFG ; Borra FLAGS (por si acaso)
bis.b #BIT5+BIT4,&P1OUT ; Apagar LEDS (conectados con pull-up)
ret ; Vuelve al programa principal

3. A continuación se presenta parte de la rutina de configuración del TimerA y sus bloques asociados
CCR0, CCR1, y CCR2:

conf_TimerA
mov #TASSEL_1+ID_0+MC_1+TACLR,&TACTL
mov #CCIE,&TACCTL0
mov #0FFh,&TACCR0
mov #CM_X+CCIS_Y+CAP+CCIE,&TACCTL1
mov #OUTMOD_7,&TACCTL2;
mov #0FFh,&TACCR2
ret

3.a Indique cómo está configurado el TimerA, y cuál es su periodo de cuenta. Asuma que, tras
el Reset del sistema, el DCO oscila a 800KHz, y LFXT1CLK a 32768Hz. (0.5p).
Está configurado en modo UP hasta CCR0, con la señal de reloj procedente de la fuente de reloj
LFXT1= ACLK dividida por 1. El intervalo de cuenta es de (0xFF+1)*1/32768= 7,8125ms. El bloque 0
está configurado en modo comparación sin salida, con interrupción habilitada; el bloque 1 en modo
captura con interrupción habilitada; el bloque 2 en modo comparación con modo de salida 7
Reset/Set.

3.b Indique en qué modo de trabajo está funcionando cada uno de los bloques CCR0, CCR1, y
CCR2 (0.25p)
El bloque 0 está en modo comparación sin salida, con interrupción habilida.
El bloque 1 en modo captura con interrupción habilitada.
El bloque 2 en modo comparación con salida Reset/Set y sin interrupción habilitada.

3.c ¿Qué debes poner en lugar de ‘CM_X’ y ‘CCIS_Y’ para que la configuración sea
coherente con el diagrama de bloques del sistema? (0.25p)

CCIS_Y debe ser CCIS_0, ya que, según el diagrama, el pin de captura es CCI1_A.
CM_X puede ser CM_1ó CM_2, para que la captura sea en flanco de subida ó el flanco de bajada.

- 2 / 5-
4. Indique los modos de bajo consumo que se pueden utilizar en el diseño y bajo qué circunstancias
es más conveniente cada uno de ellos. Línea del programa principal: espera bis #ZZZZZ,SR(0.5p)

Como se está utilizando el reloj ACLK para el temporizador A y permitiendo la interrupción de los
registros CCR0 y CCR1, los modos que mejor consumo obtienen son los modos LPM3 y LPM2.
LPM2 será la opción elegida si lo que se quiere es un arranque más rápido al apagar el generador
DC, mientras que el modo LPM3 será la opción en caso de querer menor consumo.

5. La rutina de atención a la interrupción 1 del TimerA (TIMERA1) se ocupa de contar los pulsos
que le van llegando por CCI1A, usando para ello la variable cantidad. Escribe las instrucciones
necesarias para que dicha rutina funcione de la forma descrita (0.5p)
TimerA1_RTI ; Avisa de la llegada de un nuevo pulso: valor TACCR1 no se usa
inc cantidad ; Incrementa acumulador al llegar nuevo pulso.
bic #CCIFG,&TACCTL1 ; Baja el FLAG TACCR1 CCIFG
reti

6. Cuando el temporizador A llega a su cuenta límite, genera una interrupción que ejecuta la rutina
TimerA0_RTI, que podemos ver a continuación. Conteste las preguntas justificando sus respuestas.

TimerA0_RTI dec seg_cnt


jnz fin_TIMERA0_RTI
mov #128,seg_cnt
mov cantidad,R4
clr cantidad
mov #Tabla1,R5
mov #Tabla2,R6
decd R6
busca_val cmp #Tabla2,R5
jeq alarma
incd R6
cmp @R5+,R4
jhs busca_val
bis.b #BIT5,&P1OUT
jmp actualiza
alarma xor.b #BIT5,&P1OUT
actualiza mov @R6,&TACCR2
fin_TIMERA0_RTI reti

6.a ¿Cada cuanto tiempo se actualiza el valor de apertura de la válvula de la tubería? (1p).
La actualización se realiza en la instrucción marcada como “actualiza”, ya que es aquí donde se
modifica el valor de TACCR2. Para llegar a esa zona de código es necesario que se genere una
interrupción de TIMERA0 y que seg_cnt llegue a 0; como seg_cnt se decrementa en cada interrupción
de TIMERA0 y se carga inicialmente a 128, la actualización se producirá cada 7,8125ms*128=1 seg.

6.b ¿Qué diferentes ángulos de apertura, en grados, puede tomar la tubería? Recuerde que los
ángulos de apertura son proporcionales al ciclo de trabajo de los pulsos en OUT2 (1p).

Para conocer los distintos ángulos de apertura, debemos saber que ciclos de trabajo se pueden
obtener en el tren de pulsos que le enviamos a través de OUT2 a la tubería. Estos valores se leen de
Tabla2 (los sabemos porque la instrucción “actualiza” utiliza R6 en modo indirecto, y R6 es
inicializado a la dirección de Tabla2 Æ mov #Tabla2,R6 . Y luego incrementado Word a Word en
el bucle “busca_val”. En Tabla 2 tenemos los valores : 01Fh, 03Fh, 07Fh, 0FFh, que, con respecto al
valor máximo de cuenta del TIMERA, que es el valor del CCR0, son: 01Fh/0FFhÆ 12,5%, :
03Fh/0FFhÆ 25%,: 07Fh/0FFhÆ 50% y: 0FFh/0FFhÆ 100%.
Por tanto los ángulos, de apertura serán, con respecto a 180º, que es el máximo, 22,5º, 45º, 90º, y
180º.

- 3 / 5-
6.c ¿A qué velocidad o intervalos de velocidades del agua se corresponden los ángulos
anteriores? (1p)

La lectura de uno u otro ciclo de trabajo en Tabla2, depende del nº de veces que se recorra el bucle
“buscaval”. Para salir de dicho bucle, es necesario que el valor contenido en R4 (cantidad) sea inferior
al leído en memoria de Tabla1 (lo sabemos porque R5 se carga con la dirección de Tabla1), o que se
acabe de recorrer Tabla1 al completo (cmp #Tabla2,R5). Por tanto, los límites de los intervalos
están en Tabla1, en tamaño Word, y son 01770h, 03A98h, 07530h, 0EA60h, correspondientes a
6000, 15000, 30000, y 60000 pulsos. Aplicando la fórmula V=N*/1000m/s, nos quedan intervalos de
[0-6m/s), [6, 15m/s), [15-30)m/s y [30m/s,60m/s) que se corresponden, respectivamente con los
intervalos de apertura indicados antes de 10º, 45º, 90º, y 180º.

6.d ¿Cuál es el caudal máximo que sería capaz de medir teóricamente el sistema? (0.5p)
El caudal máximo teórico viene determinado por el número máximo de pulsos que se pueden
acumular en la variable “cantidad”. Como dicha variable es tipo WORD, podría contar hasta 65535
pulsos, es decir, un caudal de 65,535 m/s. Una velocidad mayor daría un error de medición del
sistema.

6.e ¿Bajo qué condiciones se ejecuta la instrucción etiquetada por alarma? ¿Cómo se
representa esa situación de alarma en el sistema? (0.5p)
Cuando el valor almacenado en “cantidad” supera al último valor en “Tabla1”. En este caso, al ser el
último valor 0EA60h, que corresponde con la velocidad 60m/s, tenemos un margen que va desde los
60m/s hasta la velocidad máxima limitada por el tamaño de la variable cantidad 65,535m/s.

La situación de alarma se representa mediante el parpadeo del LED conectado al P1.5, cada
segundo, mientras dure la situación de alarma.

7. Al apretar el pulsador1 se produce una interrupción por el puerto 1, y se ejecuta la rutina Port1_RTI,
asociada a un modo de mantenimiento del sistema, que podemos ver a continuación:

Port1_RTI ; Detección pulsación del botón: entrada en modo mantenimiento


bit.b #BIT4,&P1OUT
jnz entrada_modo
salida_modo mov #~(LPM4),0(SP) ; ~LPM4=Modo Activo
mov #main,2(SP)
mov.b #00h,&P1IFG
reti
entrada_modo bic.b #BIT4,&P1OUT
mov #OUTMOD_0,&TACCTL2
bic #CCIE,&TACCTL1
mov #LPM4+GIE,0(SP)
bic.b #BIT1,&P1IFG
reti

7.a ¿Qué efectos tiene en el sistema la entrada en el modo de mantenimiento? Intente


proporcionar la mayor información posible. (0.5p)
- Enciende el LED conectado a P1.4
- Cierra la válvula pues por la salida OUT2 saca un 0..
- Inhibe la captura de nuevos pulsos, por lo que deja de medir el flujo de agua.
- Inhibe la actualización cada segundo mediante TIMERA0, al entrar en el modo LPM4 de bajo
consumo.

1
Considere que el pulsador no sufre de efecto rebote.

- 4 / 5-
7.b ¿Cómo se sale de ese modo? ¿Qué le ocurre al sistema tras producirse dicha salida del
modo de mantenimiento? (0.5p)

La única forma es volver a pulsar el botón de mantenimiento, ya que solo están habilitadas las
interrupciones que no dependen de relojes internos en el modo LPM4.
El sistema vuelve a su estado inicial (pasa a ejecutar la instrucción “main” y al modo activo, tras volver
de la RTI).

8. Indique, de forma justificada, si la batería cuyas especificaciones aparecen en la tabla 1 podría


alimentar al sistema durante al menos un año, teniendo en cuenta las siguientes consideraciones (1p):
™ El consumo de cada uno de los LEDs es de 3mA.
™ El sensor flotador y el servo que actúa sobre la válvula se alimenta de manera externa, a
través de la red eléctrica.
™ El consumo de corriente de la conexión entre el microcontrolador y el servo se considera
despreciable.

Tabla 1. Especificaciones de la batería propuesta para el diseño.

No se puede garantizar que el sistema esté alimentado con esta batería al menos un año, ya que el
pico de corriente que la batería es capaz de suministrar es de 1,5mA y si se produce la alarma o la
entrada en modo mantenimiento los LED solicitan de la batería 3mA, pudiendo llegar a descargarla.

- 5 / 5-

También podría gustarte