Autor Tema: Pregunta de novato: Interrupciones  (Leído 6371 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Pregunta de novato: Interrupciones
« en: 03 de Mayo de 2008, 10:40:26 »
Buenas, el título es descriptivo, pero antes de me mandéis usar el buscador me explico:
Tengo dudas sobre las interrupciones y son muy básicas ya que acabo de introducirme en el mundo de los microcontroladores, así que las enumero:
1.- ¿Qué es una interrupción?
2.- ¿Cómo se usa?
3.- ¿Los Pic's sólo tienen una patilla para usar interrupciones?
4.- ¿Se pùeden eventos de interrupción para otras patillas que no sea la definida como INT?
Como véis son preguntas muy básicas y no he visto en ningún manual respuesta efectiva a ellas ya que te explican directamente cómo usarlas y tal.......pero no voy a usar algo que no sé lo que es........por lógica más que nada.
Gracias por adelantado a los que respondan.
Salu2.

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Pregunta de novato: Interrupciones
« Respuesta #1 en: 03 de Mayo de 2008, 10:54:49 »
Con que PIC deseas trabajar de acuerdo a ellos se te podrian dar respuestas mas concretas.

1.- Una interrupcion es un proceso mediante el cual el microcontrolador deja lo que esta haciendo para atender a una subrutina, hasta donde tengo entendido hay Int por Hardware y por Software.

2.- Esta pregunta es muy general, se usa dependiendo del tipo de interrupcion q queramos habilitar, por ejemplo en la INT TIMER0 tenemos que habilitar primero esa interrupcion para despues activarla cada vez que se desborde el timer0 entrando en una subrutina de programa.

3.- No dependiendo de los modelos

4.- Si el pin no esta definido en el data sheet que puede generar una interrupcion no podras generar una interrupcion por el.

No creo q encuentres un manual que defina todo lo que deseas como te digo vas a tener q ir utilizando las interrupciones de acuerdo al pic que uses ya que cada modelo trae diferentes caracteristicas.
El conocimiento se consigue a base de esfuerzo...

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Pregunta de novato: Interrupciones
« Respuesta #2 en: 03 de Mayo de 2008, 11:24:36 »
1.- ¿Qué es una interrupción?
2.- ¿Cómo se usa?
3.- ¿Los Pic's sólo tienen una patilla para usar interrupciones?
4.- ¿Se pùeden eventos de interrupción para otras patillas que no sea la definida como INT?

R1. Es un suceso especial q el microcontrolador atiende cuando ocurre, ejecuta una pequeña rutina y al terminar ella vuelve al lugar de ejecución del programa donde ocurrió la interrupción.
R2. Se usa configurándolo, según como te dice la hoja de datos, se habilitan y deshabilitan bits según corresponda, y esos bits tb indican cuando ha sucedido la interrupción (bandera)
R3. No, los PIC's tienen muchas formas de interrumpirse, la int por una patita solo es un tipo de interrupcion, en microcontroladores de la familia 16Fxxx si es solo un pin, pero en familias superiores como la 18Fxxx tiene como 3 pines (otros talvez más) dedicados a interrupciones externas. Pero ambas familias tienen otro tipo de interrupciones internas.
R4. No
.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Re: Pregunta de novato: Interrupciones
« Respuesta #3 en: 03 de Mayo de 2008, 11:28:45 »
Gracias por las respuestas, pero hay algo que no me cuadra, dices que según el modelo no todos los PIC's tienen sólo una patilla para activar interrupciones, pero hojeando así por encima distintas hojas de características de PIC's veo que los 12F629, 16F84a, 16F876, 18F2550........sólo tienen una patilla INT :?
Voy a poner un supuesto de uso:
Imaginemos que tengo un circuito alimentado a baterías, éste circuito tiene 3 pulsadores y cada uno de ellos activa un relé, tengo el PIC permanentemente en una rutina de loop esperando que se pulse uno de los tres pulsadores para cambiar de estado.
El problema de esto es que el PIC consume mucho más que si lo pongo en modo Sleep y mediante interrupciones hago que el PIC "despierte" para activar el relé correspondiente al pulsador usado y una vez activado el relé vuelva al estado Sleep.
Si los PIC sólo tienen una patilla que active interrupciones no puedo hacerlo con los tres pulsadores.
Sé que es más que probable que haya otra manera de hacer que el circuito gaste menos baterías, pero lo que me interesa es aprender sobre las interrupciones ya que es algo cuyo concepto no tengo muy claro, sí sé que mediante una interrupción se puede sacar al PIC del estado Sleep.....y que ése es sólo uno de los usos.
Salu2.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Pregunta de novato: Interrupciones
« Respuesta #4 en: 03 de Mayo de 2008, 11:38:05 »
el 12F y los 16F si efectivamente solo tienen un pin de INT, pero el 18f2550 si te fijas bien tiene 3 pines de interrupción externa INT0, INT1 e INT2, que son los pines RB0, RB1 y RB2 respectivamente, y con ello si podrias hacer lo q pretendes de los 3 pulsadores.

pero existen otras formas de interrupción, por ejemplo por variación del nibble alto del puerto B en muchos microcontroladores, esto es de RB4 a RB7, con ello tienes hasta 4 pines para pulsadores

tb existe el desborde por TMR0, TMR1, y talvez otro timer mas, ellos pueden ser usados con un reloj externo, que podría ser un pulsador por ejemplo, si siempre tienes al timer a punto de desbordar con tu pulsador provocarías una cuenta al TMRx y por tanto una interrupción "externa" creada.

como ves puedes optar por varias formas de usar las interrupciones.

y como te mencione en mi 1ra respuesta, una vez ejecutada la interrupción, vuelve a donde estaba, si estaba en un ciclo de SLEEP, vuelve ahi
.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Re: Pregunta de novato: Interrupciones
« Respuesta #5 en: 03 de Mayo de 2008, 12:38:51 »
el 12F y los 16F si efectivamente solo tienen un pin de INT, pero el 18f2550 si te fijas bien tiene 3 pines de interrupción externa INT0, INT1 e INT2, que son los pines RB0, RB1 y RB2 respectivamente, y con ello si podrias hacer lo q pretendes de los 3 pulsadores.

No me había dado cuenta de que el 18f2550 tenía 3 patillas de INT, error mío.......

Citar
pero existen otras formas de interrupción, por ejemplo por variación del nibble alto del puerto B en muchos microcontroladores, esto es de RB4 a RB7, con ello tienes hasta 4 pines para pulsadores

¿Esto mismo se puede hacer con el puerto GPIO que tiene el 12F629? Es el que estoy usando ahora mismo para la aplicación mencionada anteriormente ya que tiene el patillaje justo para mi aplicación: 3 entradas y 3 salidas.

Citar
tb existe el desborde por TMR0, TMR1, y talvez otro timer mas, ellos pueden ser usados con un reloj externo, que podría ser un pulsador por ejemplo, si siempre tienes al timer a punto de desbordar con tu pulsador provocarías una cuenta al TMRx y por tanto una interrupción "externa" creada.

Perdona, pero aquí ya me pierdo, ya he dicho que soy novato con el tema de los microcontroladores, por lo que aún no controlo ni de desbordes ni el uso de timers ni nada, así que este tipo de programación lo dejaré para cuando esté algo más iniciado en el tema, para hacerte a la idea de mi nivel, ahora mismo sólo controlo lo que respecta a las entradas y salidas y programo en Basic porque el ensamblador me resulta imposible de entender por mucho que lo haya intentado (que lo he hecho) y el C aún lo tengo "bajo observación" por si le pillo el tranquillo, así podría usar el compilador gratuito de microchip, cosa que me atrae bastante más que tener que usar un programa de pago para poder programar en Basic.

Citar
como ves puedes optar por varias formas de usar las interrupciones.

y como te mencione en mi 1ra respuesta, una vez ejecutada la interrupción, vuelve a donde estaba, si estaba en un ciclo de SLEEP, vuelve ahi

Espero llegar al nivel de conocimiento necesario para poder hacer cosas como las que me has explicado arriba, sólo llevo 2 semanas con el tema y he aprendido más de lo que esperaba, por lo que no descarto poder hacer cosas así en menos de 3 meses.......todo es ponerse 8)
Gracias por las respuestas y los consejos, pronto espero poder ser de los que ayudan y aportan algo en el foro.
Salu2.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Pregunta de novato: Interrupciones
« Respuesta #6 en: 03 de Mayo de 2008, 13:16:31 »
Citar
¿Esto mismo se puede hacer con el puerto GPIO que tiene el 12F629? Es el que estoy usando ahora mismo para la aplicación mencionada anteriormente ya que tiene el patillaje justo para mi aplicación: 3 entradas y 3 salidas
si ese micro tiene interrupción por cambio de estado en el puerto:


así q te servirá muy bien en tu trabajo, solamente talvez tengas q tener en cuenta q todo el puerto se ve afectado por ello y solo deberás fijarte en los pines q sean necesarios

sobre lo de desborde, para q ya estes con la idea, es el cambio que tiene el timer del maximo valor al minimo, es decir que en el caso del timer0 (q en micros de la familia 12f 16F) es de 8 bits cambie de 255 a 0. ya q el timer siempre se incrementa (ya sea con un reloj interno o externo)

Siempre como referencia puedes usar la hoja de datos del microcontrolador q utilizas, eso lo encuentras en la pagina del fabricante, microchip.com
.

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Pregunta de novato: Interrupciones
« Respuesta #7 en: 03 de Mayo de 2008, 13:20:35 »
te recomiendo que te des una revisada rapida por este hilo:

[urlhttp://www.todopic.com.ar/foros/index.php?topic=14634.0][/url]

y entra a EJEMPLITOS DE C PARA 16F648

Te juro q ahi aprenderas C para PIC de manera rapida
El conocimiento se consigue a base de esfuerzo...

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Pregunta de novato: Interrupciones
« Respuesta #8 en: 03 de Mayo de 2008, 13:32:14 »
No es necesario saber lenguaje C para entender las interrupciones que posee los micro.

Para entender las interrupciones, es mejor que lo veas funcionar y que mejor que con el MPLAB para simularlo en modo paso a paso e ir fijándose que es lo que hace el CP (contador de programa). Una pequeña anecdota: Yo empezé hace poco con la programación (antes no programaba nada, nada, de nada) y empezé con los PIC, imaginate lo que me costó aprender esta nueva forma de pensar, esta nueva lógica y todo lo que conlleva la programación y lo hise en forma autodidacta (por hobbie), me leí un manual tantas veces, que lo sabía de memoria, y n lograba entender nada. Y todo me cerro cuando lo vi funcionar. Lo vi con el MPLAB y empece a entender todo.

Como esa anecdota y experiencia, te aconsejo que hagas lo mismo. Toma un ejemplo de una interrupción y miralo funcionar. Chequea el siguiente link:

http://www.todopic.com.ar/foros/index.php?topic=1124.msg9345#msg9345


Suerte.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Re: Pregunta de novato: Interrupciones
« Respuesta #9 en: 03 de Mayo de 2008, 13:55:37 »
si ese micro tiene interrupción por cambio de estado en el puerto:


así q te servirá muy bien en tu trabajo, solamente talvez tengas q tener en cuenta q todo el puerto se ve afectado por ello y solo deberás fijarte en los pines q sean necesarios

sobre lo de desborde, para q ya estes con la idea, es el cambio que tiene el timer del maximo valor al minimo, es decir que en el caso del timer0 (q en micros de la familia 12f 16F) es de 8 bits cambie de 255 a 0. ya q el timer siempre se incrementa (ya sea con un reloj interno o externo)

Siempre como referencia puedes usar la hoja de datos del microcontrolador q utilizas, eso lo encuentras en la pagina del fabricante, microchip.com
Llevé a imprimir por completo la hoja de características del 12F629 por lo que me la he leído por encima, pero siempre hay cosas que se le escapan a uno, en esto no me había fijado, sinceramente creo que es que no le había prestado atención al no saber cómo funciona lo de las interrupciones, creo que va a ser una buena forma de practicar con ellas, continuando el proyecto que ya tengo funcionando y optimizándolo para que gaste menos baterías.
Estudiaré lo del desborde del timer leyendo el post al que me ha remitido Leon Pic, aunque sea con un Atmel creo que por lo menos me puede servir para comprender mejor el funcionamiento.
No quiero ser pesado preguntando pero........supongo que puedo programar el Pic para que sólo responda a las interrupciones en algunos de los pins del micro (en mi caso los pins que corresponden a los pulsadores) ¿no?
Es que leyendo eso de los cambios en el puerto GPIO me hace suponer que reaccionará a cualquier cambio que suceda en el puerto.......pero supongo que se podrá programar cuando quiero que reaccione y cuando no quiero que lo haga........joder, soy un mar de dudas y me voy a ahogar :D
Salu2.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Re: Pregunta de novato: Interrupciones
« Respuesta #10 en: 03 de Mayo de 2008, 13:59:27 »
Me respondo a mi mismo en uno de los puntos:

3.2.2 INTERRUPT-ON-CHANGE
Each of the GPIO pins is individually configurable as an
interrupt-on-change pin. Control bits IOC enable or
disable the interrupt function for each pin. Refer to
Register 3-4. The interrupt-on-change is disabled on a
Power-on Reset.


Seguiré estudiando el datasheet, creo que voy a encontrar la solución a todas mis preguntas ahí mismo delante de mis narices.
Salu2.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Pregunta de novato: Interrupciones
« Respuesta #11 en: 03 de Mayo de 2008, 14:02:27 »
Hola Conguito. Si te fijas en el link que te pasé, msantiago, en ese mismo link, hiso un programa para un 16f84. Es un detalle que tendría que ver mencionado antes.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Conguito

  • PIC10
  • *
  • Mensajes: 13
Re: Pregunta de novato: Interrupciones
« Respuesta #12 en: 03 de Mayo de 2008, 14:32:16 »
No te preocupes, de todas formas iba a leerlo, si no me equivoco las interrupciones son algo "universal" en los microcontroladores, da igual el que sea........¿o no? :shock:
Salu2.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Pregunta de novato: Interrupciones
« Respuesta #13 en: 03 de Mayo de 2008, 15:05:20 »
la interrupcion es la forma de reducir el polling en la programación de los pic

esto induce a pensar como que el pic ejecutara una forma de multiprocesamiento, ya que deja que el módulo que posea/active la interrupción haga un trabajo independiente y simultáneo mientras el contador de programas ejecuta lineas de código en el bucle principal.


Citar
...es la forma de reducir el polling...

no por ello dejaremos de hacer preguntas acerca del estado de aquel proceso en el que activamos la interrupción.


polling: dentro del contexto de los uC PIC, significa preguntar acerca de alguna información, su traducción sería poleo o encuesta.
« Última modificación: 03 de Mayo de 2008, 15:11:56 por PalitroqueZ »
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado MiCrOtRoNiC

  • PIC18
  • ****
  • Mensajes: 271