Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: martint88 en 05 de Mayo de 2009, 17:26:49
Título: Rutinas para validar pulsadores de entrada
Publicado por: martint88 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
Título: Re: Rutinas para validar pulsadores de entrada
Publicado por: willynovi 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.
Título: Re: Rutinas para validar pulsadores de entrada
Publicado por: Suky 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
while(!input(touch));// espero Pulsacion
delay_ms(30);//Demora para dejar pasar rebote.
if(input(touch)){//Si, se ha pulsado
a = a +1;
if(a>50) a -=30;// Esto lo pongo para evitar que la variable se valla de rango.
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???