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?