Escuela Politécnica Superior de Elche 4º Ingeniería Industrial EXAMEN DE SISTEMAS ELECTRÓNICOS Y AUTOMÁTICOS 2º Parte: Microcontroladores + Instrumentación Nombre: ______________________________________________________________________ 19 de noviembre de 2007 PROBLEMA 1 (2 puntos) El contenido de la memoria de programa del PIC16F84A a partir de la posición 0000h es el siguiente: • • Deduce con ayuda del manual el programa allí almacenado. Si el programa anterior se ejecuta sobre un microcontrolador con el conexionado que muestra la figura 1, ¿qué carácter aparecerá en el display 7 segmentos si en las líneas de PORTA se introduce el valor “00000100”? 1 a b c d e f g Figura 1. Microcontrolador gobernando un display 7 segmentos Figura 2. Display 7 segmentos PROBLEMA 2 (2 puntos) Escribe un programa para el PIC16F84A, que realice la siguiente tarea: “Un led conectado a la línea 0 del PuertoB se enciende durante 500ms y se apaga durante otros 500ms.” Puedes realizar la temporización como quieras, bien utilizando el sistema Timer (con o sin interrupciones) o bien mediante temporización por software. 2 PROBLEMA 3 (2 puntos) Si el siguiente programa se ejecuta sobre un PIC16F84A, con un reloj de 4MHz, ¿qué ocurrirá? Justifica tu respuesta mediante la interpretación del programa, indicando que función realiza cada instrucción o bloque de instrucciones (No se valorará la descripción de cada instrucción por separado). ; ZONA DE DATOS ****** **************************************************************** __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC LIST P=16F84A INCLUDE <P16F84A.INC> CBLOCK 0x0C ApuntadorFrecuencia Semiperiodo ENDC TMR0_Carga50us EQU -d'42' NumeroFrec EQU d'8' #DEFINE Salida PORTB,3 #DEFINE Pulsador PORTB,7 ; El semiperiodo patrón va a ser de 50 µs. ; Ocho posibles frecuencias . ; ZONA DE CÓDIGOS ******************************************************************** ORG goto ORG goto 0 Inicio 4 ServicioInterrupcion ; Subrutina "CargaContador" ------------------------------------------------------------CargaContador addwf retlw retlw retlw retlw retlw retlw retlw retlw PCL,F .1 .2 .5 .10 .20 .50 .100 .200 ; Subrutina "C argaMensaje" ------------------------------------------------------------CargaMensaje addwf retlw retlw retlw retlw retlw retlw retlw retlw PCL,F Mensaje10kHz Mensaje5kHz Mensaje2kHz Mensaje1kHz Mensaje500Hz Mensaje200Hz Mensaje100Hz Mensaje50Hz ; Subrutina "Mensajes" -----------------------------------------------------------------; Mensajes addwf PCL,F MensajeFrecuencia DT "Frec.: ", 0x00 Mensaje10kHz DT "10 kHz. ", 0x00 Mensaje5kHz DT "5 kHz. ", 0x00 Mensaje2kHz DT "2 kHz. ", 0x00 Mensaje1kHz DT "1 kHz. ", 0x00 Mensaje500Hz DT "500 Hz. ", 0x00 Mensaje200Hz DT "200 Hz. ", 0x00 Mensaje100Hz DT "100 Hz. ", 0x00 Mensaje50Hz DT "50 Hz. ", 0x00 3 ; Programa Principal -----------------------------------------------------------------Inicio call bsf bcf bsf movlw movwf bcf call movlw movwf movlw movwf Principal goto LCD_Inicializa STATUS,RP0 Salida Pulsador b'00001000' OPTION_REG STATUS,RP0 EstadoInicial TMR0_Carga50us TMR0 b'10101000' INTCON ; Visualiza la frecuencia inicial. Principal ; Subrutina "ServicioInterrupcion" -----------------------------------------------------; ServicioInterrupcion btfsc INTCON,T0IF call Timer0_Interrupcion btfsc INTCON,RBIF call Pulsador_Interrupcion bcf INTCON,T0IF bcf INTCON,RBIF retfie ; Subrutina "Pulsador_Interrupcion" ----------------------------------------------------; ; Pulsador_Interrupcion call Retardo_20ms btfsc Pulsador goto Fin_PulsadorInterrupcion incf ApuntadorFrecuencia,F ; Apunta a la siguiente frecuencia. movlw NumeroFrec ; Va a comprobar si ha llegado al máximo. subwf ApuntadorFrecuencia,W ; (W)=(ApuntadorFrecuencia) -NumeroFrec btfsc STATUS,C ; ¿Ha llegado a su máximo? EstadoInicial clrf ApuntadorFrecuencia ; Si llega al máximo l o inicializa. movf ApuntadorFrecuencia,W ; Va a cargar el valor del factor de call CargaContador ; multiplicación del semiperiodo según la movwf Semiperiodo ; tabla. movwf Timer0_ContadorA call LCD_Linea1 movlw MensajeFrecuencia call LCD_Mensaje movf ApuntadorFrecuencia,W call CargaMensaje call LCD_Mensaje EsperaDejePulsar btfss Pulsador goto EsperaDejePulsar Fin_PulsadorInterrupcion return ; Subrutina "Timer0_Interrupcion" ------------------------------------------------------; CBLOCK Timer0_ContadorA ENDC Timer0_Interrupcion movlw TMR0_Carga50us movwf TMR0 decfsz Timer0_ContadorA,F goto Fin_Timer0_Interrupcion movf Semiperiodo,W movwf Timer0_ContadorA btfsc Salida goto EstabaAlto EstabaBajo bsf Salida goto Fin_Timer0_Interrupcion EstabaAlto bcf Salida Fin_Timer0_Interrupcion return INCLUDE INCLUDE INCLUDE END <LCD_MENS.INC> <LCD_4BIT.INC> <RETARDOS.INC> 4 PROBLEMA 4 (1.5 puntos) Un sensor potenciométrico de valor nominal 80 Ω , se encuentra conectado remotamente a un medidor, que se puede modelar como una impedancia resistiva de 400 kΩ, y a una fuente de alimentación de 12V mediante un esquema de 3 hilos tal como se muestra en la figura 3 . SENSOR POTENCIOMÉTRICO Rcable REMOTO R=70 Ω R2=R·(1-x) Alimentación Vi Rcable R1=R·x Vo L MEDIDOR Rcable resistencia de los cables de conexión 150 m Figura 3. Circuito de medida a 3 hilos a) Calculad la tensión en el medidor en el caso ideal que la resistencia del cableado sea despreciable (Rcable=0) . b) Calculad la tensión en el medidor si la resistividad de los cables es 40Ω/km y el sensor se encuentra a unos 150 m. c) Calculad la tensión en el medidor, considerando la resistencia de los cables, utilizando un esquema de 4 hilos (Figura 4). d)¿Cuál de los dos esquemas eléctricos proporciona una medida de tensión más próxima al valor ideal?¿Cómo se podría conseguir el valor de tensión ideal a partir de los dos esquemas anteriores? 5 SENSOR POTENCIOMÉTRICO REMOTO Rcable R2=R·(1-x) Alimentación Rcable R1 =R·x Vi Vo L M EDIDOR Rcable Rcable resistencia de los cables de conexión Figura 4. Circuito de medida a 4 hilos PROBLEMA 5 (2.5 puntos) Diseña un sistema de medida de temperatura entre 10 y 50ºC con un error inferior a 1ºC, utilizando una NTC con los siguientes datos: B=4600K, R0=100kΩ @ 25ºC y δ=10mW/ºC. 6