Está en la página 1de 4

AN566

Resumen de documento “Using the PortB Interrupt on Change as an


External Interrupt”
Introducción
La familia de PIC16/17 del tipo RISC de microcontroladores fue diseñada para proveer un
avanzado desempeño y una solución a bajo costo para distintas aplicaciones. Para dirigir
estas aplicaciones, está la familia PIC16CXX que tiene numerosos periféricos para una
mejor dirección de las aplicaciones de usuario.
Una característica es “la interrupción en cambio” (IOC) en los pines RB7:RB4 del puerto
B, configurados como entradas que cambian de nivel. Cuando se los utiliza con las
resistencias internas programables “pull-ups” un interfaz directo con un teclado es posible.
Esto se muestra en la nota de aplicación AN552 (Implementando la activación al pulsar la
tecla). Otra forma de utilizar la IOC es como fuentes de interrupción externa. Esto permite
que los dispositivos PIC16CXX soporten múltiples interrupciones externas, en adición con
el pin INT.
Usando una entrada del Puerto B para una interrupción externa
La fuente de interrupción no puede simplemente ser conectada a los pines del puerto B, y
esperar que la interrupción funcione de igual forma que el pin de interrupción INT. La
característica de la señal de interrupción debe ser también conocida para desarrollar el
hardware/software del microcontrolador. Después de conocer esto, podemos determinar
la mejor forma de estructurar el programa para manejar esta señal. Estas características
incluyen:
1. Disparo de la interrupción en el flanco de subida, bajada o ambos.
2. Cuál es el ancho del pulso de la interrupción (tiempo largo o corto)
Es fácil de entender la necesidad de conocer cual flanco dispara la rutina de servicio de la
interrupción (ISR) externa. Esto permite asegurar que a la ISR solo se puede ingresar del
flanco deseado, con los otros flancos ignorados. Por otro lado, no es muy claro el ancho
de la interrupción. Esto determina la cantidad de gastos generales adicionales que la
rutina de software pueda necesitar.
La figura 1 muestra los dos casos en que la señal de interrupción completa la ISR. La
primera forma de onda es cuando la señal realiza la transición de un nivel bajo a alto y
nuevamente a bajo antes que la ISR se haya completado (bandera de interrupción
borrada). Cuando la bandera de interrupción se haya borrado la señal de interrupción ya
habrá retornado a su nivel inactivo. La siguiente transición de la señal es debida a otra
solicitud de interrupción. Una señal de interrupción con estas características será llamada
Señal de ancho de pulso pequeño. La segunda forma de onda es cuando la señal hace
una transición de bajo a alto antes que la ISR se haya completado (bandera de
interrupción borrada). La siguiente transición de un nivel alto a bajo retornara la señal de
interrupción a un nivel inactivo. Esto generara una interrupción “falsa”, la cual deberá ser
borrada. Entonces, la siguiente transición bajo a alto será una “verdadera” interrupción.
Una señal de interrupción con estas características será llamada Señal con ancho de
pulso amplio.
Un pulso de interrupción con una duración corta requiere menos gastos de recursos que
pulso de larga duración. Un pulso corto debe durar menos que el tiempo de ejecución
mínimo de la ISR, mientras que un pulso largo debe durar más que la ISR.
El ejemplo 1 muestra una interrupción simple en el puerto B (RB7), la cual ejecuta la ISR
en un flanco ascendente. La fuente de interrupción tiene un ancho de pulso pequeño o
corto. En este caso como el pulso es corto, el pulso fue a un nivel alto y luego a un bajo
antes que el Puerto B sea leído al final de la condición de desajuste (mismatch). Entonces
cuando el Puerto B es leído, éste leerá una señal de bajo nivel y esperara un próximo
flanco ascendente.

Ejemplo 2 muestra una simple fuente de interrupción en Puerto B (RB7), el cual ejecuta la
ISR en un flanco ascendente. La fuente de interrupción tiene un ancho de pulso largo. En
este caso desde que el pulso de interrupción es largo, el pulso continuara en un nivel alto
antes que el Puerto B sea leído para terminar la condición de desajuste. Entonces cuando
el Puerto B sea leído, éste leerá aún una señal en nivel alto, la cual más tarde producirá
una interrupción en el flanco descendente (el cual debería ser ignorado).

Ejemplo 3 muestra una IOC con la fuente de interrupción en el Puerto B (RB7). Esto
ejecuta la ISR en ambos flancos. La fuente de interrupción debe tener un ancho de pulso
mínimo para asegurar que ambos flancos puedan ser “vistos”. El ancho mínimo del pulso
es el tiempo máximo desde el flanco de la interrupción a la lectura del puerto B y borrado
de la bandera de interrupción.

Usando las entradas del puerto B para múltiples interrupciones


Los ejemplos previos fueron para una simple interrupción en el Puerto B. Esto puede ser
extendido para soportar 4 interrupciones externas. Para ello se requiere gastos de
recursos de software adicional, para determinar cuál de los pines del puerto B RB7:RB4
causaron la interrupción. Se debe tomar mucha precaución para asegurar que ninguna
interrupción se pierda.
En este ejemplo, las fuentes de interrupción están en RB7, RB5 y RB4 con un ancho de
pulso corto, mientras que la fuente de interrupción en RB6 es de pulso largo y debe
causar un disparo en el flanco de subida.

También podría gustarte