TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rubio_20 en 19 de Febrero de 2008, 14:15:14

Título: Ayuda para quitar rebotes de micropulsador
Publicado por: rubio_20 en 19 de Febrero de 2008, 14:15:14
hola a todos pues lo que necesito para ver si me podeis exar una mano es lo siguiente me estoy aciendo un reloj despertador y al cambiar la hora como los botones tienen rebotes pues salta de lo k kiere en lo k kiere por lo tanto busco a ver si alguien me puede exar una mano con alguna instruccion o alguna funcion k aga k solo cuente una pulsacion.

muchas gracias todo y saludos.
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: BrunoF en 19 de Febrero de 2008, 14:24:28
Hola!

Después de haber detectado en código la pulsación podrías, por ejemplo, hacer Delay_ms(50) para ignorar el tiempo de rebote de un pulsador. Hay muchas formas de hacerlo, pero esa es la más simple.

 if (bit_test(pin_b0) {
   Delay_ms(50);   //se pulsó. Antirebote!
   //bla bla
}
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: rubio_20 en 19 de Febrero de 2008, 14:41:12
se me olvido decir k uso un 16f876 y nose si la instruccion delay funcionan en ese pic si es asi ya lo tengo solucionado.

muchas gracias por todo y saludos.
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: jfmateos2 en 20 de Febrero de 2008, 06:35:14
Hola Rubio, aquí (http://picmania.garcia-cuervo.com/Proyectos_AUX_Botones.php) tienes un completo análisis de los rebotes y cómo evitarlos desarrollado por el forero RedPIC.
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: vszener en 20 de Febrero de 2008, 14:17:59
En el primer post de este subforo emcontrarás ejemplos varios entre los cuales algunos de ellos usan pulsadores y tratan ese problema.


Suerte!!! ;)
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: gu1llermo en 21 de Febrero de 2008, 10:56:41
Lo más recomendable es que elimines el efecto del rebote a través de software como te han propuesto anteriormente.

Siguiendo el ejemplo que colocó Bruno, el programa quedaría así:

 if (bit_test(pin_b0)==0) { /* Se pulsó, entonces espero tantos ms y vuelvo a preguntar para ver si el cambio se mantiene */
   Delay_ms(20); // Yo uso generalmente 20ms, pero puedes usar 50ms también.
   if (bit_test(pin_b0)==0){ // Vuelvo a preguntar
   // Si entra aquí significa que efectivamente se pulsó
   }// En caso contrario fué ruido
 }// Entonces vale 1 y no se ha pulsado.

Simplemente extendí y modifiqué un poco el programa de Bruno.

Saludos.
Título: Re: Ayuda para quitar rebotes de micropulsador
Publicado por: Menta en 21 de Febrero de 2008, 23:15:42
se me olvido decir k uso un 16f876 y nose si la instruccion delay funcionan en ese pic si es asi ya lo tengo solucionado.
muchas gracias por todo y saludos.

la función delay es inherente o relativa a la "lógica" del compilador del lenguaje C q usas, no es una instrucción del pic. Así que funciona con todos los pic q soporta el compilador.
Te va a funcionar!

Saludos