TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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.
-
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
}
-
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.
-
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.
-
En el primer post de este subforo emcontrarás ejemplos varios entre los cuales algunos de ellos usan pulsadores y tratan ese problema.
Suerte!!! ;)
-
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.
-
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