Autor Tema: Manejo de Interrupciones de fuentes externas al PIC  (Leído 8140 veces)

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

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Manejo de Interrupciones de fuentes externas al PIC
« en: 24 de Octubre de 2006, 13:48:58 »
Hola,

mirando los ejemplos que hay publicados y el manual del CCS me quedan dudas sobre cómo detectar una interrupción proveniente de una fuente externa al PIC, ya sea un pulsador, biestable, etc...

En los ejemplo se tratan muy bien las interrupciones INT_RB e INT_EXT. La primera genera una interrupción por cualquier cambio en un pin (desde RB4 hasta RB7) del puerto B. Y la segunda se encarga de avisar cuando en RB0 ha habido un cambio H_TO_L o L_TO_H según tengamos configurado el pin. Hasta aquí perfecto, pero en otro PIC donde no hay puerto B aparecen interrupciones en su librería que no se cómo tratar.

Por ejemplo, en el PIC16F676 (con el que estoy haciendo las pruebas y ejemplos) me salen las siguientes:


#define INT_EXT                   0x0B10
#define INT_RA                    0x0B08
#define INT_RA0                   0x010B08
#define INT_RA1                   0x020B08
#define INT_RA2                   0x040B08
#define INT_RA3                   0x080B08
#define INT_RA4                   0x100B08
#define INT_RA5                   0x200B08

He obviado las correspondientes a fuentes internas como los TIMERS, A/D, etc...

Entonces mi duda es: INT_EXT es cómo en un PIC16F84 pero para RA0 en lugar de para RB0??
INT_RA para qué pines es? Sólo para A4 y A5 puesto que A6 y A7 no existen?

Y luego para qué son INT_RA0, INT_RA1, etc...

He probado a hacer un programa que detecte interrupción en RA0 de la siguiente forma:

...

#INT_RA0
void Int_de_A0()
{
...
}

Pero me dice que INT_RA0 no es válido como directiva. Entonces cómo se usa?

Creo que muchas de las dudas que un novato puede tener sobre interrupciones quedarán resueltas en este post. No pretendo una solución rápida y fácil sino descubrir cómo interpretar las librerías .h de los dispositivos en referencia a las interrupciones.

Un saludo y gracias a todos!!
« Última modificación: 24 de Octubre de 2006, 13:51:54 por DarkVect »

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #1 en: 24 de Octubre de 2006, 19:34:15 »

 Pues en efecto, no encuentro ninguna directiva para INT_RA.

      por que no tratas leyendo en el datasheet aver que tipo de interrupciones se manejan en el puetro A de ese pic.


            o talvez sea un error de CCS, quien sabe, nunca he utilizado ese PIC. Tratare de averiguar que sucede.


       Suerte, saludos.  :-)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #2 en: 24 de Octubre de 2006, 19:57:34 »
el INT_EXT para 16F84 es siempre es RB0,

esas interrupcion INT_RA me parece q refieren a los conversores A/D, lo detallo en la siguente:

Hablando del 16F676

Interrupciones puerto A:
RA0 interrupcion A/D o Comparador o cambio de estado
RA1 interrupcion A/D o Comparador o cambio de estado
RA2 interrupcon A/D o Comparador o cambio de estado
RA3 interrupcion cambio de estado
RA4 interrupcion A/D o Comparador o cambio de estado
RA5 interrupcion cambio de estado

Rc0 interrupcion A/D
Rc1 interrupcion A/D
Rc2 interrupcon A/D
Rc3 interrupcion A/D

tienes q leer con mas detalle el data sheet del 16f676, lo bajas de la pagina de microhip o de cualquier lugar, espero te ayude mi colaboracion, si tienes mas dudas,pregunte nomas amigo aca tamos para resolverlas :-/.






a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #3 en: 24 de Octubre de 2006, 20:03:15 »

   pues al compilar un pequeño programa con solo
 
Código: [Seleccionar]
enable_interrupts(int_ra);

#INT_RA
compila perfrecto, el problema viene al poner
   #INT_RA1  al RA5

      Pues creo que lo que sucede es lo siguiente:

   Al parecer son interrupciones al cambio, es decir, habra interrupcion cuando en determinado pin del puerto A halla una trancicion H a L  o  L a H

   con:  enable_interrupts(int_ra0);   enable_interrupts(int_ra1);  .... etc te encargas de habilitar la interrupcion al cambio de dicho pin unicamente, el resto del puerto funcionara como entrada o salida, dependiendo de tu configuracion en trisa.

    en el caso de que configures varios pines para interrupcion, imagino que ya tu te encargaras de ver que pin genero la interrupcion dentro de #INT_RA


   y pues creo que es asi como funciona, sino que alguien me corrija.

        saludos  :mrgreen:

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #4 en: 24 de Octubre de 2006, 20:09:52 »
   
   Te me has adelantado mientras escribia micro_cadaver   :D :D

      bueno, insisto, para interrupcion al cambio sera #INT_RA

   para conversores A/D es  #INT_AD


           Saludos :-/

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #5 en: 24 de Octubre de 2006, 20:15:50 »
 :D jejeje
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #6 en: 25 de Octubre de 2006, 06:33:48 »
Voy a releer el Datasheet del PIC a ver si me aclaro un poco más.

Yo también había pensado que con enable/disable_Interrupts(INT_RAx) activas las interrupciones en cada pin de forma independiente para luego usar #INT_RA y en la rutina de interrupción detectar qué pin es el que ha cambiado de estado.

De todas formas la interrupción INT_EXT que en muchos otros PIC es para RB0 y que además permite ser configurada como H_TO_L o L_TO_H en este no tendría sentido, no? Ya que con INT_RA0 ya puedes obtener la interrupción de se pin.

Además en la librería aparcen las definiciones H_TO_L y L_TO_H para usarse con la función EXT_INT_EDGE() con lo que para algo servirán.

Voy a ver si descubro algo...

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #7 en: 25 de Octubre de 2006, 06:51:09 »
Releído el Datasheet es así como funciona. Cada pin del puerto A pude configurarse para que interrumpa en un cambio de estado de forma independiente a cómo estén configurados los otros pines.

Aunque el misterio de INT_EXT sigue ahí ¿?

Una duda que me ha salido al leer el Datasheet es:

Pone que las interrupciones "on-change" se desactivan en un Power_On_Reset. Qué significa exactamente?

Y por otro lado, dice que este de interrupciones son fruto de la comparación del registro de estado del puerto actual con el estado de la última vez que fue leído. Supongo que entonces en cada interrupción debo leer todo el puerto para actualizar el registro. Existe algún comando que me devuelva el estado de todo el puerto??

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #8 en: 25 de Octubre de 2006, 16:53:32 »
- INt_EXT no hay misterio, en el pic16F676 el pin EXT_INT es RA2, mira bien el datasheet  :-)

- power on reset : al mantenerse reseteado o al resetearse el chip se borran los flags del registro de interrupcion INTCON por ejemplo, a eso se refiere, esos bits son los q disparan las interrupciones.

- bueno si quieres leer el puerto A,
  movfw PORTA   
  movwf TU_REGISTRO

  si quieres el flag de disparo, esta en el registro INTCON.  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #9 en: 26 de Octubre de 2006, 06:23:49 »
Ains!!!! Si lo pone bien claro y grande... RA2 External Int. Perdón... es lo que tiene ser novato ;)

Con lo de leer el puerto me refería a hacer algo así en C (extraído de un ejemplo):

changes = last_b ^ port_b
last_b=port_b;

Con esto supongo que el registro de estado ya queda actualizado para interrumpir en el nuevo cambio de estado de algún pin... en este caso de puerto B.

Gracias y un saludo!!


Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #10 en: 26 de Octubre de 2006, 16:27:26 »
si , pero eso lo hace el hardware del chip por si solo, porq lo deseas hacer tu tambien o no entindi  tu mensaje???  :?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #11 en: 26 de Octubre de 2006, 18:57:53 »
Eso es lo que no sabía. Si después de una interrupción guarda el registro de estado después de esta para compararlo cuando haya un cambio en un pin de nuevo. Pensaba que si no hacías la lectura del port_b no lo actualizaba.

De todas formas, quiero saber qué pin ha sido el de la interrupción, por lo que debo utilizar ese código o algo muy similar.

Gracias!!

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #12 en: 26 de Octubre de 2006, 19:00:18 »
sip en ese caso estas en todo correcto, porq la interrupcion por si sola no discierne entre q pin de los 4 fue el q activo la interrupcion, exitos amigo! :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado DarkVect

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 302
Re: Manejo de Interrupciones de fuentes externas al PIC
« Respuesta #13 en: 27 de Octubre de 2006, 08:45:39 »
Gracias!!! Estamos en ello!!

Un saludo!!