Problema con un nivel lógico demasiado alto / señal flotante en una matriz de teclado de 15 x 5

2

Estoy bastante oxidado con la electrónica, así que perdóneme esta pregunta. He construido una matriz de teclado con 15 columnas y 5 filas.

Las 5 filas están conectadas a los pines GPIO en una MCU Atmega 32u4. Las 15 columnas están conectadas a los pines GPIO en un expansor de E / S MCP23017.

La matriz está conectada como 15x5 (bueno, un par de claves de tamaño excesivo significa que hay un par de puntos donde la matriz es una fila más corta, o se salta una clave en una columna determinada).

La matriz se escanea de la manera habitual: fila por fila, establezca la fila en Salida / Baja, luego lea las columnas (esto se hace en i2c, leyendo 16 bits para todos los pines "a la vez"), luego restablezca la fila a Entrada / Alta y continúe.

En su mayor parte, esto funciona bien, pero hay algunas teclas que no se registran; estos están en la columna final y en la fila inferior.

Cuando conecto nScope a una tecla en la fila 1 y la presiono, puedo ver la transición de lógica alta a lógica baja. Cuando repito lo mismo para las filas inferiores, puedo ver que el nivel lógico bajo aumenta (el canal se vuelve más liso) a medida que nos acercamos al fondo.

He adjuntado una captura de pantalla de nScope; la traza verde se adjunta al nodo etiquetado fila5 en el fragmento del esquema incluido aquí. La traza naranja es el otro lado del diodo, donde la flecha apunta y dice "flotando". La onda cuadrada se debe a que la exploración de matriz selecciona / anula la selección de filas. La traza es sin que se presione ninguna tecla.

SW3 en este esquema no se registra cuando se presiona, pero SW5 (en la columna de arriba) sí se registra.

Mi corazonada es que las resistencias pull-up para las columnas no son correctas. He intentado con y sin resistencias de tracción en los pines GPIO de columna; externo 4k7 y luego los cambió por los pull-ups internos de 100k; Los síntomas siguen siendo los mismos. Al deshabilitar los elementos desplegables solo se genera basura como se podría esperar.

¿Cómo depuro esto? ¿Cuál es la causa probable de esto y qué debo hacer para mitigarlo?

simular este circuito : esquema creado usando CircuitLab

    
pregunta Wez Furlong

2 respuestas

2

Algunos teclados ni siquiera usan diodos. Pero te pones fantasma entonces. Así se agregan los diodos. Pero la razón por la que se agregan es para aislar un interruptor de otro. Tienes los diodos encadenados en serie.

Permítame ilustrarlo con un ejemplo similar al que presentó, usando cuatro interruptores, pero hecho correctamente:

simular este circuito : esquema creado usando CircuitLab

Debería verse más así. Tenga en cuenta que los diodos no forman una ruta conductora que avanza a través de más de uno de ellos a la vez.

    
respondido por el jonk
0

El cableado de los diodos no es correcto para un teclado de matriz. Los kathodes de los diodos de cada fila deben estar conectados entre sí para obtener un diodo "o" función lógica, no al ánodo del diodo posterior. Si conecta los diodos como en sus esquemas, agregará los voltajes de caída directa de los diodos, y después de algunas columnas no podrá tener un nivel alto.

    
respondido por el CasaMich

Lea otras preguntas en las etiquetas