Documentos de Académico
Documentos de Profesional
Documentos de Cultura
APELLIDOS NOMBRE
DNI ESPECIALIDAD
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.
- 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.
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*/1000m/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:
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).
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-