Cantidad de Interrupciones de un PIC

#1
Saludos, hay bastante material gracias a muchos amigos del Foro, gracias a ustedes he logrado hacer un sistema con el uso de la interrupción por RB0 y por cambio de estado RB4 -RB7 (que son 4), pero pregunto: Si por ejemplo quiero utilizar 5 o más interrupciones; entonces, se PUEDE utilizar la interrupción por RB0, la interrupcion por cambio de estado RB4-RB7, he leído que también hay por TMR0 o algo asi, JUNTAS? De tal manera que pueda tener más de 4 interrupciones (como he logrado hasta ahora por cambio de estado). Gracias amigos.
 
#2
En principio se puden poner todas las que dispongas.
Normalmente se atienden en orden de llegada y en orden de prioridad; una interrupción puede sr interrupida por una de mayor prioridad. Si es de menor prioridad se atiende después de acabar con la de mayor.
 
#3
Sí puedes usar todos los recursos del microcontrolador al mismo tiempo, pero teniendo en cuenta que se debe estructurar bien la programación para que un proceso no afecte a otro.
Cada interrupción es independiente y se ejecuta inmediatamente, quedando en el stack (Apilada) para ser ejecutada.
 
#4
Sí puedes usar todos los recursos del microcontrolador al mismo tiempo, pero teniendo en cuenta que se debe estructurar bien la programación para que un proceso no afecte a otro.
Cada interrupción es independiente y se ejecuta inmediatamente, quedando en el stack (Apilada) para ser ejecutada.
Gracias D@rbytes, gracias Scooter, con esa premisa, ahora a estructurar y para comenzar, voy a a tratar de usar la RB0 y las RB4-RB7, juntas.
Saludos amigos.
 
#5
Hay que leer el datasheet para ver la prioridad de las interrupciones. Apenas he usado PICs, por no decir directamente que no los he usado ya que solo he hecho monerías con ellos, pero en otros de puede cambiar la prioridad de algunas o todas las interrupciones en caso de ser necesario.

Yo que soy "muy de interrupciones", tampoco suelo activar demasiadas. Por ejemplo en los conversores AD, si conozco el tiempo de conversión, lo que hago es lanzar la conversión, intercalar alguna cuestión útil que dure mas y leer el resultado.
Creo que nunca he usado mas de cuatro a la vez.
 
#6
La prioridad de las interrupciones en los PIC, solo está considerada en los PIC18 y familias superiores.
En los PIC12 y 16, el sistema de interrupciones se da conforme se adquieran o se dispongan.
Y sí, una interrupción por conversión AD no es conveniente, pues se estaría ejecutando continuamente, restando prioridad a las demás.
Por ejemplo, si se requiere mostrar una lectura estable cada X tiempo, lo conveniente será usar un timer y una bandera, y tras eso, leer el conversor.
Ahora que si se trata de un sistema como un osciloscopio, entonces sí será prioritario el muestreo AD por interrupción.
Por eso es importante definir y estructurar de qué forma se debe comportar el programa.

Como ejemplo, en este sistema de adquisición de datos AD, requiero una alta prioridad de conversión en dos canales.
Curve Tracer OSD.jpg

Para ello tuve que usar un PIC18F67J50 y comunicación USB Bulk y también realicé la versión HID.
Este microcontrolador me permite realizar todos los procesos necesarios y casi todo el programa está basado en interrupciones.
 
#7
Por el tono de la pregunta no sé si quiere incluso añadir mas interrupciones; si que se puede hacer, de hecho los microprocesadores cásicos solían tener solo dos, una mascarable y otra no mascarable.
Si por ejemplo necesitas interrupciones por 16 líneas, se puede usar un expansor I2C y activar su interrupción, cada vez que se active una de esas líneas mandará un pulso de interrupción y la rutina de atención a la interrupción deberá de leer los registros del expansor I2C para saber por cual de los 16 pines se generó esa interrupción y actuar en consecuencia.
 
#8
Así es, de hecho también existen circuitos con varios ADC por I2C y cuentan con salida de interrupción.
Lees la interrupción externa y obtienes lo que hay en el bus correspondiente.
Es una buena forma de expandir tus E/S cuando se disponen pocas.
 
#9
Recuerdo allá por 1980 traté de operar una rs323 a lo mas alta velocidad disponible entonces. El procesador era un MC6809 a 1 MHz. Resulta que el MC6809 acabó usando tanto tiempo sirviendo la interfaz que el flujo de datos efectivamente resulto menos a operar la interfaz con una velocidad menor! esto acabó por sensibilizarme para el resto de mi vida y solo trabajar con interrupciones para este tipo de operaciones
 
#10
Buen día a todos.

Soy principiante en la programacion de PICs. Actualmente estoy diseñando una alarma pero tengo problemas ya que quiero utilizar interrupciones para la misma y al conectar un teclado en el puerto b estas no me funcionan. Mis preguntas son ¿Se puede conectar al puerto b el teclado y simultáneamente utilizar las interrupciones de rb0 y rb4-rb7? ¿Hay interrupciones en otros pines?
He intentado conectar el teclado al puerto d, sin embargo no he logrado que funcione.
Actualmente utilizo el pic 16F8777a y programo en CCS compiler.

Agradezco mucho su iluminación y conocimiento.
Saludos!
 
#11
Cada pin vale para una única cosa como es lógico.
Si ya lo usas en algo ya no lo puedes usar para otra cosa salvo que hagas algún montaje "ingenioso".
 
#12
Hola Autodic, creo que habras querido poner pic 16F877a ya que el 16F8777a no lo conozco, yo no soy un experto en en pics pero como bien indica Scooter cada pin vale para una unica cosa, perooooooooo, hay que matizar creo yo, en el puerto b, de ese mismo pic, se puede conectar conjuntamente un teclado y una pantalla LCD, solo hay que hacer la configuracion correspondiente, dicho de otra manera, algunos pins se puede usar para dos funciones.
 

Arriba