sábado, 23 de noviembre de 2019

LABORATORIO NRO. 12

MANEJO DEL TIMER Y LAS INTERRUPCIONES

1. CAPACIDAD TERMINAL:
  • Utilizar al microcontrolador en aplicaciones de control electrónico.
  • Desarrollar y ejecutar programas en un microcontrolador PIC
  • Programar y configurar interfaces básicas del microcontrolador.
2. COMPETENCIA ESPECIFICA DE LA SESIÓN:
  • Conocer el funcionamiento y la configuración de las interrupciones.
  • Programar eficientemente el LCD.
  • Programar HMI para el proyecto actual.
2. MARCO TEÓRICO:

2.1. MICROCONTROLADORES:

Los principiantes en electrónica creen que un microcontrolador es igual a un microprocesador. Esto no es cierto. Difieren uno del otro en muchos sentidos. La primera y la más importante diferencia es su funcionalidad. Para utilizar al microprocesador en una aplicación real, se debe de conectar con componentes tales como memoria o componentes buses de transmisión de datos. Aunque el microprocesador se considera una máquina de computación poderosa, no está preparado para la comunicación con los dispositivos periféricos que se le conectan. Para que el microprocesador se comunique con algún periférico, se deben utilizar los circuitos especiales. Así era en el principio y esta práctica sigue vigente en la actualidad.

al-mundo-de-los-microcontroladores-chapter-01-fig0-1

Por otro lado, al microcontrolador se le diseña de tal manera que tenga todas las componentes integradas en el mismo chip. No necesita de otros componentes especializados para su aplicación, porque todos los circuitos necesarios, que de otra manera correspondan a los periféricos, ya se encuentran incorporados. Así se ahorra tiempo y espacio necesario para construir un dispositivo.

2.2. PIC16F877A:
Es un microcontrolador de MicroChip Technology familia a la cual se le denomina PIC, fabricado por tecnología CMOS. Tiene ventajas como su consumo de potencia que es muy bajo y ademñas es completamente estático (el reloj puede detenerse y los datos de la memoria no se pierden). Tiene una memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje, pues permite reprogramarlo nuevamente sin ser borrado con anterioridad.

CARACTERÍSTICAS
Las características principales de estos dispositivos son:
  • CPU de arquitectura RISC (Reduced Instruction Set Computer).
  • Set de 35 instrucciones.
  • Frecuencia de reloj de hasta 20MHz (ciclo de instrucción de 200ns).
  • Todas las instrucciones se ejecutan en un único ciclo de instrucción, excepto las de salto.
  • Hasta 8K x 14 palabras de Memoria de Programa FLASH.
  • Hasta 368 x 8 bytes de Memoria de Datos tipo RAM.
  • Hasta 256 x 8 bytes de Memoria de Datos tipo EEPROM.
  • Hasta 15 fuentes de Interrupción posibles.​
  • 8 niveles de profundidad en la Pila hardware.
  • Modo de bajo consumo (Sleep).
  • Tipo de oscilador seleccionable (RC, HS, XT, LP y externo).
  • Rango de voltaje de operación desde 2,0V a 5,5V.
  • Conversor Analógico/Digital de 10 bits multicanal.
  • 3 Temporizadores.
  • Watchdog Timer o Perro Guardián.
  • 2 módulos de captura/comparación/PWM.
  • Comunicaciones por interfaz USART (Universal Synchronous Asynchronous Receiver Transmitter).​
  • Puerto Paralelo Esclavo de 8 bits (PSP).
  • Puerto Serie Síncrono (SSP) con SPI e I²C.
    ENCAPSULADOS


    REGISTROS INTERNOS


    DIAGRAMA INTERNO


    2.3. INTERRUPCIONES:


    Una interrupción es un aviso provocado por un módulo del PIC, por un cambio en el estado de un pin o un recordatorio de que ha pasado un cierto tiempo. Como su nombre indica este aviso interrumpirá la tarea que se este haciendo en ese momento y pasaremos a ejecutar una rutina de servicio o gestión de la interrupción.

    Veremos un repaso de los bits y registros de control asociados a las diferentes interrupciones, como habilitarlas y como escribir rutinas de servicio (ISR). Crearemos definiciones (#define) que nos permitirán operar con las interrupciones sin tener que recordar los bits/registros asociados, a la vez que facilitarán la tarea de portar nuestro programa a otro compilador y/o microcontrolador. 

    Es importante familiarizarse con el manejo de interrupciones, ya que nos evita poder manejar muchos tipos de eventos sin estar pendientes de ello. En sucesivos tutoriales veremos como el uso de interrupciones nos permite aprovechar de forma mucho más eficiente los recursos del PIC.

    2.4. HABILITACIÓN DE INTERRUPCIONES:



    Antes de entrar en detalles sobre cada interrupción por separado hemos de describir un par de bits (bits 7 y 6 del SFR INTCON) que tienen un efecto global sobre la activación de bloques de interrupciones. 



    INTCON.GIE  -> habilita (1) o deshabilita (0) todas las interrupciones.
    INTCON.PEIE -> habilita (1) o deshabilita (0) las interrupciones asociadas a módulos periféricos.

    Por ejemplo, antes de poder usar la interrupción del temporizador TMR0 debemos asegurarnos de que las interrupciones globales estén habilitadas (INTCON.GIE=1).  Si lo que deseamos es usar la interrupción asociada a la recepción del puerto serie, tanto INTCON.GIE como INTCON.PEIE deben estar a 1, ya que dicha interrupción está declarada como periférica.

    Para usar estos bits de una forma más conveniente incluiríamos los siguientes defines (en el programa principal o bien en un fichero .h incluido en el proyecto):

    // Global flags (without priority levels)
    #define enable_global_ints  INTCONbits.GIE=1
    #define enable_perif_ints   INTCONbits.PEIE=1
    #define disable_global_ints INTCONbits.GIE=0
    #define disable_perif_ints  INTCONbits.PEIE=0


    Hay varias razones para usar estas (o similares definiciones):
    • Siempre es más facil recordar enable_global_ints que acordarse de que hay que poner a 1 el bit GIE del registro INTCON.
    • Si cambiamos a otro compilador donde la forma de direccionar los bits de los registros es diferente, basta cambiar las definiciones (esto es, usar un fichero .h distinto). En el caso p.e. del compilador MikroC Pro en vez de INTCONbits.GIE usaríamos INTCON.GIE.
    • Si cambiamos a otro controlador, puede que los bits correspondientes cambien de registro y/o nombre. De nuevo, un cambio en el fichero de encabezamiento hace que no sea preciso cambiar el resto del código.
    3. EVIDENCIA DE TAREAS EN LABORATORIO:


    4. OBSERVACIONES:
    • Debemos declarar en el código una librería especifica, para poder programar la pantalla LCD de forma sencilla.
    • La programación ejecutada en el software de Proteus no presenta errores en la simulacion; lo que nos permite probar nuestro codigo con mayor facilidad.
    • Para realizar el conteo de nuestro temporizador, debemos cambiar los signos de + a - en nuestro "void timer" y, realizar algunos cambios extras para que el temporizador realize el conteo de forma descendente.
    5. CONCLUSIONES

    • Logramos conocer el funcionamiento y la configuración de interrupciones.
    • Programamos eficientemente el LCD en torno a un temporizador regresivo; ya que, logramos cumplir todas las condiciones indicadas en el reto del laboratorio.
    • Logramos diseñar un programa que cumpla con las condiciones indicadas en el laboratorio, de tal forma que, consolidemos nuestros conocimientos generales de programación.

    No hay comentarios:

    Publicar un comentario