8 votos

Hardware de eliminación de rebotes de la clave de la matriz con un mínimo de componentes pasivos

He comprado recientemente este barato de 4x4 teclado de la matriz. Sólo tiene los botones y nada más, por lo tanto, quiero añadir una correcta eliminación de rebotes. La eliminación de rebotes en el software es algo que quiero evitar, porque se necesita cierta capacidad de procesamiento de mi solicitud.

enter image description here

Sé eliminación de rebotes se puede hacer uso de una resistencia y un condensador (¿estoy en lo cierto?) o schmit trigger (que requiere otro IC supongo y está fuera de la cuestión para mí), así que la pregunta es, necesito agregar R/C para cada clave, o puedo salir con sólo una R/C par por fila o por columna?

Alguna sugerencia?

25voto

ianb Puntos 659

Seamos claros acerca de esto. Si usted tiene un teclado matricial que ya están utilizando el poder de procesamiento para aplicar la lógica secuencial de los voltajes de las filas o columnas, a continuación, la lectura de las columnas o filas en orden a determinar el botón presionado.

Así, cada vez que obtener un "resultado", es decir, se detecta que el botón ha sido pulsado, te marca ese evento como "pendiente" y algún tiempo más tarde (de 10 a 20 ms) de comprobar de nuevo para ver si al pulsar el botón marcado como "pendiente", puede ser juzgado como "real".

Cuánto más tiempo de procesamiento de las necesidades de este es muy pequeño en el gran esquema, en mi opinión, y si están tan cerca del límite en el que la CPU puede operar, a continuación, obtener un mayor y/o más rápido CPU o aumentar la velocidad de reloj.

El uso de Rs y Cs pueden trabajar pero, en todos los casos se va a producir un "lento" de salida que tendría que ser schmitt activa para limpiar la lentitud de borde a borde que es adecuado para la lógica que sigue. Usted puede conseguir lejos con él, por supuesto, pero entonces usted tiene una solución fija sin flexibilidad.

Dicho todo lo anterior, es posible que también tenga condensadores de cada matriz de línea a tierra para evitar descargas electrostáticas/EMC problemas.

4voto

Graham Puntos 141

Como un largo tiempo incrustado ingeniero de software, tengo que decir que su suposición de que la eliminación de rebotes va a tomar algo de la potencia de procesamiento de mi solicitud es simplemente incorrecto. Esto nunca va a ser cierto para cualquier competencia-escrito de firmware.

Naturalmente, eliminación de rebotes requerirá de algún tipo de procesamiento. Sin embargo, el procesamiento es trivial, y para la entrada del usuario se pasa a una baja tasa de actualización como para ser totalmente insignificante. Si usted necesita de rebote entradas con la actualización de las tasas de decenas de kHz, tal vez el tratamiento para la eliminación de rebotes sería considerable, pero un ser humano pulsando los botones no necesita nada de ese tipo de resolución. En su caso, de los 100 hz de muestreo sería fácilmente lo suficientemente rápido, y casi se podría luego dejarlo caer tan bajo como 10 hz de muestreo sin afectando gravemente su interacción con el usuario.

Si usted está tratando de hacer de procesamiento de la entrada principal de control de bucle se ejecuta a decenas de kHz, por supuesto que te chupo la potencia de procesamiento. La solución correcta es escribir el firmware que no hacerlo de esa manera a pesar de que, de no utilizar una solución de hardware para solucionar un software anti-patrón. El uso apropiado de los temporizadores y las prioridades de interrupción le dará lo que necesita.

Usted puede optimizar el procesamiento asegurándose de que la lectura de la espalda está todo en un puerto I/O. Suponiendo que usted está estableciendo los niveles en las columnas y leer las filas, luego de bits Y bits de desplazamiento y poco-O a construir un valor de 16 bits para el de 16 pines. XOR este con el anterior valor de 16 bits, y si esto no es cero, entonces, algo cambió. Un simple rebote algoritmo es sólo para poner un contador a un valor si las patillas de cambio de estado, elija un estado si los pines mantiene su estado y el contador es cero, y disminuir si no es cero.

Usted no necesita ver sólo un botón es presionado, por supuesto. Si tienes un procesador ARM, el BRAZO tiene una instrucción de informe de cuántos bits se establecen, lo que es ideal para esto. Sólo mencionar para una mayor optimización.

4voto

jlee Puntos 37

Para obtener el mejor rendimiento de rebote, es probable que sea mejor tener un R/C para cada botón. Sin embargo, aún debe obtener resultados decentes con uno por fila/columna. Sólo depende de lo crítico que es realmente. Si quieres hacerlo con la mínima cantidad de componentes, ¿por qué no intentar hacer uno por fila/columna de la primera, luego de tomar algunas medidas y ver si el resultado es lo suficientemente buena para su aplicación?

Si los resultados no son lo que quería, a continuación, seguir adelante y añadir un poco de cada botón, a continuación, inténtelo de nuevo.

3voto

Spike Puntos 304

Afaik, hay ICs que puede rebote 'automáticamente', por ejemplo, MC14490, llamado Interruptor de Debouncer.

Esto evitará que la necesidad de energía de la CPU, pero el costo adicional de cableado/PCB espacio.

0voto

Dan Beaulieu Puntos 135

La verdadera depuración consiste en la adición de histéresis. Usted no puede hacer eso con componentes pasivos por ejemplo, resistencias y condensadores. Ahí es donde un software o componente activo (latch) solución de venir.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X