750 likes | 955 Views
PICmicro GAMA MEDIA: PIC16F84 [III]. DTO. INGENIERIA ELECTRÓNICA. TEMA 5. PICmicro GAMA MEDIA: PIC16F84 [III]. Interrupciones Es un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución de un programa en cualquier momento.
E N D
PICmicro GAMA MEDIA: PIC16F84 [III] DTO. INGENIERIA ELECTRÓNICA TEMA 5
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • Es un mecanismo por el cual un evento interno o externo puede interrumpir la ejecución de un programa en cualquier momento. • Al producirse la interrupción se produce un salto a la rutina de atención a la interrupción, atendiendo al evento. • Al terminar esta rutina se retorna a la ejecución del programa principal en el exacto lugar donde se produjo la interrupción. • Esta técnica permite al micro ejecutar el programa principal sin necesidad de estar preguntando a los posibles elementos de interrupción (técnica polling), lo que provoca esperas innecesarias o paradas de programa.
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • Cuando se produce una interrupción el PIC deja automáticamente lo que esté haciendo, va directo a la dirección 04h de programa y ejecuta lo que encuentre a partir de allí hasta encontrarse con la instrucción RETFIE que le hará abandonar la interrupción y volver al lugar donde se encontraba antes de producirse dicha interrupción • El PIC16F84 dispone de cuatro fuentes de interrupción: • INT: por activación del pin RBO/INT • RBI: por cambio de estado en una o varias de las 4 líneas RB4 a RB7. • T0I: por desbordamiento del TIMER0. • EEI: por finalización de escritura en la EEPROM de datos.
PICmicro GAMA MEDIA: PIC16F84 [III] Registro Especial: INTCON (0Bh-Banco 0 ; 8Bh Banco 1) TIPOS DE INTERRUPCION HARDWARE. - DEL TMR0 - POR RBO/INT - POR CAMBIO EN RB4-RB7. - POR LLENADO DE LA EEPROM TMR0 RB0 RB4-7 Habilitación individual Flags de interrupción Habilitación general
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • El proceso HARDWARE de atención de la interrupción es el siguiente: • Salva el valor del contador de programa PC en la pila. • El bit GIE del registro ITCON es puesto a cero, lo que inhibe cualquier otra interrupción. • El PC se carga con el valor 04h que es la posición del vector de interrupción. • Se ejecuta la rutina de atención de interrupción direccionada en 04h • El bit GIE del registro ITCON es puesto a 1.
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • Los bit localizados en el ITCON habilitan y configuran las interrupciones: • Un bit actúa como FLAG de señalización indicando si se ha producido la interrupción (T0IF, INTF, RBIF, EEIF) • El otro bit habilita o no la interrupción particular (T0IE, INTE, RBIE, EEIE, GIE) • El bit GIE habilita o no de modo general las interrupciones • XXIF: flags de eventos • XXIE: máscara particular • GIE: máscara general Si está dormido, despierta si aparece un 1 Hay interrupción si aparece un 1
PICmicro GAMA MEDIA: PIC16F84 [III] • Registro Especial: INTCON • En cada uno de los bit de máscara si hay un 0 la interrupción está deshabilitada, con un 1 se habilita. • En cada uno de los bits de flags un 0 indica que no se ha producido interrupción y un 1 que si que ha producido. • Los flags (T0IF, INTF, RBIF) se deben borrar por software antes de salir de la interrupción (en caso contrario se volvería a entrar en la interrupción). • El bit GIE se pone a 0 tras un RESET. Por lo tanto, a priori las interrupciones están deshabilitadas. • Al producirse el salto a la rutina de interrupción el bit GIE se pone a 0. Al retornar de la rutina (con RETFIE) el bit GIE se pone a 1.
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • LATENCIA DE INTERRUPCIÓN es el tiempo que pasa desde que se provoca la interrupción hasta que se inicia la ejecución de la instrucción de la posición de memoria de programa 04h. • La interrupciones síncronas (como TIMER) tienen una latencia de 3 ciclos de instrucción. • Las interrupciones asíncronas (como INT) tienen una latencia de 3 a 3.75 ciclos de instrucción.
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • Cuando se produce una interrupción solo se guarda en la pila hardware interna el valor del PC. • Normalmente, se deberán salvar algunos otros registros para no perder su contenido al regresar al programa principal y tras haber pasado por la rutina de interrupción, máxime cuando se ignora cuándo se va a producir el salto a ese programa de tratamiento desde el programa principal. • Típicamente, estos registros son al menos el W y el STATUS (imaginemos que se produce el salto a la rutina de interrupción en un punto donde se iba a testear un bit del registro STATUS ó se iba a escribir en un registro el contenido de W). • También puede resultar interesante guardar el registro PCLATH, especialmente si en la rutina de interrupción se cambia de página de memoria de programa. • Como no hay pila en RAM, ni instrucciones “PUSH” y “POP”, hay que reservar posiciones de memoria en RAM que habitualmente denominaremos W_TEMP, STATUS_TEMP y PCLATH_TEMP donde se guardan los valores de W, STATUS y PCLATH al entrar en la rutina de interrupción para luego recuperarlos al salir.
PICmicro GAMA MEDIA: PIC16F84 [III] • Fases de una Interrupción: • Habilitar, por programa, las interrupciones correspondientes: • movlw b’10111000’ • movwf INTCON • Al producirse la interrupción el flag correspondiente se activa, si el bit de máscara correspondiente está a 1 y el bit GiE está a 1 se produce la interrupción. • Automáticamente el bit GIE se pone a 0. • El valor del contador de programa PC se guarda en la pila. • El PC se carga con el valor 04h. • El programa principal debe comenzar la rutina de atención a la interrupción con un salto a la posición de memoria donde se encuentra la subrutina. • ORG 0 • Goto inicio • ORG 4 • Goto serviciointerrupcion
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • El programa debe guardar todos los registros que puedan ser modificados en la subrutina. • CBLOCK • Guarda_w • Guarda_STATUS • Guarda_registroA • Guarda_registroB • --------- • ENDC • Serviciointerrupcion • movwf Guarda_W ;guarda W y STATUS • swapf STATUS,W ;pues “movf STATUS,W” corrompe el bit Z • movwf Guarda_STATUS • movf RegistroA,W ;guarda el contenido de RegA • movwf Guarda_RegistroA • -----
PICmicro GAMA MEDIA: PIC16F84 [III] • Interrupciones • Averiguar que evento/s ha producido una interrupción actuando en consecuencia. • btfsc INTCON,INTF • call interrupcion_INT • btfsc INTCON,RBIF • call interrupcion_RBI • btfsc INTCON,T0IF • call interrupcion_T0I • Al finalizar el tratamiento de la interrupción el programa debe devolver los valores guardados. • movf Guarda_RegistroA,W ;restaura contenido RegA • movwf RegistroA • swapf Guarda_STATUS,W;restaura STATUS • movwf STATUS • swapf Guarda_W,F ;restaura W sin alterar el STATUS • swapf Guarda_W,W • bcf INTCON,INTF ;limpia los flags de interrupción • ---- • retfie
PICmicro GAMA MEDIA: PIC16F84 [III] • INTERRUPCIÓN INT/RBO • El PIN 0 (RB0/INT) es una entrada de interrupción. • Se habilita o Deshabilita por registro: INTCON Configuración por registro: OPTION_REG
Vcc RB0 RB7 PICmicro GAMA MEDIA: PIC16F84 [III] INTERRUPCIÓN INT/RBO
PICmicro GAMA MEDIA: PIC16F84 [III] • INTERRUPCIÓN RBI • Interrupción por cambio de nivel en las patillas RB4-RB5-RB6-RB7. • Se habilita o Deshabilita por registro: INTCON • Teclado matricial (Activación de la interrupción para detección de la pulsación de una tecla). • Tal como se comentó en el tema anterior, la identificación de la tecla pulsada se puede realizar por MUESTREO SECUENCIAL o por INVERSIÓN DE LÍNEA.
PICmicro GAMA MEDIA: PIC16F84 [III] • INTERRUPCIÓN RBI • Las filas se conectan a la parte baja del puerto B configuradas como salidas. • La columnas a la parte alta del puerto B configuradas como entradas y habilitadas las resistencias de pull-up. • En las filas se aplica el código 0111 en anillo. Si se presiona una tecla al pasar el 0 por la fila, aparece en la columna correspondiente. • Si no hay tecla pulsada, cada pin de la parte alta del puerto “lee” un 1 debido a las resistencias de pull-up. • Las resistencias serie de las filas permite utilizar estas líneas (a la vez) para otras funciones evitando cortocircuitos.
PICmicro GAMA MEDIA: PIC16F84 [III] • Resta complemento a 2: • 15: 00001111 7: 00000111 • 15 11110001 -15: 11110001 • 0 00000000 –> C=1 - 8: 11111000 ->C=0
PICmicro GAMA MEDIA: PIC16F84 [III] PRÁCTICA 4
PICmicro GAMA MEDIA: PIC16F84 [III] • EEPROM DE DATOS (Interrupción) • El PIC16F84 tiene 64 bytes de memoria EEPROM localizados en las direcciones de 00h a 63h que pueden ser leidos o escritos. La característica más importante es que su contenido se mantiene aún sin tensión de alimentación por más de 40 años. • La memoria EEPROM está localizada de tal forma que se debe acceder por registros: • EEDATA: Contiene el dato a leer o a escribir • EEADR: Contiene la dirección de la EEPROM por donde empezara el acceso • EECON1: Contiene bits de control. • EECON2: Este registro no existe físicamente y sirve para proteger la EEPROM en caso de escritura accidental. • EECON1 es un registro de control implementados con 5 bits. Los Bits 5, 6 y 7 no se utilizan y siempre son cero. • La escritura de la EEPROM requiere un tiempo mínimo.
PICmicro GAMA MEDIA: PIC16F84 [III] • EEPROM DE DATOS (Interrupción) • RD (bit 0): a "1" iniciamos el ciclo de lectura, cuando acaba el ciclo se pone a "0" automáticamente. • WR (bit 1): a "1" indicamos que comienza el ciclo de escritura, cuando acaba el ciclo se pone a "0" automáticamente. • WREN (bit 2): si lo ponemos a "1" se permite la escritura, a "0" no se permite. • WRERR (bit 3): error de escritura, si está a "1" indica que no se ha terminado el ciclo de escritura. • EEIF (bit 4): interrupción de ciclo de escritura de la EEPROM, si está a "1" indica que el ciclo de escritura ha terminado, hay que ponerlo a "0" por programa. • Bits del 5 al 7 no se utilizan.
PICmicro GAMA MEDIA: PIC16F84 [III] • EEPROM DE DATOS (Interrupción) • Lectura: • El registro EEADR debe contener la posición de memoria a leer. • Poner a 1 el bit RD de EECON1 • El micro pone a 0 este bit al terminar la lectura (es prácticamente inmediato), • Leer en EEDATA el dato direccionado. • Escritura: • Cargar en EEDATA el dato a grabar. • Carga en EEADR la dirección a grabar. • “deshabilitar interrupciones” • Al terminar de escribir, se pone a 1 el flag EEIF de EECON1 y el WR se pone a 0. • Estos dos bit se deben restaurar para otra escritura.
PICmicro GAMA MEDIA: PIC16F84 [III] • EEPROM DE DATOS (Interrupción) • La directiva DE del MPSAM permite reservar palabras dentro de la EEPROM asignandoles un valor. Para ello se debe fijar la posición 2100h. • ORG 0x2100 • DE “programa V.1.1” • El entorno MPLAB permite visualizar el contenido de la EEPROM mediante la opción VIEW>EEPROM.
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • ES UN CONTADOR (REGISTRO) DE 8 BIT: INCREMENTADO POR HARDWARE Y PROGRAMABLE. • LA CUENTA MÁXIMA ES DE 255 (EL INCREMENTO ES CTE. E INDEPENDIENTE) • CONTADOR: CUENTA EVENTOS EXTERNOS (POR PIN RA4/TOCK1) • TEMPORIZADOR: CUENTA PULSOS INTERNOS DE RELOJ • Se puede insertar un prescaler, es decir un divisor de frecuencia programable que puede dividir por 2, 4, 8, 16, 32, 64, 128 o 256. • SE PUEDE PROGRAMAR CON LA CUENTA INICIAL(v.g. 20) Y LLEGA POR SI SOLO HASTA 255DONDE VUELVE A EMPEZAR DESDE 0.LA FRECUENCIA DE CONTEO ES PROPORCIONAL A LA FRECUENCIA DE RELOJ.
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • LA FRECUENCIA DE CONTEO ES UNA CUARTA PARTE DE LA DE RELOJ Fosc/4. Con el uso del PRESCALER se puede dividir posteriormente la frecuencia configurando oportunamente los bits PS0, PS1 y PS2 del registro OPTION.
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • Registros implicados: INTCON / OPTION_REG / TRISA • INTCON: permite trabajar con la interrupción del TIMER0. • OPTION_REG: Configura el “hardware” del TIMER0. • TRISA: habilita la patilla RA4
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • INTCON T0IE <5>. Permiso de interrupción por desbordamiento del TMR0. 1 habilita la interrupción al desbordarse el TMR0 0 inhabilita esta interrupción. T0IF <2>. Flag de desbordamiento del timer. Se debe de poner a 0 después de un desbordamiento. 1Se pone a 1 cuando ocurre un desbordamiento 0 Indica que el TMR0 no se ha desbordado
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • OPTION_REG TOCS <5> . Procedencia de las señales (1 RA4/TOCK1) (0 reloj interno) TOSE <4> . Tipo de flanco en el TOCK1/RA4 (1 flanco descendente)(0 flanco ascendente) PSA <3> . Divisor de frecuencias. (1 WDT )(0 TMR0 ) PS2-PS1-PS0 <2> <1> <0> . Determina el divisor de frecuencias a actuar según tabla.
PICmicro GAMA MEDIA: PIC16F84 [III] • TIMER0 (Interrupción) • Cálculo temporizador: • El tiempo de desbordamiento de un TMR cargado a 99 con prescala 1:32 con fck=4MHz • T= Tcm x Prescaler x (256 – Carga TMR0) = 4 x (1/4000000) x (256 - 99) x 32 = 5ms
PICmicro GAMA MEDIA: PIC16F84 [III] • Comprobarlo con el ISIS (usar el Counter Time) y montarlo
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES • El PIC16F84A tiene una serie de elementos con los que se intenta máximizar la capacidad del sistema, minimizando costes a través de la eliminación de componentes externos: Tales elementos son: • OSC Selection • RESET • Power-on Reset (POR) • Power-up Timer (PWRT) • Oscillator Start-up Timer (OST) • Watchdog Timer (WDT) • SLEEP • Code Protection • ID Locations • In-Circuit Serial Programming™ (ICSP™)
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES • La mayor parte de las características especiales se establecen en unos bits que residen en una palabra de iguales características que la memoria de programa pero está fuera del mapa de memoria de código a la que se puede acceder en ejecución normal. Es la llamada PALABRA DE CONFIGURACIÓN. • Dicha palabra está en la dirección 2007h de la memoria de programa, pero no es accesible directamente durante el funcionamiento normal del micro, sólo durante la programación.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES • Los bits de configuración pueden ser programados (puestos a 0) o dejados sin programar (quedan a 1, estado que tienen cuando están “limpios”), con objeto de seleccionar varias configuraciones del microcontrolador: tipo de oscilador, protección o no del programa, uso ó no del watchdog, etc. • El valor no programado de la palabra de configuración es 0x3FFF (todo “1”) • Al estar los bits de configuración en la posición 2007h de la memoria de programa (fuera del espacio de memoria de programa de usuario) es únicamente accesible durante la programación del micro y no durante la ejecución de un programa. • Por tanto es especialmente importante cargar correctamente esos bits durante la programación para conseguir que el microcontrolador pueda funcionar luego en su estado de ejecución normal.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES • La palabra de configuración puede especificarse desde el propio programa o desde las ventanas de trabajo de los programadores. • Los distintos tipos de software/hardware de programación siempre permiten configurar estos bits.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES • El ensamblador de MICROCHIP tiene una característica que permite especificar, en el propio fichero fuente las selecciones de los bits de configuración. De esta forma, se asegura que al programar el dispositivo también se programe la configuración de acuerdo a los requisitos de la aplicación, evitando la programación equivocada de la configuración y, por tanto que el dispositivo no funcione correctamente. Esta característica consiste en el uso de la directiva CONFIG. A continuación se detalla un ejemplo y una tabla con los posibles valores para configuración. • _ _ CONFIG • Mediante el símbolo & se “enlazan” las etiquetas • de configuración ; Configuration Bits ;********************************* _CP_ON EQU H'000F' _CP_OFF EQU H'3FFF' _PWRTE_ON EQU H'3FF7' _PWRTE_OFF EQU H'3FFF' _WDT_ON EQU H'3FFF' _WDT_OFF EQU H'3FFB' _LP_OSC EQU H'3FFC' _XT_OSC EQU H'3FFD' _HS_OSC EQU H'3FFE' _RC_OSC EQU H'3FFF'
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: OSCILADOR • El PIC16F84 pueden funcionar con 4 modos distintos de oscilador. El usuario puede programar dos bits de configuración para seleccionar uno de estos 4 modos: • LP Low Power Crystal (cristal de cuarzo ó resonador cerámico hasta 200KHz) • XT Crystal/Resonator (cristal de cuarzo ó resonador cerámico hasta 4MHz) • HS High Speed Crystal/Resonator (cristal de cuarzo entre 4MHz y 20MHz) • RC Resistor/Capacitor (red RC externa hasta 4MHz) • Otros PIC de la familia PIC16 tienen un número mayor de modos para el oscilador y, por tanto, un número mayor de bits para seleccionar. Estos otros modos son: • EXTRC External Resistor/Capacitor • EXTRC External Resistor/Capacitor with CLKOUT • INTRC Internal 4 MHz Resistor/Capacitor • INTRC Internal 4 MHz Resistor/Capacitor with CLKOUT
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: OSCILADOR • En los modos XT, LP o HS, se conecta un cristal de cuarzo o un resonador cerámico a los pines OSC1 y OSC2 tal y como se indica en la figura adjunta. Normalmente no se pone la resistencia Rs, que se sustituye por un cortocircuito. Los valores de los condensadores C1 y C2 dependen del cristal o resonador escogido. En las tablas adjuntas se pueden ver valores típicos para estos condensadores
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: OSCILADOR • En los modos XT, LP o HS también se puede utilizar un oscilador de cuarzo ó módulo de cristal que ya te proporciona la señal de reloj directamente sin hacer uso de la circuitería interna del microcontrolador para generar el oscilador.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: OSCILADOR • En aplicaciones donde la precisión a la hora de medir tiempo o temporizar no tiene porqué ser muy elevada, la opción RC es una solución válida y de bajo coste. En este caso se conectan externamente una resistencia y un condensador tal y como se indica en la figura adjunta. • La frecuencia de oscilación depende de la tensión de alimentación VDD, del valor de la resistencia REXT, del valor del condensador CEXT y de la temperatura de funcionamiento. Por tanto, de una tarjeta con un micro a otra con el mismo micro y valores de REXT y CEXT, la frecuencia de oscilación podrá variar acorde a la tolerancia en los valores de REXT y CEXT. • La frecuencia del oscilador dividida por 4 se obtiene como salida en el pin OSC2/CLKOUT
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: OSCILADOR • En las características eléctricas de cada micro se dan gráficas que te permiten escoger el valor de la resistencia para un valor del condensador, temperatura y tensión de alimentación determinadas 20pF 300pF 100pF
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: WATCHDOG • El temporizador Watchdog es un temporizador existente en el microcontrolador basado en un oscilador RC interno, independiente del oscilador del microcontrolador y que no requiere ningún componente externo. El WATCHDOG contará incluso si el reloj conectado a OSC1/CLKI y/o OSC2/CLKO está parado, por ejemplo, por la ejecución de una instrucción SLEEP ó por un defecto del cristal oscilador. • Este oscilador RC interno no tiene nada que ver con un posible oscilador RC externo conectado a la patilla OSC1/CLKI. • El funcionamiento o no del Watchdog se debe seleccionar en la palabra de configuración a la hora de grabar el microcontrolador: bit WDTE de la palabra de configuración a 1 -> activo (por defecto tras el borrado del microcontrolador); si está a 0 -> inactivo
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: WATCHDOG • Si está activo, durante el funcionamiento normal del microcontrolador, un desbordamiento (ó time-out) del Watchdog provoca un Reset del microcontrolador (Watchdog Timer Reset). Para que no se desborde, cada cierto tiempo y antes de que llegue al límite, se debe ejecutar una instrucción CLRWDT que “limpia” el Watchdog y le hace comenzar una nueva cuenta desde cero. • Si el dispositivo está en modo dormido, un desbordamiento del watchdog provoca que el micro despierte y continue con el funcionamiento normal (Watchdog Timer Wake-Up) con la instrucción que sigue a SLEEP (la que lo mandó a dormir). • El bit /TO del registro STATUS se pone a cero tras un desbordamiento del Watchdog y nos permite conocer tal circunstancia de desbordamiento.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: WATCHDOG • El time-out mínimo, tiempo que tarda en desbordar (sin postscaler) para el WATCHDOG viene dado por el siguiente parámetro: • Ese tiempo, como se puede comprobar, es muy variable al depender de una red RC. • Un postscaler es un divisor de frecuencia que puede hacer que se cuente antes el número de desbordamientos del WDT y hacer así que el tiempo que tarda en resetear al microcontrolador sea más largo. El inconveniente es que ese divisor de frecuencia está compartido con el TMR0 y por tanto, si se usa para el TMR0 no se puede usar para el WATCHDOG y viceversa.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: WATCHDOG • El divisor de frecuencia del WATCHDOG viene definido por unos bits del registro OPTION: • PSA: a quién se le asigna el divisor • PS2-PS1-PS0: cuál es el factor de división de la frecuencia: • 000: 1:2 para TMR0/1:1 para WDT. 100: 1:32 para TMR0/1:16 para WDT. • 001: 1:4 para TMR0/1:2 para WDT. 101: 1:64 para TMR0/1:32 para WDT. • 010: 1:8 para TMR0/1:4 para WDT. 110: 1:128 para TMR0/1:64 para WDT. • 011: 1:16 para TMR0/1:8 para WDT. 111: 1:256 para TMR0/1:128 para WDT.
PICmicro GAMA MEDIA: PIC16F84 [III] • PARÁMETROS ESPECIALES: WATCHDOG • .