INFORME PULSADORES-INTERRUPCIONES

16
UNIVERSIDAD DE FUERZAS ARMADAS ESPE EXTENSIÓN LATACUNGA CARRERA DE INGENIERÍA AUTOMOTRIZ INFORME # 4 DE MICROCONTROLADORES Y PLC Nivel: Sexto Fecha: 15/octubre/2013 Paralelo: “A” Nombre: José Luis Chiliquinga, Santiago Morales. A. TEMA. EJERCICIOS CON PULSADORES E INTERRUPCIONES B. OBJETIVOS. Conocer el funcionamiento de los pulsadores junto con el PIC16F628A Aplicar las interrupciones externas en el PIC16F628A C. MATERIALES Y EQUIPOS. Programa MicroCode Studio Programa Isis PIC16F628A Leds Resistencias Cables Fuente 5V

Transcript of INFORME PULSADORES-INTERRUPCIONES

Page 1: INFORME PULSADORES-INTERRUPCIONES

UNIVERSIDAD DE FUERZAS ARMADAS

ESPE

EXTENSIÓN LATACUNGA

CARRERA DE INGENIERÍA AUTOMOTRIZ

INFORME # 4 DE MICROCONTROLADORES Y PLC

Nivel: Sexto Fecha: 15/octubre/2013 Paralelo: “A”

Nombre: José Luis Chiliquinga, Santiago Morales.

A. TEMA.

EJERCICIOS CON PULSADORES E INTERRUPCIONES

B. OBJETIVOS.

Conocer el funcionamiento de los pulsadores junto con el PIC16F628A

Aplicar las interrupciones externas en el PIC16F628A

C. MATERIALES Y EQUIPOS.

Programa MicroCode Studio

Programa Isis

PIC16F628A

Leds

Resistencias

Cables

Fuente 5V

Page 2: INFORME PULSADORES-INTERRUPCIONES

D. MARCO TEORICO.

ODUCCION:INTRODUCCIÓN

El manejo de interrupciones es una técnica de programación, basada en un mecanismo automático en el hardware del microcontrolador, que permite dar atención a algún periférico interno o externo, únicamente en el momento en que ésta se requiera. Una interrupción es en realidad una llamada a una subrutina, pero iniciada por el hardware del propio periférico y no por la instrucción "CALL". La interrupción puede ocurrir en cualquier instante.

Fig. 1.- Interrupciones (http://www.puntoflotante.net/INTERRUPCIONES.htm)

Una interrupción es un evento que hace que el microcontrolador deje de ejecutar la tarea que está realizando para atender dicho acontecimiento y luego regrese y continúe la tarea que estaba realizando antes de que se presentara la interrupción. El pic 16F628 (y el 16F628A) tiene 10 fuentes de interrupción, si las interrupciones están habilitadas cada vez que una de estos acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la interrupción y al término de la misma continuará ejecutando el programa donde lo había dejado. Las fuentes de interrupción son:

Interrupción externa RB0/INT Interrupción por cambio lógico en el puerto B (pines RB7 a RB4) Interrupción por desborde del timer 0 (TMR0) Interrupción por desborde del timer 1 (TMR1) Interrupción por comparación exitosa exitosa en TMR2 Interrupción del comparador Interrupción del transmisor del USART Interrupción del receptor del USART Interrupción del módulo CCP Interrupción del EEPROM

Page 3: INFORME PULSADORES-INTERRUPCIONES

Aunque el pic cuenta con 10 fuentes distintas de interrupción solamente tiene un vector de interrupción por lo que si se habilitan varias interrupciones al momento de presentarse cualquiera de ellas el programa saltara a la misma rutina de interrupción y es responsabilidad del programador crear una rutina que identifique la fuente de la interrupción.

Los registros asociados con las interrupciones son el registro de control de interrupción INTCON, el registro habilitación de interrupciones de periféricos PIE1 y el registro de interrupciones de periféricos PIR1. En el registro INTCON se encuentra el bit deshabilitacion global de interrupciones GIE, el bit de habilitación de interrupción por periféricos PEIE y los bits de habilitación de algunas interrupciones como la interrupción externa del pin RB0 (INTE), la interrupción por cambio de estado en los pines RB4 a RB7 (RBIE) y la interrupción por desborde del timer 0 (T0IE), así como las banderas correspondientes a cada interrupción (INTF, RBIF y T0IF). En el registro PIE1 se encuentran los bits de habilitación de las demás interrupciones y en el registro PIR1 se encuentran las banderas asociadas con cada interrupción.

Fig. 2.- Camino que siguen las solicitudes de interrupción en un microcontrolador (http://books.google.com.ec/books?

id=ODenKGOHMRkC&pg=PA217&lpg=PA217&dq=Interrupciones+%2B+microcontroladores&source=bl&ots)

Page 4: INFORME PULSADORES-INTERRUPCIONES

En términos generales, un proceso de interrupción y su atención por parte del procesador, tiene la siguiente secuencia de acciones:

1. En el mundo real se produce el evento para el cual queremos que el procesador ejecute un programa especial, este proceso tiene la característica de que no puede esperar mucho tiempo antes de ser atendido o no sabemos en que momento debe ser atendido.

2. El circuito encargado de detectar la ocurrencia del evento se activa, y como consecuencia, activa la entrada de interrupción del procesador.

3. La unidad de control detecta que se ha producido una interrupción y “levanta” una bandera para registrar esta situación; de esta forma si las condiciones que provocaron el evento desaparecen y el circuito encargado de detectarlo desactiva la entrada de interrupción del procesador, ésta se producirá de cualquier modo, porque ha sido registrada.

4. La unidad de ejecución termina con la instrucción en curso y justo antes de comenzar a ejecutar la siguiente comprueba que se ha registrado una interrupción

5. Se desencadena un proceso que permite guardar el estado actual del programa en ejecución y saltar a una dirección especial de memoria de programas, donde está la primera instrucción de la subrutina de atención a interrupción.

6. Se ejecuta el código de atención a interrupción, esta es la parte “consciente” de todo el proceso porque es donde se realizan las acciones propias de la atención a la interrupción y el programador juega su papel.

7. Cuando en la subrutina de atención a interrupción se ejecuta la instrucción de retorno, se desencadena el proceso de restauración del procesador al estado en que estaba antes de la atención a la interrupción.

Para habilitar las interrupciones se deben seguir los siguientes pasos:

Habilitar el bit correspondiente a cada interrupción.Limpiar la bandera correspondiente a la interrupción habilitada para evitar falsas interrupciones.En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las interrupciones con excepción de INTE y RBIE).Habilitar el bit de habilitación global de interrupciones GIE del registro INTCON.

Page 5: INFORME PULSADORES-INTERRUPCIONES

Fig. 3.- Programa de atención a la interrupción (http://books.google.com.ec/books?

id=ODenKGOHMRkC&pg=PA217&lpg=PA217&dq=Interrupciones+%2B+microcontroladores&source=bl&ots )

E. PROCEDIMIENTO.

PULSADORES

Iniciar el programa MicroCode Studio.

Ingresar los comandos para realizar el primer programa (3 pulsadores):

CMCON=7 ‘digitaliza puerto ATRISA=255 ‘puerto A entradaTRISB=0 ‘puerto B salidaLED VAR PORTB.0 ‘declaración puertos BPULSADOR1 VAR PORTA.0 ‘declaración puertos APULSADOR2 VAR PORTA.1PULSADOR3 VAR PORTA.2low Led ‘led en bajoINICIO: ‘inicio IF PULSADOR1=0 and PULSADOR2=0 THEN HIGH LED ‘condición para encender el led GOSUB ANTIRREBOTE ‘llama antirrebote IF PULSADOR3=0 THEN Low LED ‘condición para apagar el ledGOTO INICIO ‘vuelve a inicioANTIRREBOTE: ‘subprograma IF PULSADOR1=0 and PULSADOR2=0 THEN GOTO ANTIRREBOTE ‘condición antirreboteRETURN ‘retornoEND ‘fin

Ingresar los comandos para realizar el segundo programa (2 pulsadores como conmutador):

CMCON=7 ‘digitaliza puerto ATRISA=255 ‘A como salidaTRISB=0 ‘B como entradaLED VAR PORTB.0 ‘declaración de puertosPULSADOR1 VAR PORTA.0PULSADOR2 VAR PORTA.1INICIO: ‘inicio IF LED=0 AND (PULSADOR1=0 OR PULSADOR2=0) THEN ‘condición gosub ANTIRREBOTE ‘llama antirrebote HIGH LED ‘ alto led LED=1 ENDIF IF LED=1 AND (PULSADOR1=0 OR PULSADOR2=0) THEN ‘condicion gosub ANTIRREBOTE ‘llama antirrebote

Page 6: INFORME PULSADORES-INTERRUPCIONES

LOW LED ‘bajo led LED=0 ENDIFGOTO INICIO ‘vuelve inicio

ANTIRREBOTE: ‘subrutina IF PULSADOR1=0 THEN GOTO ANTIRREBOTE ‘condicion antirrebote IF PULSADOR2=0 THEN GOTO ANTIRREBOTE ‘condicion antirreboteRETURN ‘retornoEND ‘fin

Ingresar los comandos para realizar el tercer programa (4 pulsadores):

CMCON=7 ‘Digitaliza puerto ATRISA=255 ‘A salidaTRISB=0 ‘B entradaLED1 VAR PORTB.0 ‘declaración de puertosLED2 VAR PORTB.1LED3 VAR PORTB.2PULSADOR1 VAR PORTA.0PULSADOR2 VAR PORTA.1PULSADOR3 VAR PORTA.2PULSADOR4 VAR PORTA.3LED1=0 ‘definición de ledsLED2=0LED3=0INICIO: ‘inicio IF LED1=0 AND LED2=0 AND LED3=0 AND PULSADOR1=0 THEN ‘condicion GOSUB ANTIRREBOTE ‘llama antirrebote HIGH LED1 ‘alto led1 LED2=0 ‘bajo led2 LED3=0 ‘bajo led3 ENDIF IF LED1=0 AND LED2=0 AND LED3=0 AND PULSADOR2=0 THEN ‘condicion GOSUB ANTIRREBOTE ‘llama antirrebote LED1=0 ´bajo led1 HIGH LED2 ‘alto led2 LED3=0 ‘bajo led3 ENDIF IF LED1=0 AND LED2=0 AND LED3=0 AND PULSADOR3=0 THEN ‘condicion GOSUB ANTIRREBOTE ‘llama antirrebote LED1=0 ‘bajo led1 LED2=0 ‘bajo led2 HIGH LED3 ‘alto led3 ENDIF IF PULSADOR4=0 THEN ‘condición para poner en bajo todos los led LOW LED1 LOW LED2 LOW LED3 ENDIFGOTO INICIO ‘vuelve inicio

ANTIRREBOTE: ‘subrutina IF PULSADOR1=0 THEN GOTO ANTIRREBOTE ‘condiciones antirrebote IF PULSADOR2=0 THEN GOTO ANTIRREBOTE IF PULSADOR3=0 THEN GOTO ANTIRREBOTERETURN ‘retornoEND ‘fin

Page 7: INFORME PULSADORES-INTERRUPCIONES

Ingresar los comandos para realizar el cuarto programa (2 pulsadores uno solo prende y uno solo apaga):

CMCON=7 ‘digitaliza ATRISA=255 ‘A salidaTRISB=0 ‘B entradaLED VAR PORTB.0 ‘declaración puertosPULSADOR1 VAR PORTA.0PULSADOR2 VAR PORTA.1INICIO: ‘ inicio IF PULSADOR1=0 THEN HIGH LED ‘condicion alto led IF PULSADOR2=0 THEN Low LED ‘condicion bajo ledGOTO INICIO ‘vuelve inicioEND ‘fin

Ingresar los comandos para realizar el quinto programa (1 pulsador prende y apaga):

CMCON=7 ‘digitaliza ATRISA=255 ‘A salidaTRISB=0 ‘B entradaLED VAR PORTB.0 ‘declaración puertosPULSADOR1 VAR PORTA.0INICIO: ‘inicio IF LED=1 AND PULSADOR1=0 THEN ‘condición LOW LED ‘led bajo LED=0 ENDIF IF LED=0 AND PULSADOR1=0 THEN ‘condicion HIGH LED ‘led alto LED=1 ENDIFGOTO INICIO ‘vuelve inicioEND ‘fin

Generar el archivo *.HEX mediante la compilación del programa para usarlo en ISIS.

Realizar las conexiones necesarias en el programa ISIS para la simulación del programa.

Modificar la frecuencia interna del PIC

Importar el archivo *.HEX al PIC y luego simular el programa.

Grabar la información en el PIC

Armar el circuito y ejecutarlo

Page 8: INFORME PULSADORES-INTERRUPCIONES

INTERRUPCIONES

Ingresar los comandos para realizar el sexto programa (interrupción 1):

CMCON=7 ‘digitaliza ALED1 VAR PORTB.2 ‘declaración puertosLED2 VAR PORTB.3On INTERRUPT GOTO handlerLuz 'activa el sistema de interrupcionesINTCON=%100010000 'habilita la interrupción por RB0INICIO: ‘inicio high led1 ‘alto led PAUSE 200 ‘pausa LOW LED1 ‘bajo led PAUSE 200 ´pausa GOTO INICIO ‘vuelve inicio DISABLE ‘deshabilita la interrupciónHandlerLuz: ‘interrupción HIGH LED2 ‘alto led PAUSE 2000 ‘pausa LOW LED2 ‘bajo led INTCON=%10010000 'habilita la interrupción por RB0 RESUME 'retorna a la siguiente instrucción del programa desde donde fue llamada la interrupción ENABLE 'habilita nuevamente la interrupciónEND ‘fin

Ingresar los comandos para realizar el séptimo programa (interrupción 2):

LED1 VAR PORTB.1 ‘declaración puertosLED2 VAR PORTB.2ON INTERRUPT GOTO LUZ 'activa el sistema de interrupcionesINTCON=%10010000 'habilita la interrupción por RB0INICIO: ‘inicio HIGH LED1 ‘alto led PAUSE 500 ‘pausa LOW LED1 ‘bajo led PAUSE 500 ‘pausaGOTO INICIO ‘vuelve inicioDISABLE ‘deshabilita la interrupciónLUZ: ‘interrupción HIGH LED2 PAUSE 5000 LOW LED2 INTCON=%10010000 'habilita la interrupción por RB0 ON INTERRUPT GOTO FIN 'activa el sistema de interrupciones RESUME LUZ2 'retorna a la siguiente instrucción del programa desde donde fue llamada la interrupción ENABLE 'habilita nuevamente la interrupciónLUZ2: ‘interrupción HIGH LED2 PAUSE 500 LOW LED2 PAUSE 500GOTO LUZ2DISABLE ‘deshabilita la interrupciónFIN: ‘interruption HIGH LED1: HIGH LED2 PAUSE 5000 LOW LED1:LOW LED2 INTCON=%10010000 'habilita la interrupción por RB0 RESUME INICIO 'retorna a la siguiente instrucción del programa desde donde fue llamada la interrupción ENABLE 'habilita nuevamente la interrupciónEND

Page 9: INFORME PULSADORES-INTERRUPCIONES

Generar el archivo *.HEX mediante la compilación del programa para usarlo en ISIS.

Realizar las conexiones necesarias en el programa ISIS para la simulación del programa.

Modificar la frecuencia interna del PIC

Importar el archivo *.HEX al PIC y luego simular el programa.

Grabar la información en el PIC

Armar el circuito y ejecutarlo

F. Análisis de Resultados.

PULSADORES

Primer programa (3 pulsadores)

Segundo programa (2 pulsadores como conmutador)

Tercer programa (4 pulsadores)

Page 10: INFORME PULSADORES-INTERRUPCIONES

Cuarto programa (2 pulsadores uno solo prende y uno solo apaga)

Quinto programa (1 pulsador prende y apaga):

Page 11: INFORME PULSADORES-INTERRUPCIONES

INTERRUPCIONES

Sexto programa (interrupción 1)

Séptimo programa (interrupción 2)

Page 12: INFORME PULSADORES-INTERRUPCIONES

G. Conclusiones.

Mediante la práctica realizada se puede observar y evidenciar el funcionamiento y su gran cantidad de aplicaciones que puede tener el PIC16F628A, con la cual se puede cargar un programa previamente revisado y simulado para su correcta ejecución en el PIC16F628.

La simulación previa en ISIS de los diferentes programas realizados en microcode permite observar el correcto desempeño del programa antes de ser cargado en el PIC16F628A.

Para la aplicación de pulsadores, es necesario que en la programación se implanten condiciones IF.

Para el correcto funcionamiento del programa es necesario implantar una subrutina de antirebote.

Las interrupciones nos sirven para truncar algún procedimiento del programa para ejecutar otro.

H. Recomendaciones.

Las conexiones de los puertos deben estar correctamente conectados para que la simulación se ejecute correctamente.

Revisar el lugar exacto para colocar la línea de comando de los antirebotes.

En la subrutina, realizar una sola línea para cada condición de antirrebote.

Revisar cuidadosamente los comandos para activar y desactivar las interrupciones.

I. Referencias Bibliográficas.

http://books.google.com.ec/books?id=ODenKGOHMRkC&pg=PA217&lpg=PA217&dq=Interrupciones+%2B+microcontroladores&source=bl&ots=ukwM2j8c3y&sig=sgBERxA5UH1G5qlKV2mMImKi6iY&hl=es-419&sa=X&ei=sjxcUtr-MdCtkAfA-IEg&ved=0CEMQ6AEwBA#v=onepage&q=Interrupciones%20%2B%20microcontroladores&f=false [Visto: 13/octubre/2013]

http://www.circuitoselectronicos.org/2011/03/manejo-de-interrupciones-en-los.html [Visto: 13/octubre/2013]

http://www.puntoflotante.net/INTERRUPCIONES.htm [Visto: 13/octubre/2013]

http://es.wikipedia.org/wiki/Microcontrolador [Visto: 13/octubre/2013]

Page 13: INFORME PULSADORES-INTERRUPCIONES

J. ANEXO