Autor Tema: Interrupcion externa por flanco  (Leído 5250 veces)

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

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
Interrupcion externa por flanco
« en: 04 de Noviembre de 2004, 07:33:00 »
Hola, alguien ha utilizado las interrupciones externas pero por flanco ascendente o descendente?

por deteccion de cambio ya lo he utilizado, pero he probado con la funcion ext_int_edge( L_TO_H );

y no se si no la pongo en el sitio que toca pero no me da los resultados esperados.

 LlorandoLlorandoLlorando  alguien que la aya utilizado?
- T0ni0 -
30RCF112

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Interrupcion externa por flanco
« Respuesta #1 en: 04 de Noviembre de 2004, 09:35:00 »
Si no pones el programa, no se puede detectar el error.

Desconectado JacoPastorius2004

  • PIC10
  • *
  • Mensajes: 42
RE: Interrupcion externa por flanco
« Respuesta #2 en: 04 de Noviembre de 2004, 16:02:00 »
Cabeza

Primero tenes que definir que flanco es el que queres que interrumpa, si el de subida o el de bajada, deshabilitando el que no quieras, para no tener interrupciones  no deseadas.
Otra es que una interrupcion por cambio de flanco en PB7:4 va a la misma rutina de servicio por lo que tenes que discernir en la rutina que pin la provoco. Preguntando por el estado actual de cada pin y comparandolo con el estado anterior, por ejemplo.
Depende tambien que tipo de señal provocara la interrupcion, si es un pulso corto en tiempo tendras dos cambios de nivel muy seguido.

En fin como dice el Pocher, mejor pone el codigo para analizarlo.

Jaco

Desconectado telekitor

  • PIC10
  • *
  • Mensajes: 30
RE: Interrupcion externa por flanco
« Respuesta #3 en: 08 de Noviembre de 2004, 02:18:00 »
funciona muy bien, la interrupcion es externa int0, int1 o int2 (18f452)
no confundas la habilitacion de la interrupcion con la seleccion del flaco
activo, no es lo mismo.

por ejemplo


/*****rutinas de atencion a las interrupciones: *****/

#INT_EXT
void irq_modo(void){
     //antirebotes
     delayantirebotes();

     modo = modo + 0x01;
     if(modo>0x02){
        modo = 0x00;
     }

}

#INT_EXT1
void irq_mas(void){
     //antirebotes
     delayantirebotes();

     if(modo = 0x02){
         notabase = notabase + 1;
         if(notabase>453){
            notabase = 453;
         }
     }
}

#INT_EXT2
void irq_menos(void){
     //antirebotes
     delayantirebotes();

     if(modo = 0x02){
        notabase = notabase - 1;
        if(notabase<427){
           notabase = 427;
           }
     }
}


//*********************programa principal**********************/

// programa principal
void main(void){


//inicializamos pic
inipic();

//inicializamos variables
modo = 0x02;
notabase = 440;

//inicializamos lcd
inilcd();


/***********habilitamos interrupcion********************/
enable_interrupts(GLOBAL);

enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
/*********seleccionamos flaco activo *************/
ext_int_edge(0, H_TO_L);
ext_int_edge(1, H_TO_L);
ext_int_edge(2, H_TO_L);




dios mio hasta funciona RebotadoRebotadoRebotadoRebotado

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Interrupcion externa por flanco
« Respuesta #4 en: 08 de Noviembre de 2004, 02:27:00 »
Escrito originalmente por telekitor

/*********seleccionamos flaco activo *************/
ext_int_edge(0, H_TO_L);
ext_int_edge(1, H_TO_L);
ext_int_edge(2, H_TO_L);




Eso era, solo habia pedido como se hacía no lo encontre en ninguna ayuda
THXAvergonzadoAvergonzadoAvergonzado
- T0ni0 -
30RCF112