Autor Tema: Leer dos pulsos en un intervalo de tiempo...  (Leído 1960 veces)

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

16f84

  • Visitante
Leer dos pulsos en un intervalo de tiempo...
« en: 25 de Septiembre de 2008, 23:33:17 »
Hola, Estoy intentando hacer lo siguiente...

Tengo un codigo que chequea si se producen dos pulsos o un pulso en un determinado tiempo 1000ms.  Con el primer pulso se dispara la interrupcion, asigna el valor de i=1 y espera al segundo pulso si se produce el segundo pulso incrementa uno a i, sino, espera 1000ms y si no pasa nada deja todo como está.
Consegui llegar a la interrupcion, funciona bien y todo pero lo que no puedo hacer es que lea el segundo pulso.

Les dejo una parte del codigo de la interrupcion, que supongo que es lo mas importante. Probé con un while con unos if pero no pasa nada.

Código: [Seleccionar]
#int_EXT
void EXT_isr()
{
   delay_ms(4);
  
   i=1;
   set_timer1(0);
   while(get_timer1() <= 65500){
            if(input(pin_a2)==1){
                 if(input(pin_a2)==0){
                      printf("\r\while");
                      ++i;
                 }
             }
    }
}

Si me pueden ayudar con esto seria genial, porque ya no se que vuelta darle.

Desde ya, muchas gracias.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Leer dos pulsos en un intervalo de tiempo...
« Respuesta #1 en: 26 de Septiembre de 2008, 00:08:29 »
lo q se me ocurre q podrias hacer, es con un timer resetear constantemente una variable, y con cada pulso, se incremente. Entonces si los pulsos son lo suficientemente seguidos, la variable va a alcanzar el valor 2. De ahi en mas, podrias levantar un flag o algo asi para despues procesarlo.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Leer dos pulsos en un intervalo de tiempo...
« Respuesta #2 en: 26 de Septiembre de 2008, 01:11:50 »
Estas condiciones que has puesto son prácticamente imposibles:
Código: [Seleccionar]
            if(input(pin_a2)==1){
                 if(input(pin_a2)==0){
                     printf("\r\while");

Para que el programa entre en ese printf se tiene que dar la rara casualidad de que al ejecutar el primer IF esté a 1, y justo en el ciclo siguiente haya cambiado a 0.

Prueba así:
Código: [Seleccionar]
            if(input(pin_a2)==1){
                 while (input(pin_a2));
                 printf("\r\while");

16f84

  • Visitante
Re: Leer dos pulsos en un intervalo de tiempo...
« Respuesta #3 en: 29 de Septiembre de 2008, 14:38:03 »
Hola!

probe con #INT_RB pero no andaba asi que e puse a leer cada post del foro a ver si encontraba algo y vi que en uno habia un codigo con la interrupcion  #INT_RA y me quedo asi...

#INT_RA
void RA_isr()
{
   set_timer1(0);
   delay_ms(2000);
   i = get_timer1() + 1;
   printf("\r\Ca=%d ", i);
}

lo pongo por si a alguen le sirve...
gracias a los que respondieron


saludos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Leer dos pulsos en un intervalo de tiempo...
« Respuesta #4 en: 29 de Septiembre de 2008, 15:08:34 »
Hola.

Eso depende de la version del compilador, ya que si es en una version mayor a la 3, las interrupciones se deshabilitaran. Yo creo que la manera mas sencilla es asignar flags de deteccion y procesarlos en el main.

Saludos
El papel lo aguanta todo