22.07.2014 Views

to get the file - OCW UPM

to get the file - OCW UPM

to get the file - OCW UPM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

SISTEMAS<br />

DIGITALES II<br />

EJERCICIOS TEMA 3<br />

Departamen<strong>to</strong> de Sistemas Electrónicos y de Control<br />

2005-2006<br />

1


EJERCICIOS TEMA 3<br />

DE SISTEMAS DIGITALES II<br />

EJERCICIO 1)<br />

NOTA: Se supone que la frecuencia del reloj del sistema es de 11MHz<br />

a) Emplear el Timer 2 para generar una onda cuadrada de frecuencia 1Hz y con un<br />

50% de ciclo de trabajo.<br />

b) En caso de que se realice alguna aproximación indicar la frecuencia exacta que se<br />

genera.<br />

c) Calcular la frecuencia máxima y mínima que se podría generar.<br />

EJERCICIO 2)<br />

NOTA: Se supone que la frecuencia del reloj del sistema es de 11MHz<br />

a) Calcular el rango en el que se pueden generar interrupciones periódicas empleando<br />

el overflow del Timer 2<br />

b) Realizar la programación del Timer para generar una interrupción cada milisegundo.<br />

EJERCICIO 3)<br />

NOTA: Se supone que la frecuencia del reloj del sistema es de 11MHz.<br />

a) Realizar la programación del Timer para generar a través de algún pin del<br />

microcontrolador una señal periódica de 1KHz y un ciclo de trabajo del 20%.<br />

b) Indique los elemen<strong>to</strong>s que condicionarían el cálculo del periodo mínimo<br />

c) Indique los elemen<strong>to</strong>s que condicionarían el cálculo del ciclo de trabajo máximo<br />

EJERCICIO 4)<br />

NOTA: Se supone que la frecuencia del reloj del sistema es de 11MHz.<br />

a) Calcule la duración de un pulso externo del que no se conoce a priori su rango<br />

de variación.<br />

b) Indique los elemen<strong>to</strong>s que condicionarían el cálculo de la anchura mínima y de<br />

la distancia mínima entre pulsos.<br />

3


EJERCICIO 5)<br />

El diagrama de bloques de la figura muestra un teclado hexadecimal que se ha<br />

conectado al puer<strong>to</strong> 1 de un sistema basado en el microcontrolador 80c552 funcionando<br />

a una frecuencia de 12 Mhz. El teclado está dispues<strong>to</strong> en forma de matriz de modo que<br />

con 2N líneas digitales pueden leerse N 2 teclas, siendo N el tamaño del lado de la matriz<br />

(N=4 en este caso). El funcionamien<strong>to</strong> de dicho teclado es el siguiente:<br />

- Las columnas de la matriz del teclado están conectadas a las líneas P1[0..3] del<br />

puer<strong>to</strong> 1 configuradas como salidas.<br />

- Las filas de la matriz del teclado están conectadas a las líneas P1[4..7] del<br />

mismo puer<strong>to</strong> configuradas como entradas. Por estas líneas se lee el teclado.<br />

Si no hay ninguna tecla pulsada, se leerá un nivel al<strong>to</strong> en las cuatro debido a<br />

las resistencias de pull-up.<br />

P1_0<br />

Vcc<br />

P1_1<br />

Vcc<br />

P1_2<br />

R<br />

Vcc<br />

P1_3<br />

0 1 2 3<br />

R<br />

Vcc<br />

P1_4<br />

P1_5<br />

P1_6<br />

P1_7<br />

4 5 6 7<br />

8 9 A B<br />

C D E F<br />

R<br />

R<br />

- Cuando no hay ninguna tecla pulsada, las filas, P1[4..7], no están unidas a las<br />

columnas, P1[0..3].<br />

- El funcionamien<strong>to</strong> de este teclado se basa en que al pulsar una tecla se<br />

establece la conexión entre la fila y la columna correspondientes. Por ejemplo,<br />

mientras se mantenga pulsada la tecla 5, la línea P1_2 y la P1_5 permanecen<br />

cor<strong>to</strong>circuitadas.<br />

- Si se escribe un cero en una columna y se ha pulsado una tecla de esa columna,<br />

dicho cero se leerá por alguna de las filas. Conociendo en qué columna se<br />

escribió el cero y por qué fila se ha leído, se puede identificar la tecla pulsada.<br />

- Por tan<strong>to</strong>, para detectar si se ha pulsado alguna tecla y cuál de ellas, el<br />

algoritmo necesario es el siguiente: escribir un cero en una de las columnas y<br />

leer las filas; si ninguna es cero, no hay tecla pulsada o no pertenece a esa<br />

columna; en<strong>to</strong>nces, se escribe el cero en la siguiente columna, volviendo a leer<br />

las filas y así sucesivamente hasta haber escri<strong>to</strong> el cero en <strong>to</strong>das las columnas.<br />

Se pretende diseñar el sistema para que se comporte del siguiente modo:<br />

4


- Se realizará una lectura del teclado, de acuerdo al algoritmo anteriormente<br />

descri<strong>to</strong>, una vez cada 1/10 de segundo, para ver si hay alguna tecla pulsada.<br />

- Si se detecta alguna tecla pulsada, el teclado dejará de leerse durante 1/2<br />

segundo para no leer dos veces la misma pulsación de tecla 1 .<br />

- El código correspondiente a la tecla pulsada debe enviarse a un terminal a<br />

través de un puer<strong>to</strong> serie RS-232. El terminal funciona a 9600 bps, con paridad<br />

par y 1 bit de parada.<br />

- En los tiempos libres en que no se lee el teclado, la CPU debe poder realizar<br />

otras tareas que en este problema quedan sin especificar.<br />

a) Describa cualitativamente cómo resolver la aplicación indicando qué recursos del<br />

80C552 va a utilizar y en qué modo van a funcionar.<br />

b) Escriba el código C necesario para la inicialización de los recursos empleados,<br />

comentándolo brevemente. Tenga en cuenta que, independientemente de si su respuesta<br />

al apartado anterior soluciona correctamente la aplicación o no, en este apartado debe<br />

demostrar que sabe configurar el 80C552 de acuerdo a su respuesta anterior.<br />

c) Dibuje los organigramas de las rutinas de atención a interrupción que utilice.<br />

d) Escriba el código de las siguientes funciones:<br />

d1) Función que permite rastrear el teclado mediante el procedimien<strong>to</strong><br />

anteriormente descri<strong>to</strong>. No tendrá parámetros de entrada y devolverá en un<br />

entero el valor ASCII de la tecla pulsada.<br />

d2) Función que permita calcular la paridad par de un da<strong>to</strong> de 8 bits, que tendrá<br />

como parámetro de entrada.<br />

EJERCICIO 6)<br />

Utilizando un sistema digital basado en el 80c552 con una frecuencia de reloj de 12<br />

MHz. se pretende realizar la temporización para el funcionamien<strong>to</strong> de un semáforo, que<br />

cumpla las siguientes especificaciones:<br />

• Para suministrar luz a cada una de las lentes del semáforo el sistema deberá<br />

activar (a 1 lógico) una línea diferente denominada: R, A, V.<br />

• El funcionamien<strong>to</strong> deberá seguir la siguiente secuencia repetitiva de<br />

funcionamien<strong>to</strong>:<br />

1.- Semáforo en rojo durante 3 minu<strong>to</strong>s.<br />

2.- Semáforo en verde durante 5 minu<strong>to</strong>s.<br />

3.- Semáforo en ámbar durante 10 segundos.<br />

4.- Volver a paso 1.<br />

1 Existen procedimien<strong>to</strong>s más robus<strong>to</strong>s, sin embargo el aquí propues<strong>to</strong> resulta más sencillo.<br />

5


• El semáforo contará con un pulsador para pea<strong>to</strong>nes cuya activación hará que, si<br />

el semáforo se encuentra en verde, el tiempo que resta de funcionamien<strong>to</strong> en este color<br />

no sea superior a 30 segundos.<br />

a) Describir detalladamente los elemen<strong>to</strong>s del microcontrolador utilizados para el<br />

correc<strong>to</strong> funcionamien<strong>to</strong> del sistema: modo de trabajo, función desarrollada, si se<br />

emplea su interrupción, etc.<br />

b) Realice los organigramas del programa principal y de <strong>to</strong>das las subrutinas de atención<br />

a las interrupciones que utilice, explicando el significado de <strong>to</strong>das las variables que<br />

utilice en los mismos.<br />

EJERCICIO 7)<br />

Se pretende realizar parte de un sistema de adquisición de da<strong>to</strong>s y control, con las<br />

siguientes características:<br />

• se deberán leer tres canales analógicos (C1, C2 y C3), cuyo rango de<br />

tensiones varía entre 0 y 5 voltios.<br />

• la tensión de referencia será Vcc = 5V<br />

• se dispone de una única memoria RAM externa de da<strong>to</strong>s de 4 Kbytes, en la<br />

parte más alta del mapa de memoria.<br />

El funcionamien<strong>to</strong> del sistema debe ser el siguiente:<br />

• el canal analógico C1 debe leerse cada 5 ms. Los 8 bits de mayor peso de<br />

dicha lectura deben almacenarse continuamente en un buffer circular<br />

direccionado por el puntero bcircular<br />

• el canal C2 debe leerse cada 20 ms.<br />

• si la tensión leída en el canal C2 es superior a 1.4 voltios el sistema deberá<br />

realizar las siguientes tareas:<br />

⇒ leer el canal C3 y guardar su valor real (en voltios) en la variable<br />

alarma de tipo int.<br />

⇒ llamar a la función procesar_alarma()<br />

⇒ colocar el puntero del buffer circular al comienzo del mismo<br />

• el sistema debe ser diseñado de manera que se libere el máximo tiempo<br />

posible de CPU para poder realizar otras tareas<br />

a) Indique qué recursos del 80c552 (f = 12 Mhz.) utilizará y describa brevemente cómo<br />

van a funcionar.<br />

b) Realice el organigrama del programa principal y el de las rutinas de atención a las<br />

interrupciones que haya utilizado.<br />

c) Escriba el código en C (comentado) correspondiente al programa principal. Este<br />

código debe incluir las instrucciones necesarias para la inicialización de los periféricos<br />

utilizados.<br />

6


EJERCICIO 8)<br />

En un sistema digital basado en el 80C552 que trabaja con un reloj de frecuencia 120<br />

KHz. se necesita realizar la medida del desfase entre dos señales digitales de periodo<br />

200 ms e igual ciclo de trabajo. Dicho valor debe guardarse, expresado en radianes, en<br />

la variable: float desfase.<br />

Indique, justificadamente, que elemen<strong>to</strong>s del microcontrolador usaría, con qué valores<br />

deben trabajar dichos elemen<strong>to</strong>s y realice en código C (comentando las instrucciones)<br />

<strong>to</strong>da la programación necesaria (iniciación de periféricos y rutina/s de interrupción/es de<br />

los mismos) para esta aplicación.<br />

EJERCICIO 9)<br />

Se quiere realizar un sistema basado en el microcontrolador 87C552 trabajando a una<br />

frecuencia de reloj de 11.0592 MHz. para el control de una cinta transportadora de<br />

paquetes en una oficina Postal (Figura 1).<br />

scan<br />

detec<strong>to</strong>r<br />

cinta A<br />

zona de pesado<br />

cinta B<br />

camino A<br />

paquete<br />

camino B<br />

brazo móvil<br />

Vista superior<br />

Vista frontal<br />

Figura 1.- Vista superior y frontal de la cinta transportadora<br />

7


Dicha cinta está dividida en dos partes:<br />

Cinta A.- Se mueve a través del control de un mo<strong>to</strong>r por PWM (activo desde el<br />

encendido del sistema) y en este tramo se encuentra:<br />

● Un scan para detección de obje<strong>to</strong>s peligrosos, que funciona de forma continua<br />

y cuando escanea un paquete manda al sistema de control, por conexión serie<br />

RS-232, la siguiente información:<br />

- si el escaneo del paquete es normal el código: 0x77.<br />

- si en el escaneo se detecta un paquete peligroso el código:<br />

0xAA.<br />

Si se detecta un obje<strong>to</strong> peligroso, nuestro sistema debe parar las cintas A y<br />

B hasta un nuevo Reset del sistema y encender un diodo led de alarma<br />

controlado por una línea digital (1 encendido, 0 apagado).<br />

● Una banda de pesado de los paquetes, que cuenta con:<br />

- detec<strong>to</strong>r de paquetes, genera un pulso a nivel al<strong>to</strong>.<br />

- una báscula analógica capaz de pesar hasta 30 Kg. según<br />

curva de la figura 4.<br />

Cuando el detec<strong>to</strong>r de paquetes se activa, el sistema de control<br />

debe parar la cinta A durante 30 segundos para dar tiempo a que la zona<br />

de pesado actúe correctamente, después de este tiempo podrá leerse la<br />

báscula analógica.<br />

Cinta B.- Se mueve a través del control de un mo<strong>to</strong>r por PWM, con las mismas<br />

características que la cinta A pero a doble velocidad que ésta. En este tramo se<br />

encuentra:<br />

● Un brazo móvil que habilita dos caminos diferentes para los paquetes en<br />

función de su peso:<br />

- si Peso paquete < 10 Kg. Camino A<br />

- si Peso paquete ≥ 10 Kg. Camino B<br />

Este brazo móvil se controla a través de un contac<strong>to</strong>r cuya entrada es una<br />

señal digital C1 (C1 = 1 ⇒ camino A, C1 = 0 ⇒ camino B).<br />

Además el sistema debe contar el número de paquetes que pasan por él y si no<br />

pasa un paquete en 5 minu<strong>to</strong>s, parar la cinta B y encender un led indicativo de reposo<br />

(activo con un nivel al<strong>to</strong>) hasta que se detecte un nuevo paquete en la cinta A.<br />

A) Consideraciones generales:<br />

A1) Indique los diferentes elemen<strong>to</strong>s que debe usar del microcontrolador para el<br />

correc<strong>to</strong> funcionamien<strong>to</strong> del sistema. Explique claramente el uso de cada uno de ellos,<br />

indicando cuando se activan y desactivan y, en el caso de los periféricos, si funcionan<br />

por interrupción o no.<br />

8


A2) Realice, aprovechando la figura 2, el conexionado necesario entre el<br />

microcontrolador y las diferentes señales de la cinta transportadora, para el correc<strong>to</strong><br />

funcionamien<strong>to</strong> del sistema.<br />

P0.0/AD0<br />

P0.1/AD1<br />

P0.2/AD2<br />

P0.3/AD3<br />

P0.4/AD4<br />

P0.5/AD5<br />

P0.6/AD6<br />

P0.7/AD7<br />

P1.0/CT0I<br />

P1.1/CT1I<br />

P1.2/CT2I<br />

P1.3/CT3I<br />

P1.4/T2<br />

P1.5/RT2<br />

P1.6/SCL<br />

P1.7/SDA<br />

P4.0/CMSR0<br />

P4.1/CMSR1<br />

P4.2/CMSR2<br />

P4.3/CMSR3<br />

P4.4/CMSR4<br />

P4.5/CMSR5<br />

P4.6/CMT0<br />

P4.7/CMT1<br />

P5.0/ADC0<br />

P5.1/ADC1<br />

P5.2/ADC2<br />

P5.3/ADC3<br />

P5.4/ADC4<br />

P5.5/ADC5<br />

P5.6/ADC6<br />

P5.7/ADC7<br />

P2.0/A8<br />

P2.1/A9<br />

P2.2/A10<br />

P2.3/A11<br />

P2.4/A12<br />

P2.5/A13<br />

P2.6/A14<br />

P2.7/A15<br />

P3.0/RxD<br />

P3.1/TxD<br />

P3.2/INT0<br />

P3.3/INT1<br />

P3.4/T0<br />

P3.5/T1<br />

P3.6/WR<br />

P3.7/RD<br />

STADC<br />

PWM0<br />

PWM1<br />

EW<br />

AVref-<br />

AVref+<br />

EA/VPP<br />

PSEN<br />

ALE/PROG<br />

RST<br />

XTAL1<br />

XTAL2<br />

87C552<br />

V CC<br />

OUT<br />

XTAL<br />

11.0592 MHz.<br />

Figura 2<br />

B) teniendo en cuenta los siguientes da<strong>to</strong>s:<br />

- La cinta A debe de desplazarse a una velocidad de 32 mts/minu<strong>to</strong> y la B al<br />

doble.Los rodillos que mueven ambas cintas tienen un diámetro de 20/π<br />

centímetros.<br />

- La respuesta del mo<strong>to</strong>r para diferentes ciclos de trabajo para una señal de<br />

frecuencia 2KHz es la que se referencia en la figura 3<br />

Revol/minu<strong>to</strong><br />

400<br />

300<br />

200<br />

100<br />

20<br />

40 60 80<br />

Ciclo PWM<br />

Figura 3.- Respuesta de los mo<strong>to</strong>res que mueven las cintas para<br />

diferentes ciclos de trabajo de la señal PWM.<br />

9


- Los parámetros para las comunicaciones serie serán: 9600 baudios, 8 bits de<br />

da<strong>to</strong>s, un bit de parada y sin bit de paridad.<br />

- La respuesta de la bascula analógica es la representada en la figura 4<br />

V SAL (voltios)<br />

5<br />

4<br />

3<br />

2<br />

1<br />

10 20 30<br />

Kg<br />

Figura 4.- Curva de comportamien<strong>to</strong> de la báscula electrónica<br />

B1) Indique cómo se va a programar cada uno de los periféricos en el programa<br />

principal y realice la codificación en lenguaje C de esta programación. Comente cada<br />

una de líneas del programa que emplee.<br />

B2) Indique las funciones que debe realizar cada rutina de interrupción que halla<br />

propues<strong>to</strong>. Realice el ordinograma explicativo de las mismas y explique la función de<br />

cada bloque que en ellas figuren.<br />

B3) Indique los valores y formulas que emplearía para el calculo del peso del paquete<br />

en forma<strong>to</strong> digital.<br />

EJERCICIO 10)<br />

En el control de velocidad de un mo<strong>to</strong>r de corriente continua se utiliza un<br />

microcontrolador 87C552, tal y como se muestra en la figura 1.<br />

15V<br />

87C552<br />

PULSOS<br />

SENSOR<br />

DE GIRO<br />

MOTOR<br />

DE CC<br />

PWM<br />

Interfaz<br />

de Potencia<br />

Figura 1. Control de un mo<strong>to</strong>r de Corriente Continua con 87C552<br />

10


El mo<strong>to</strong>r lleva alojado en su eje un sensor de giro que produce un pulso por cada vuelta;<br />

la señal producida por dicho sensor (PULSOS) se conecta a una entrada de reloj de un<br />

timer del microcontrolador.<br />

Una de las salidas PWM del 87C552 se conecta a una etapa de potencia que genera una<br />

tensión continua de excitación del mo<strong>to</strong>r, proporcional al ciclo de trabajo de la señal<br />

PWM.<br />

El reloj del microcontrolador es de 12 MHz.<br />

El programa principal que ejecuta el dicho microcontrolador es:<br />

void main(void)<br />

{<br />

unsigned char vueltas, PWM;<br />

}<br />

PWMP = 22;<br />

PWM0 = 90;<br />

TMOD = 0x05;<br />

TH0 = 0x00;<br />

TL0 = 0x00;<br />

TR0 = 1;<br />

while(1)<br />

{<br />

Retardo();<br />

vueltas = TL0;<br />

TL0 = 0;<br />

if (vueltas < 52) PWM = PWM + 10;<br />

else if (vueltas > 56) PWM = PWM - 10;<br />

PWM0 = 255 - PWM;<br />

}<br />

A) Explique el programa anterior indicando claramente los dispositivos del 87C552 que<br />

se utilizan y la configuración que se establece en los mismos. Complete la figura 1<br />

indicando el pin del microcontrolador que debe estar conectado a la señal PULSOS y el<br />

pin que genera la señal PWM.<br />

B) Dibuje sobre la siguiente gráfica al menos dos periodos de la señal PWM que genera<br />

el microcontrolador mientras se ejecuta por primera vez la función Retardo().<br />

Indique claramente los instantes de tiempos significativos suponiendo que en t = 0 el<br />

contador del generador de PWM tiene el valor 0.<br />

11


5V<br />

t<br />

B) Si la función Retardo()se ejecuta en 2 segundos y la variable vueltas tiene<br />

un valor de 54, ¿cuál es la velocidad de giro del mo<strong>to</strong>r, expresada en r.p.m.<br />

(revoluciones por minu<strong>to</strong>)?<br />

EJERCICIO 11)<br />

El sistema basado en microcontrolador 87C552 mostrado en la figura 1 está diseñado<br />

para <strong>to</strong>mar muestras de las señales Vtem y Vhum, y establecer una comunicación serie<br />

EIA232.<br />

5V<br />

Vhum<br />

Vtem<br />

2.5V<br />

P5.2/ADC2<br />

AVref+<br />

AVref-<br />

AVDD<br />

P3.0/RxD<br />

P5.3/ADC3 MAX 232<br />

P3.1/TxD<br />

1<br />

6<br />

2<br />

7<br />

3<br />

8<br />

4<br />

9<br />

5<br />

J1<br />

CONN-D9<br />

11,0592MHz<br />

XTAL1<br />

XTAL2<br />

87C552<br />

AVSS<br />

Figura 1. Sistema basado en 87C552<br />

La señal Vtem proviene de un sensor de temperatura ambiente y proporciona valores<br />

entre 0 voltios (para una temperatura de -20ºC) a 2,5 voltios (para una temperatura de<br />

60ºC); teniendo una variación lineal entre ambos valores.<br />

12


La señal Vhum proviene de un sensor de humedad relativa y proporciona valores entre 0<br />

voltios (para una humedad de 0%) a 2,5 voltios (para el 100% de humedad relativa);<br />

teniendo una variación lineal entre ambos valores.<br />

El funcionamien<strong>to</strong> del sistema debe cumplir las siguientes especificaciones:<br />

1. Cada minu<strong>to</strong> de debe enviar por la línea serie un mensaje con la hora, la<br />

temperatura y la humedad relativa actuales<br />

2. Los valores de temperatura y de humedad se calcularán como números enteros y<br />

se enviarán por la línea serie descompues<strong>to</strong>s en dígi<strong>to</strong>s decimales y expresados<br />

en ASCII<br />

3. Cada mensaje tendrá 15 caracteres (numerados de 0 a 14) con el siguiente<br />

forma<strong>to</strong>:<br />

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />

H H : m m hum hum hum sig tem tem NULL<br />

El último carácter es NULL (código ASCCI 00h) y se utiliza para indicar el final del<br />

mensaje; este carácter también será transmitido por la línea serie.<br />

Por ejemplo: si a las 12:34 se mide una humedad relativa del 56% y una temperatura<br />

de +7ºC, el mensaje a enviar será el siguiente<br />

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14<br />

1 2 : 3 4 0 5 6 + 0 7 NULL<br />

4. La comunicación serie se establecerá a 2400 baudios, con 8 bits de da<strong>to</strong>s, 1 de<br />

parada y sin paridad.<br />

A) Calcule los siguientes tiempos:<br />

Tiempo que tarda el ADC en realizar una conversión =<br />

Tiempo de transmisión de un carácter por la línea serie EIA232 =<br />

Tiempo de transmisión del mensaje comple<strong>to</strong> por la línea serie EIA232 =<br />

Se <strong>to</strong>man las siguientes decisiones de funcionamien<strong>to</strong> del sistema:<br />

1. Se utilizará el Timer 0 para generar interrupciones periódicas que permitan<br />

medir el tiempo (calculando horas, minu<strong>to</strong>s y segundos)<br />

2. Para manejar el conversor ADC no se utilizarán las interrupciones de dicho<br />

dispositivo<br />

3. El envío por la línea serie de cada mensaje se realizará por interrupciones;<br />

enviando un carácter en cada interrupción y dejando el transmisor deshabilitado<br />

después de enviar el carácter NULL de final del mensaje<br />

4. El contador de segundos se utilizará como base de tiempos para iniciar <strong>to</strong>das las<br />

tareas que deben realizarse cada minu<strong>to</strong>; cuando dicho contador alcanza<br />

determinados valores se realizan las acciones indicadas en la tabla siguiente:<br />

13


Segundo<br />

Tareas<br />

57 Inicio conversión Temperatura<br />

58 Lectura ADC (Temperatura)<br />

Inicio conversión Humedad Relativa<br />

59 Lectura ADC (Humedad Relativa)<br />

La estructura del programa en lenguaje C que ejecutará el microcontrolador es:<br />

bit tic_minu<strong>to</strong>;<br />

unsigned char segundo, minu<strong>to</strong>, hora, i;<br />

int temperatura_ADC, humedad_relativa_ADC;<br />

char mensaje[14]= “hh:mm HHH sTT /0”;<br />

void Atención_T0(void) interrupt 1<br />

{<br />

/* Bloque B: atención a las interrupciones del Timer 0<br />

*/<br />

}<br />

void Atención_SCI(void) interrupt 4<br />

{<br />

/* Bloque C: atención a las interrupciones UART */<br />

}<br />

void main (void)<br />

{<br />

tic_minu<strong>to</strong> = 0;<br />

/* Bloque A: inicialización del sistema */<br />

}<br />

while (1)<br />

{<br />

if (tic_minu<strong>to</strong>)<br />

{<br />

tic_minu<strong>to</strong> = 0;<br />

Construir_Mensaje();<br />

S0BUF = mensaje[0];<br />

i = 0;<br />

}<br />

}<br />

Los resultados de las conversiones, leídos del ADC, se almacenarán en las variables<br />

temperatura_ADC y humedad_relativa_ADC; la función<br />

Construir_Mensaje() será la encargada de traducir dichos valores a ºC y % de<br />

humedad relativa, extraer los dígi<strong>to</strong>s decimales de los mismos, expresarlos en código<br />

ASCII y construir el array mensaje[]. La variable i indicará la posición del carácter<br />

que se está transmitiendo por la línea serie.<br />

14


En los siguientes apartados se pretende completar los bloques A, B y C del<br />

programa para lograr que se cumplan las especificaciones de funcionamien<strong>to</strong>.<br />

B) Escriba las instrucciones a incluir en el “Bloque A” del programa anterior para<br />

configurar los timers 0 y 1, así como el dispositivo de comunicaciones serie. Incluya los<br />

cálculos realizados y comente las sentencias de lenguaje C.<br />

C) Escriba las instrucciones a incluir en el “Bloque B” para atender las interrupciones<br />

del timer 0; incluyendo las declaraciones de variables locales que necesite. Incluya<br />

comentarios para aclarar las tareas que realiza la función.<br />

D) Escriba las instrucciones a incluir en el “Bloque C” para atender las interrupciones<br />

de transmisión en la UART. Indique claramente como se inicia el envío de un mensaje y<br />

cómo se detecta el final del envío de dicho mensaje.<br />

E) Escriba la función Construir_Mensaje(), que construya el mensaje[] que<br />

se enviará por la línea serie a partir de los valores almacenados en las variables: hora,<br />

minu<strong>to</strong>, temperatura_ADC y humedad_relativa_ADC. Incluya comentarios<br />

para aclarar las instrucciones.<br />

EJERCICIO 12)<br />

Se desea realizar un sistema de adquisición de da<strong>to</strong>s utilizando para ello un 80C552 de<br />

Philips funcionando a una frecuencia de 11,059 MHz. El sistema está compues<strong>to</strong> por un<br />

sensor de temperatura, un sensor de presión y un sensor de humedad, dispues<strong>to</strong>s como<br />

se muestra en la figura.<br />

80C552<br />

ADC0<br />

Vtemp<br />

Sensor de Temperatura<br />

UART<br />

ADC1<br />

Vpres<br />

Sensor de Presión<br />

ADC2<br />

Vhum<br />

Sensor de Humedad<br />

15


Como puede observarse, los sensores y acondicionadores respectivos para medir los tres<br />

parámetros físicos se encuentran de manera externa al microcontrolador, ofreciendo<br />

unas señales en tensión caracterizadas como se muestra en la tabla siguiente.<br />

Señal Rango Tensión<br />

Vtemp 0 – 100 ºC 0 – 1 V<br />

Vpres 900 – 1100 mb 0 – 2 V<br />

Vhum 0 – 100 % 0 – 1 V<br />

El sistema ha de cumplir las siguientes especificaciones:<br />

• Estará conectado a un PC por medio de una conexión serie asíncrona, con los<br />

siguientes parámetros en la comunicación: 19200 baudios, 8 bits de da<strong>to</strong>s, un bit de<br />

parada, un bit de arranque y sin bit paridad. Será desde el ordenador desde donde se<br />

dará la orden de adquisición mediante el envío de carácter “S” a través del puer<strong>to</strong><br />

serie hacia el 80C552.<br />

• Una vez realizada la conversión de los tres parámetros, el 80C552 enviará al PC, a<br />

través del puer<strong>to</strong> serie, los valores numéricos (no es necesario transformar el valor a<br />

una cadena de caracteres) relativos a los tres parámetros adquiridos (en su unidad<br />

correspondiente, no en tensión).<br />

• Las conversiones analógico-digital se deben realizar con la mayor precisión posible<br />

que permita el microcontrolador.<br />

Teniendo en cuenta <strong>to</strong>do lo expues<strong>to</strong> responda a las cuestiones que se plantean.<br />

a) ¿Qué tensión de referencia elegiría para el ADC? ¿dónde la conectaría?<br />

b) Teniendo en cuenta que la gestión del puer<strong>to</strong> serie se realizará con interrupciones.<br />

¿Qué registros de la UART y del Timer 1 del 80C552 programaría y qué valores<br />

pondría? Justifique adecuadamente su respuesta comentado el código.<br />

c) Suponga que una vez recibida la orden de comienzo de adquisición enviada por el<br />

PC, se lanza la conversión consecutiva de los tres parámetros a medir y que su<br />

gestión se realiza por “sondeo”. Desarrolle y comente, en lenguaje C, el código<br />

necesario para declarar las variables, realizar las conversiones, leer los da<strong>to</strong>s del<br />

ADC y transformarlos a las unidades físicas correspondientes.<br />

NOTA: A la hora de declarar el tipo de variables que va a emplear recuerde que las<br />

conversiones deben realizarse con la mayor precisión posible<br />

d) Considerando que la gestión del puer<strong>to</strong> serie (tan<strong>to</strong> para el envío como para la<br />

recepción) se lleva a cabo por medio de interrupciones. Realice un “organigrama”<br />

de la secuencia del programa de atención a las interrupciones de la UART del<br />

80C552. Tenga en cuenta que mientras se está realizando el envío de los parámetros<br />

solicitados, deberá estar inhabilitada la recepción de nuevos comandos desde el PC.<br />

NOTA: Independientemente del tipo de variable utilizada en el apartado anterior,<br />

suponga que los tres valores numéricos a enviar se encuentran de manera<br />

consecutiva a partir de la dirección externa 1000h del mapa de da<strong>to</strong>s y que ocupan<br />

12 bytes.<br />

16


EJERCICIO 13)<br />

Se dispone de un sistema basado en 80C552 en el que tan solo se emplea la memoria<br />

interna tan<strong>to</strong> de da<strong>to</strong>s como de programa. Con este dispositivo se implementa un<br />

sistema de recepción de da<strong>to</strong>s serie y almacenamien<strong>to</strong> para su posterior volcado a través<br />

de un puer<strong>to</strong> paralelo.<br />

Los da<strong>to</strong>s se reciben asíncronamente a una velocidad de 9600 baudios y con paridad<br />

par. El microprocesador debe almacenar es<strong>to</strong>s da<strong>to</strong>s en un array de 50 bytes que se debe<br />

ubicar a partir de la dirección 0x0180 de la memoria de da<strong>to</strong>s. Una vez que se reciban<br />

los 50 da<strong>to</strong>s es<strong>to</strong>s deben enviarse a través del puer<strong>to</strong> 0, uno detrás de otro. Terminado el<br />

proceso de envío hay que volver a almacenar nuevamente a partir de la dirección<br />

anteriormente indicada.<br />

Finalmente debe tenerse en cuenta que es necesario comprobar la paridad de los da<strong>to</strong>s<br />

recibidos descartando aquellos en los que sea incorrecta y que mientras que transmiten<br />

los da<strong>to</strong>s paralelo no es posible recibir nuevos da<strong>to</strong>s por la línea serie.<br />

Codifique el programa que realice esta funcionalidad comentando adecuadamente<br />

aquellas líneas de código que considere necesarias.<br />

EJERCICIO 14)<br />

Se desea desarrollar el software de un sistema basado en 80C552 utilizado para medir la<br />

velocidad de circulación de vehículos por una vía de un solo carril y sentido único, así como el<br />

número de vehículos que circulan por la vía cada minu<strong>to</strong>.<br />

Para ello se coloca un sistema de 2 sensores en forma de dos bandas sobre el asfal<strong>to</strong>, con una<br />

distancia de 10cm entre ellas. A es<strong>to</strong>s sensores se les denomina Sensor1 y Sensor2. Es<strong>to</strong>s<br />

sensores generan un pulso cuando las ruedas pasan por encima de la banda, como se indica en la<br />

figura.<br />

Sensor1<br />

10 ms<br />

Sensor2<br />

10 ms<br />

Para la realización de este ejercicio considere que:<br />

• el rango de velocidad se encuentra entre 20Km/h y 200Km/h,<br />

• el reloj del microcontrolador es de 24MHz.<br />

17


Nota: En <strong>to</strong>dos los apartados en los que escriba código, éste deberá ir suficientemente<br />

comentado.<br />

Apartado A) Medida de la velocidad.<br />

En este apartado nos vamos a centrar en la medida de la velocidad del vehículo, dejando a un<br />

lado de momen<strong>to</strong> la cuenta del número de vehículos que circulan por la vía. Por motivos de<br />

simplicidad del software a realizar, efectúe la medida de la velocidad cada vez que las ruedas<br />

pasan por encima de los sensores, no es necesario diferenciar entre las ruedas traseras y<br />

delanteras.<br />

A.1.) Indique el conexionado que piensa realizar entre las salidas del sistema de sensores<br />

y los pines correspondientes del microcontrolador.<br />

A.2.) Realice los cálculos necesarios e justifique el modo en que va a realizar la medida.<br />

Indique justificadamente los periféricos del microcontrolador que piensa emplear<br />

para resolver esta parte del problema, y el modo en el que los configurará.<br />

A.3.) Realice el programa principal en C que permita configurar los periféricos<br />

empleados para resolver esta parte del problema, así como la definición de las<br />

variables que se utilicen en el programa.<br />

A.4.) Escriba el código en C de las rutinas de atención a las interrupciones que desea<br />

emplear comentando el código empleado. Como resultado de la rutina se debe<br />

almacenar en la variable global velocidad (que deberá definir en el sitio adecuado)<br />

el cálculo que de la misma se realice expresado en Km/h.<br />

A.5.) Indique la velocidad mínima que se podría medir empleando el mé<strong>to</strong>do propues<strong>to</strong>.<br />

Apartado B) Medida del número de vehículos por minu<strong>to</strong> que circulan por la vía.<br />

Considere que <strong>to</strong>dos los vehículos que circulan por la vía tienen dos ejes. Es decir, el cálculo del<br />

número de vehículos se realizará dividiendo por dos el número de veces que se ha activado uno<br />

de los sensores. Almacene el resultado de esta medida en una variable global denominada<br />

número_de_coches.<br />

NOTA: Para realizar la medida de cada minu<strong>to</strong> debe emplear la mayor resolución posible no<br />

pudiéndose utilizar un retardo software.<br />

B.1.)<br />

B.2.)<br />

Indique justificadamente los periféricos del microcontrolador que piensa emplear<br />

para resolver esta parte del problema, y el modo en el que los configurará.<br />

Indique qué cambios es necesario realizar en el código desarrollado en el apartado<br />

A, tan<strong>to</strong> en el programa principal como en las interrupciones, para incluir esta<br />

nueva capacidad al sistema. Escriba el código en C de las rutinas de atención a las<br />

interrupciones adicionales que desee emplear en esta parte del problema.<br />

EJERCICIO 15)<br />

Se desea realizar un sistema de control y adquisición de da<strong>to</strong>s utilizando para ello un 80C552 de<br />

Philips funcionando a una frecuencia de 11,059 MHz. El sistema está compues<strong>to</strong> por tres<br />

sensores de tres magnitudes físicas dispues<strong>to</strong>s como se muestra en la figura 1.<br />

18


Figura 1<br />

Dichos sensores ofrecen, según se muestra en la tabla 1, tensiones de acuerdo a las<br />

correspondientes leyes de variación:<br />

Señal Variación Tensión<br />

Vx Vx=2X 0 – 4 V<br />

Vy Vy=Y/3 0 – 3 V<br />

Vz Vz=Z+1 1 – 2 V<br />

Tabla 1<br />

siendo X,Y y Z las variables físicas que el sistema ha de medir y almacenar con la mayor<br />

precisión posible para que otros procesos se encarguen de tratarlas.<br />

Adicionalmente el sistema en función de las magnitudes leídas se encargará de generar<br />

simultáneamente 3 señales PWM con las características que se ofrecen en la tabla 2:<br />

Señal Frecuencia Ciclo de trabajo<br />

PWM0 500 Hz. X/Xmax ·100<br />

PWM1 500 Hz. Y/Ymax ·100<br />

PWM2 14 Hz. Z/Zmax ·100<br />

Tabla 2<br />

La aplicación que se debe construir, una vez decidida la forma y utilización de los recursos del<br />

microcontrolador, ha de cumplir las siguientes especificaciones:<br />

• El sistema muestreará cada segundo las tres tensiones de los sensores y en función<br />

del valor de cada una de las variables físicas generará las señales según la tabla 2.<br />

Dicho segundo no se puede temporizar por software y para su generación se<br />

utilizará el Timer 0 con interrupciones.<br />

• Las conversiones analógico-digital se deben realizar con la mayor precisión posible<br />

que permita el microcontrolador.<br />

• El programa principal, en el que se invocan las funciones a desarrollar, es:<br />

19


unsigned char tic_1s;<br />

void main (void)<br />

{<br />

tic_1s = 0;<br />

IniciaRecursos();<br />

while (1)<br />

{<br />

if (tic_1s)<br />

{<br />

LeerVariables();<br />

GuardarVariables();<br />

GenerarPWM0();<br />

GenerarPWM1();<br />

GenerarPWM2();<br />

tic_1s = 0;<br />

}<br />

}<br />

}<br />

Teniendo en cuenta <strong>to</strong>do lo expues<strong>to</strong> responda a las cuestiones que se plantean.<br />

Nota: En <strong>to</strong>dos los apartados en los que escriba código, éste deberá ir suficientemente<br />

comentado.<br />

a) Indique qué recursos del microcontrolador va a utilizar para cada una de los cometidos<br />

propues<strong>to</strong>s, teniendo en cuenta que el sistema sólo utilizará una interrupción, la<br />

correspondiente al Timer 0, que se encarga de temporizar un segundo y que la<br />

frecuencia del PWM2 es de 14 Hz. aproximadamente.<br />

b) Dibuje sobre la figura 2 las conexiones necesarias para poder conseguir el sistema<br />

propues<strong>to</strong> en la figura 1 y justifique como conectará la tensión de referencia.<br />

Figura 2<br />

20


c) Escriba el código en lenguaje C de la función IniciaRecursos() que permita la<br />

inicialización de los recursos empleados añadiendo comentarios que clarifiquen su<br />

compresión y justificando los valores que utiliza para cada uno de los registros.<br />

d) Escriba el código en lenguaje C de la rutina de atención a la interrupción del Timer_0.<br />

e) Escriba el código en lenguaje C para realizar la conversión de las tensiones de los<br />

sensores. La función LeerVariables()actualizará las tres variables globales tipo float X,<br />

Y y Z correspondientes a las magnitudes físicas buscadas.<br />

f) Escriba el contenido de la función GenerarPWM0().<br />

g) Escriba el contenido de la función GenerarPWM2().<br />

21

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!