TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: OTSELECTRONICSEIRL en 11 de Julio de 2009, 14:28:21
-
Buenos dias. Deseo detectar flancos de subida por RB0 (in) de tal manera que generara una interrupcion cada ves que detecte un flnaco de subida. Los pulsos de entrada seran generados por un interruptor (no pulsador), sin embargo el primer gran problema que encuentro al montar en el protoboard es el EFECTO REBOTE. ¿Se puede eliminar por software (assembler) "estos rebotes" ?, me parece un poco dificil (por el momento) dado que el flag de interrupcion por flanco ascendente se activa de inmediato y el programa procede a efectura la ISR respectiva. Quizas la unica manera de elimir el rebote sea por hardware para este caso. Por favor comentenme sus experiencias en casos similares.
Muchas gracias de antemano por sus comentarios.
-
Por hardware colocale un capacitor en paralelo al interruptor. En el software, al detectar la interrupción, esperar unos 20 a 30 ms, testar nuevamente el pin B0 para saber si es una accion del interruptor o una falsa alarma. Aquí (http://www.todopic.com.ar/foros/index.php?topic=24720.0) hay algunos ejemplos en la sección control de display 7 segmentos.
-
Suky. Muchas gracias por tu aporte, ingeniosa forma de atacar el problema por software. Vuelvo agradecer infinitamente la colaboracion.
Saludos
-
Efectivamente la tecnica que comenta Suky es lo que se suele hacer habitualmente, aunque yo en algunos diseños de sistemas de alarmas en donde no me puedo permitir falsas alarmas he utilizado otra tecnica.
Tecnica normal: Comprobar la entrada despues de 20 msg. Solo se comprueba 2 veces, y cabe la posibilidad de que exista un pequeñisimo margen de error.
Tecnica Super-segura: Cuando detecto que se ha activado la entrada vuelvo a comprobar la entrada dentro de un bucle, el cual dura unos 10 msg, y donde tiene que verificar el nivel de la entrada miles de veces consecutivas para darlo por aceptable.
-
Tecnica Super-segura: Cuando detecto que se ha activado la entrada vuelvo a comprobar la entrada dentro de un bucle, el cual dura unos 10 msg, y donde tiene que verificar el nivel de la entrada miles de veces consecutivas para darlo por aceptable.
Que es super segura no lo dudo, pero uno no siempre tiene 10 ms de sobra para que el uC los dedique solo a comprobar una entrada.
Yo soy partidario de siempre filtrar primero por HW y luego terminar de pulir las cosas por SW. Parece una tontera, pero un simple filtro pasa-bajos pasivo con una resistencia y un capacitor pueden evitarte colocar código antirebote en el programa, y con ello ahorrar algunos ms valiosos. En particular en mis aplicaciones, utilizo las dos cosas, aunque nunca utilizo delays por lo que los retardos antirebote los ejecuto con timers o alguna otra técnica que no deje al procesador ni un instante sin hacer nada.
Saludos.