Autor Tema: Rutinas para validar pulsadores de entrada  (Leído 1869 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado martint88

  • PIC10
  • *
  • Mensajes: 4
Rutinas para validar pulsadores de entrada
« en: 05 de Mayo de 2009, 17:26:49 »
Amigos del foro:
Estuve trabajando un poco con PIC, y siempre tengo problemas con las entradas a traves de pulsadores.
Normalmente pongo los pulsadores contra 5V, un capacitor de .1uF a masa, y una resistencia de 10K como pull down.
En cuanto al soft, uso lo siguiente:

void esperar_touch ()
{
   int a;
   do
   {
      a = 0;
      while (!input(touch));
      }
      while (input(touch))
      {
         delay_ms (1);
         a = a + 1;
         if (a>50) a -= 30;  // Esto lo pongo para evitar que la variable se valla de rango.
      }
   } while (a < 15);
}


Lo probé en varios pic diferentes, y el problema que suelo tener, es que muchas veces esta rutina salta sin que toque el touch.
Agradecería sugerencias para modificar el soft y el hard, y asi lograr entradas lo más robustas posibles.

Muchas gracias y felicitaciones por el foro
Martin
« Última modificación: 06 de Mayo de 2009, 09:18:27 por martint88 »

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Rutinas para validar pulsadores de entrada
« Respuesta #1 en: 20 de Mayo de 2009, 15:59:48 »
Martin, por lo general cuando se usan pulsadores la forma de conectarlos a una entrada del PIC es por medio de una resistencia de 10k en pull up y una en serie de 470, esta ultima no tan necesaria. Luego iria el switch a masa con un capacitor .1uf como vos decis en paralelo.
Con respecto al programa, parece que es para evitar los rebotes y esas cosas.
Si la intención es que el programa se detenga hasta que no presiones el pulsador y ahi continuar, yo probaria con solo sensar el estado del puerto.
Ejemplo: si el switch esta en el RB0
do
{}while (TRISBbits.TRISB0 == 1)

tambien hay una opcion que te detecta la retencion del boton y que si no lo sueltas no sigue.

Yo estoy trabajando con el framework para usb de la PICDEM FS USB y es una buena fuente para sacar partes de codigos que estan bien probados que funcionan.

Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Rutinas para validar pulsadores de entrada
« Respuesta #2 en: 20 de Mayo de 2009, 17:04:02 »
Puedes esperar hasta que se pulse. Al pulsarse esperar 30ms, y después de pasado verificar si fue una pulsación o una falsa alarma.

Código: C
  1. while (!input(touch)); // espero Pulsacion
  2.        delay_ms(30);  //Demora para dejar pasar rebote.
  3.        if(input(touch)){ //Si, se ha pulsado
  4.          a = a + 1;
  5.          if (a>50) a -= 30;  // Esto lo pongo para evitar que la variable se valla de rango.
  6.        }



Si la intención es que el programa se detenga hasta que no presiones el pulsador y ahi continuar, yo probaria con solo sensar el estado del puerto.
Ejemplo: si el switch esta en el RB0
do
{}while (TRISBbits.TRISB0 == 1)

Primero que nada, esto es C18. Y segundo no entiendo que estas haciendo, estas testeando el bit0 de TRISB???
No contesto mensajes privados, las consultas en el foro