Sei sulla pagina 1di 35

CLASE 4 DE SISTEMAS

EMBEBIDOS:
INTERRUPCIONES,
TEMPORIZADOR Y CAPTURA
MSc. Roberto Furukawa
Abril 2015
Grupo Responsable Tema Fecha
1 Jose Buitron 3 (registro de Semana 6
control y memorias)
2 Johan Callomamany 6 (captura y PWM) Semana 6
3 Marco Rodriguez 7 (A/D) Semana 7
4 José Carrasco 8 (comunicación Semana 7
serie sincrona)
5 Gianmarco Gutierrez 9 (USART) Semana 9
6 Cristopher Bazan 10 (PIC 18CXX) Semana 9
Contenido
 Interrupciones
 Temporizadores
 Módulos de captura, comparación y PWM

Alfredo Granados Ly
Interrupciones del PIC16F84

El PIC16F84 tiene 4 fuentes de interrupción:


 Por desbordamiento del TMR0.
 Fuente externa.
 Cambio en los pines RB7:RB4 del puerto B.
 Fin de grabación de la memoria EEPROM de datos.

Para producir una interrupción hay


que habilitar los bits correspondientes
de cada una de las fuentes (TOIE,
INTE, RBIE, EEIE) y el bit global (GIE).
Cuando una interrupción se activa (se
indica mediante el señalizador - flag)
el mC guarda en pila el PC+1 y toma
el valor 0004H.

Alfredo Granados Ly
Registro INTCON

Alfredo Granados Ly
Interrupciones del PIC16F84

El PIC16F84 sólo acepta una interrupción por vez. Para conocer quien de las
fuentes produjo la interrupción hay que explorar los tres flags del registro
INTCON y uno del registro EECON1.
Proceso de interrupción:
• Habilitación de la interrupciones en el registro INTCON.
• Al aceptar la interrupción:
– El PC+1 se almacena en la PILA,
– El bit GIE del registro INTCON se pone a ‘0’ no aceptando ninguna otra interrupción.
– El PC toma el valor 0004H correspondiente a la dirección del vector de interrupción.
• La rutina de interrupción deberá determinar quien ha producido la interrupción.
• Se realiza el proceso que corresponde a la fuente de interrupción.
• Borrar el señalizador (flag) de la interrupción.
• RETFIE
– Se extrae de PILA el valor de PC.
– Se coloca el bit GIE = ‘1’.

Se recomienda guardar (salvar) los registros que intervienen en la rutina de


interrupción: STATUS, W, otros.

Alfredo Granados Ly
Aplicaciones con Interrupciones

Modificar el programa para que el


contador de vueltas de un motor de C.C.
no utilice el TRM0.
Solución:
• Declarar una variable que se incremente
con cada pulso de interrupción.
• Utilizar la rutina de tiempo de 1 seg.
• Utilizar un bit del puerto A para completar
los 8 bits de visualización de la cuenta.

NOTA: Cuando se habilita una sola fuente de interrupción

Alfredo Granados Ly
Aplicaciones
1.- Realizar un programa para generar por el pin RB2 del PIC16F84 una señal
de
1KHz (DC=50%) - Utilice interrupciones.
2.- Escribir una rutina para determinar que fuente ha producido la interrupción.
3.- Escribir un programa para manejar un teclado al PIC16FXX.

Nota: No olvidar de borrar los flag de interrupciones.

Alfredo Granados Ly
Generar por el pin RB2 del PIC16F84 una señal
de 1KHz (DC=50%) utilizando Interrupciones.
Para generar una señal de 1KHz
utilizamos el TMR0 como temporizador.
La señal de reloj se obtiene del Cristal
de 4MHz (Tclk = 1us).
Utilizando el pre-escaler (1/2 ó Tclk =
2us), con lo cual el TMR0 se llena en
512us. Debemos hacer que el TMR0
comience a contar en 6 para que se
desborde a los 500 us.

Habilitamos la Interrupción por desbordamiento (TOIF=1), de ésta manera liberamos al CPU


de estar consultando el estado del bit TOIF.

Nota: Hay que poner a ‘0’ el bit TOIF por software. Hay que considerar las instrucciones que se
ejecutan entre el salto.

Alfredo Granados Ly
Detección de Fuente de Interrupción
Esta porción de código nos ayudará a determinar quién produjo la fuente de Interrupción
en el PIC16F84. Debemos consultar por cada una de las fuentes de interrupción:
TOIF = Desbordamiento TMR0.
INTF = Fuente externa.
RBIF = Cambio en los pines del RB7:RB4
EEIF = Fin de escritura de la EEPROM.
No olvidar que al final de la subrutina de interrupción debemos limpiar el flag que
generó la interrupción.

Alfredo Granados Ly
Manejo de Teclado Matricial
El teclado permite ingresar información
numérica al sistema. Es un elemento pasivo cuyo
diagrama interno se muestra en el gráfico.
Cuando se pulsa una tecla se hace contacto una
fila con una columna. Si no se pulsa ninguna
tecla, las filas están desconectadas de las
columnas.
El puerto B en los PIC16FXX está diseñado
para la conexión de teclados de este tipo ya
que contiene 8 resistencias internas (PULL-UP)
que se utilizan para evitar las entradas
flotantes cuando no se pulsa una tecla.
Forma de conexión:
FILA1 = RB4 (I) COL1 = RB0 (O)
FILA2 = RB5 (I) COL2 = RB1 (O)
FILA3 = RB6 (I) COL3 = RB2 (O)
FILA4 = RB7 (I) COL4 = RB3 (O)

Alfredo Granados Ly
Manejo de Teclado Matricial
Para explorar el teclado y averiguar si se ha pulsado una tecla, se envía un nivel bajo y
otros tres niveles altos por los terminales de columnas. Si existe una tecla pulsada en la
columna por la que se ha introducido un nivel bajo, dicho nivel saldrá por la fila
correspondiente que haga contacto, produciendo una interrupción por cambio de estado.
Entonces, leyendo los estados de los pines RB7-RB4 sabremos que que tecla se trata

FILAS (ENTRADAS) COLUMNAS (SALIDAS) CODIGO


TECLA
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 HEX
0 0 1 1 1 1 1 0 1 7D
1 1 1 1 0 1 1 1 0 EE
2 1 1 1 0 1 1 0 1 ED
3 1 1 1 0 1 0 1 1 EB
4 1 1 0 1 1 1 1 0 DE
5 1 1 0 1 1 1 0 1 DD
6 1 1 0 1 1 0 1 1 DB
7 1 0 1 1 1 1 1 0 BE
8 1 0 1 1 1 1 0 1 BD
9 1 0 1 1 1 0 1 1 BB
CLEAR 0 1 1 1 1 1 1 0 7E
HELP 0 1 1 1 1 0 1 1 7B
ENTER 0 1 1 1 0 1 1 1 77
2ND 1 0 1 1 0 1 1 1 B7
DOWN 1 1 0 1 0 1 1 1 D7
UP 1 1 1 0 0 1 1 1 E7

Alfredo Granados Ly
Interrupciones del PIC16F877

El PIC16F877 tiene 14 fuentes de interrupción, los mismos del PIC16F84 más:


 Por desbordamiento del TMR1.
 Por desbordamiento del TMR2.
 Por la captura o comparación del módulo CCP1.
 Por la captura o comparación del módulo CCP2.
 Transferencia en la puerta serie síncrona.
 Colisión de bus en la puerta serie síncrona.
 Fin de Transmisión del USART.
 Fin de Recepción del UART.
 Fin de la conversión de una muestra del A/D.
 Transferencia de la puerta paralela esclava (PSP).

El bit PEIE da permiso a los periféricos que no se controlan en el INTCON (11 fuentes).

Alfredo Granados Ly
Interrupciones del PIC16F877

El registro INTCON se encuentra en todos los bancos (0BH) y funciona de la misma forma
que en el PIC16F84. En el caso del PIC16F877 que contiene más fuentes de interrupción, los
bits que se encargan de generar las solicitudes de interrupción (Flag) y los respectivos
habilitadores se encuentran en 2 pares de registros:

PIE1 (8CH): Habilita al:


PSPIE: Operación de lectura/escritura de la puerta paralela esclava.
ADIE: Fin de conversión del A/D.
RCIE: Buffer lleno en RX del USART.
TXIE: Buffer vacío en TX del USART.
SSPIE: Puerta serie síncrona.
CCP1: Captura o comparación.
TMR2IE: Desbordamiento del Timer2
TMR1IE: Desbordamiento del Timer1

Alfredo Granados Ly
Interrupciones del PIC16F877

PIE2 (8CH): Habilita al:


-----: Siempre se lee 0.
0: Reservado. Siempre se lee 0.
-----: Siempre se lee 0.
EEIF: Fin de grabación de dato en la EEPROM.
BCLIE: Colisión de bus en el modo SSP..
-----: Siempre se lee 0.
-----: Siempre se lee 0.
CCP2IE: Captura o comparación 2.
PIR1(0CH): Contiene los bits señalizadores causantes de la interrupción.
D7 D6 D5 D4 D3 D2 D1 D0
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

PIR2(0DH): Contiene los bits señalizadores causantes de la interrupción.


D7 D6 D5 D4 D3 D2 D1 D0
---- 0 ---- EEIF BCLIF ---- ---- CCP2IF

Alfredo Granados Ly
Memoria EEPROM de Datos
En el PIC16F84 tenemos 64 bytes de memoria EEPROM para almacenar datos que por motivos
de la aplicación se desean mantenerse por periodos grandes de tiempo y son muy
importantes.
De acuerdo al fabricante esta memoria puede grabarse hasta 1’000,000 de veces y con
periodos de tiempo de hasta 40 años.

El uso de la memoria EEPROM requiere de 4 registros (caso PIC16F84):


EEDATA (09H): Registro que contiene el dato leído o el dato a grabar.
EEADDR (0AH): Contiene la dirección a acceder para leer/escribir..
EECON1 (89H): Controla las operaciones de memoria EEPROM.
EECON2 (8BH): Utilizado para asegurar el proceso de escritura.

En el caso del PIC16F877 se utilizan los mismos registros, pudiendo grabar como máximo 256
bytes. La operación de escritura dura entre 10ms a 2 ms dependiendo del PIC utilizado.

Alfredo Granados Ly
Memoria EEPROM de Datos

Alfredo Granados Ly
Watch Dog Timer (WDT)
Los mCs PIC cuenta con un circuito de
vigilancia también llamado Watch
Dog (WD) que consisten en un
contador de 8 bits y su función es la
de reiniciar el sistema ante fallas de
programación.

El circuito de vigilancia tiene su propio


oscilador RC, el cual no requiere de
componentes externos; esto permite
que el WDT continúe corriendo, aún si
el reloj del mC se detiene (por ejemplo
con la instrucción SLEEP).

Al desbordarse el contador produce un RESET, el cual se puede evitar periódicamente


borrando la cuenta del WDT con la instrucción CLRWDT.

Alfredo Granados Ly
Watch Dog Timer (WDT)
El período fundamental del WDT es de 18ms. Este tiempo varía con la temperatura y el
voltaje de alimentación y las condiciones en el proceso de fabricación de las partes. Si se
requieren períodos más largos, se puede utilizar el pre-escalador del registro OPTION,
logrando períodos de hasta 2.3 seg.

Problema:
Calcular cada cuantas instrucciones en nuestro programa debemos colocar una instrucción
CLRWDT para evitar que el mC se re-inicie (se sabe que se tiene conectado un Xtal de
4MHz al PIC16F877).

Alfredo Granados Ly
Modo de Bajo Consumo (SLEEP)
Es un modo en el cual se detiene la operación del PIC y el consumo de corriente es mínimo
(en el orden de los 0.01mA). El PIC entra a este modo después de ejecutar la instrucción
SLEEP.
En este estado se detiene la ejecución de las instrucciones, así como se bloquea cualquier
entrada al TMR0 (ya sea como contador ó temporizador). Si el WDT está habilitado,
entonces la cuenta se limpia después de ejecutar SLEEP, pero no detiene al oscilador RC,
con lo cual pasado un determinado tiempo el WDT reactivará al PIC.

Los puertos conservan el estado que tenían antes de ejecutarse la instrucción SLEEP. Para el
más bajo consumo en este modo, todos los pines de entrada/salida deben estar
conectados a 5v o a tierra y el pin MLCR (RESET) a nivel alto.

Para que el mC salga de este modo tenemos:


 aplicando una señal al pin MCLEAR (señal de RESET).
 por una interrupción: fuente externa (RB0) ó cambio en RB7:R84.
 por el desbordamiento del WDT.

Alfredo Granados Ly
TMR1
Es un contador de 16 bits, que tiene las siguientes características:
 Temporizador (fxtal/4) - Contador (ext: RC0) - Oscilador (fxtal: RC0-RC1)
 Pre-escalador: 1, 1/2, 1/4, 1/8.
 Habilitador de cuenta (TMR1ON).
 Sincronización de los pulsos externos con los internos.
 Reset del Timer-1 por CCP1 (comparador).

Alfredo Granados Ly
T1CON

Alfredo Granados Ly
T1CON
Diferentes formas de configuración para el trabajo del TMR1:
 Pre-escalador: 1/8.
 Se recomienda habilitar el TIMER1 después de configurarlo:
MOVLW H’30’
MOVWF T1CON1
BSF T1CON1,TMR1ON

Alfredo Granados Ly
TMR1 como reloj de tiempo real
Muchas de las aplicaciones requieren de
medir exactamente el tiempo (seg), por lo que
el el TMR1 se adapta perfectamente a éste
tipo de requerimiento.

A continuación se muestra los tiempos de


desbordamiento del TMR1 cuando entre sus
terminales RC0 y RC1 se conecta un Xtal de
32.768 KHz

Tiempo Tiempo
Pre-escaler TMR1H
Overflow Overflow
1 2 seg 80H 1 seg
2 4 seg C0H 0.5 seg
4 8 seg E0H 0.25 seg
8 16 seg F0 0.125 seg

Frecuencia 32.768 KHz

Alfredo Granados Ly
TMR2
Es un contador de 8 bits, que tiene las siguientes características:
 Sólo modo temporizador (fxtal/4).
 Pre-divisor: 1, 1/4, 1/16.
 Post-divisor: 1, 1/2, 1/3, 1/4,...... 1/15, 1/16
 Capaz de ocasionar interrupción al coincidir TMR2 y PR2.
 Capaz de generar los baudios para el puerto serial síncrono (SSP).
 Habilitador de cuenta (TMR2ON) - no funciona en modo SLEEP.

Alfredo Granados Ly
T2CON
El pre-divisor y post-divisor se ponen a 0 al escribir en el TMR2.

Alfredo Granados Ly
USO del TMR2
El TMR2 del PIC se complementa muy bien con los módulos CCP (captura / comparación)
y SSP (puerto serial síncrono).
Al funcionar como modo temporizador podemos liberar al TMR0 de realizar las funciones
de generador de base de tiempos.
Ejemplo: Escribir un programa para generar una señal de 200Hz por el pin RA0 del
PIC16F877.
Nota: considere la frecuencia del cristal de 4MHz.

Alfredo Granados Ly
CCP (Capture/Comparation/PWM)
Los módulos de captura y comparación están diseñados para complementar el trabajo
de los temporizadores: TMR1 y TMR2.
Cada módulo CCP contiene un registro de 16 bits el cual puede operar como un
registro de captura de 16bits, como un registro de comparación de 16 bits ó como un
registro de 10 bits PWM. Ambos módulos CCP1 y CCP2 funcionan de manera idéntica
con excepción en el modo de disparo especial.
Cada módulo CCP tiene 3 registros:

CCP1CON y CCP2CON: registro de control


de los módulos CPP.
CCPR1H y CCPR2H: CCP byte alto.
CCPR1L y CCPR2L: CCP byte bajo.
CCP1 y CCP2: Pines del mC.

Alfredo Granados Ly
CCP (Capture/Comparation/PWM)

Alfredo Granados Ly
CCP (Modo Captura)
En modo captura el valor que tiene el TMR1 es capturado en los registros CCPR1H y
CCPR1L cuando ocurre un evento especial por el pin RC2/CCP1 o RC1/T1OSI/CCP2
(estos pines deben ser configurados como entrada: TRISC).
La captura se realiza por la ocurrencia de los siguientes eventos:
CCPxM3 CCPxM2 CCPxM1 CCPxM0 FORMA DE CAPTURA
0 0 0 0 Módulo CCPx desconectado.
0 1 0 0 Un flanco ascendente.
0 1 0 1 Un flanco descendente.
0 1 1 0 Cada 4 flancos ascendentes.
0 1 1 1 Cada 16 flancos ascendentes.

Al efectuarse la captura, el señalizador


CCP1IF del registro PIR1 se pone a
‘1’ pudiendo generar una interrupción
si es que se encuentra habilitado.
En el modo captura el TMR1 debe
estar como temporizador o contador
síncrono.

Alfredo Granados Ly
CCP (Modo Captura)
Aplicación: Medir el tiempo existente entre los impulsos que llegan al pin RC2/CCP1.

Solución:
- TMR1 como temporizador.
- Modo captura con cada flanco descendente.
- Generar una interrupción en el modo de captura para cargar las variables.
- Multiplicar el valor capturado por el factor del predivisor para calcular el tiempo
exacto.

Alfredo Granados Ly
CCP (Modo Comparación)
En este modo se compara de manera continua el contenido del:
TMR1H con CCPRxH y
TMR1L con CCPRxL,
ocurriendo el evento que se muestra en esta tabla cuando ambos registros coinciden:

CCPxM3 CCPxM2 CCPxM1 CCPxM0 FORMA DE COMPARACION


1 0 0 0 Pone a 1 el pin RC1/CCP2 - RC2/CCP1
1 0 0 1 Pone a 0 el pin RC1/CCP2 - RC2/CCP1
1 0 1 0 Genera una interrupción sin afectar los pines
1 0 1 1 Disparo especial - diferente para cada pulso

El TMR1 debe trabajar en modo


temporizador o contador síncrono (no
como modo asíncrono).
En el modo de disparo especial el
módulo CCP1 limpia el TMR1 y el
CCPR1H-L funciona como un registro
de período capaz de producir
interrupciones de manera periódica.

Alfredo Granados Ly
CCP (Modo PWM)
En este modo se consigue controlar la duración del nivel alto (el pin RC2/CCP1 está
como salida). Para controlar los cambios del pin RC2/CCP1 se usa dos comparadores.
Uno hace que un flipflop se pone a 1 cuando PR2 = TMR2, poniendose luego el TMR2
a cero.
Luego el flipflop se pone a 0 cuando CCPR1H= TMR2.

CCPxM3 CCPxM2 CCPxM1 CCPxM0 Función


1 1 X X Modo PWM

Alfredo Granados Ly
CCP (Modo PWM)

Alfredo Granados Ly

Potrebbero piacerti anche