Autor Tema: codigo antirrebotes  (Leído 5038 veces)

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

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
codigo antirrebotes
« en: 22 de Marzo de 2007, 20:19:13 »
hola ando intentando hacer un pequeño codigo antirrebotes (para evitar los rebotes de los interruptores). ¿Cómo se debe hacer, con un retardo quizás? si es así... de cuanto suele ser el retardo?.

un saludo.   :mrgreen:

Desconectado Vayadespiste

  • PIC12
  • **
  • Mensajes: 53
Re: codigo antirrebotes
« Respuesta #1 en: 22 de Marzo de 2007, 20:26:19 »
Suele ser como dices realizando un pequeño retraso, he visto muchos proyectos en el que ese retraso es de 20 milisegundos, pero claro, esto mejor que el que desarrolla el proyecto no lo sabe nadie.

Un saludo.

Desconectado Veguepic

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2119
Re: codigo antirrebotes
« Respuesta #2 en: 22 de Marzo de 2007, 20:47:08 »
A parte del retardo luego puedes comprobar si el boton continua pulsado, con esto evitas que cualquier ruido pase como un disparo.

Salduos

“Si la gente es buena sólo porque temen al castigo y porque esperan una recompensa, entonces verdaderamente somos un grupo lastimoso." Albert Einstein.

Saludos desde Lima , Peru    -    Hugo

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re: codigo antirrebotes
« Respuesta #3 en: 22 de Marzo de 2007, 20:51:24 »
Hola, lo que yo hacia era:

1. Cargar 128 en un registro
2. Leer la linea del interruptor... si leía un "1" incrementaba el registro en una unidad y si leía un "0" decrementaba el registro en una unidad.
3. Iba testeando el flag "C", si desbordaba por arriba estaba seguro de que había un "1" en la línea y si desbordaba por abajo había un "0" en la linea.

Nunca me falló. Y es bastante más rápido que los retardos de x milisegundos... el rizado de la señal suele ser bastante más corto...

Saludos!
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: codigo antirrebotes
« Respuesta #4 en: 23 de Marzo de 2007, 11:33:05 »
Yo hago algo muy similar a lo de manwenwe, ocupa más variables pero es lo más efectivo.

Además, las entradas no las leo continuadamente sino cada x mili segundos porque para que la aplicación sea multitarea (requerimiento en el tipo de aplicaciones que desarrollo) el pic está haciendo muchas cosas todo el tiempo y no puedo dedicarle un tiempo de rebote a un pin de entrada cuando se deben atender otras cosas urgentes.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: codigo antirrebotes
« Respuesta #5 en: 23 de Marzo de 2007, 11:35:26 »
no entiendo como funciona este ultimo codigo, parece que está mejor que el del retardo pero la verdad no entiendo como funciona. (si pudieses explicar un poco de que va a graces rasgos sería muy útil)
con respecto al del retardo, en principio no importa mucho ya que todavía estoy probandolo, pero cuando monte el circuito utilizare unos pulsadores de estos que tienen como una goma por debajo (los que se usan en todos los aparatos digitales, relojes, teclados, telefonos mobiles, mandos...) y me imagino que tienen poco tiempo de rebote. Alguien que los haya utilizado sabe cual podría ser un delay adecuado (para no entorpecer demasiado el programa). el cristal que uso es de 4mhz pero eso no importa mucho lo unico sería saber el tiempo de rebote que suelen tener este tipo de pulsadores.


un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: codigo antirrebotes
« Respuesta #6 en: 23 de Marzo de 2007, 11:43:23 »
Funciona mas o menos asi

1) Cada x mseg lees los puertos. Por ej 5 mseg
2) Si el puerto está en 'alto' o 'bajo' (el nivel de señal que estas esperando), incrementas un contador.  Por ej. incf ENTRADA1,f
Si el puerto está en el valor contrario, revisas si la cuenta ENTRADA1 <> 0, si es así, lo decrementas 1.
3) Cuando la cuenta llega a 10 (ya pasaron 50 mseg en el mejor caso) das por activada la señal


Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: codigo antirrebotes
« Respuesta #7 en: 23 de Marzo de 2007, 14:29:26 »
también he visto que se puede hacer el retardo pero externo, a través de un circuito R-C, pero este no lo he comprobado
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: codigo antirrebotes
« Respuesta #8 en: 23 de Marzo de 2007, 14:49:21 »
también he visto que se puede hacer el retardo pero externo, a través de un circuito R-C, pero este no lo he comprobado

Si, se usa en general para eliminar para rebotes con teclas pero la técnica de lectura que yo menciono sirve para todo tipo de señales.  A veces filtrar con RC una señal determinada no es la mejor opción por eso lo aclaro.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado black_flowers

  • PIC18
  • ****
  • Mensajes: 450
Re: codigo antirrebotes
« Respuesta #9 en: 23 de Marzo de 2007, 18:11:10 »
Funciona mas o menos asi

1) Cada x mseg lees los puertos. Por ej 5 mseg
2) Si el puerto está en 'alto' o 'bajo' (el nivel de señal que estas esperando), incrementas un contador.  Por ej. incf ENTRADA1,f
Si el puerto está en el valor contrario, revisas si la cuenta ENTRADA1 <> 0, si es así, lo decrementas 1.
3) Cuando la cuenta llega a 10 (ya pasaron 50 mseg en el mejor caso) das por activada la señal


Saludos

o sea que es algo parecido al delay pero sin dejar el programa colgado. bueno despues de todo creo que voy a optar por lo más fácil, un delay de 50mseg

gracias x vuestra ayuda.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: codigo antirrebotes
« Respuesta #10 en: 26 de Marzo de 2007, 12:01:01 »
o sea que es algo parecido al delay pero sin dejar el programa colgado. bueno despues de todo creo que voy a optar por lo más fácil, un delay de 50mseg

gracias x vuestra ayuda.

Jeje, es parecido pero no lo es...

Esa simple diferencia de no dejar el programa colgado , es la diferencia entre un software que atienda muchas cosas a la vez y velozmente y uno que no.

De todas formas, si no es necesario para tu aplicación puedes optar por la vía fácil sin ningún problema.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)