to get the file - OCW UPM
to get the file - OCW UPM
to get the file - OCW UPM
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