Creo que sí se puede, al menos es lo que deduzco después de pensar un poco sobre ello...
(NOTA: si no se ve ninguna imagen es porque la red de mi servidor tiene problemas en estos días...)
Veamos: supongamos que tenemos una matriz de teclado sencilla, con tres filas, que gobiernan tres teclas cada una.
La primera fila, F0, gobierna las teclas A,B,C. La segunda fila, F1, las teclas D,E,F y la tercera fila F2 las teclas G,H,I.
De la matriz salen tres líneas, D0.D1 y D2. Estas líneas tienen un pullup, es decir, que están conectadas a 5 voltios mediante una resistencia.
Ahora supongamos que queremos leer la fila F0 para ver si están pulsadas cualquiera de las teclas A,B o C. El estado de las tres teclas aparecerá en las líneas D0,D1 y D2. Un 1 (tensión positiva de unos 5 voltios más o menos) indica que no está pulsada, y un 0 (tensión próxima a 0 voltios) indica que sí lo está.
Para ello, seleccionamos la fila F0 para leer, poniéndola a 0 voltios, y dejando el resto de filas con una tensión positiva.
La línea más gruesa indica qué puntos de la matriz contienen 0 voltios.
Pero en el momento en que vamos a leer las líneas de salida, el usuario pulsa tres teclas: la A, la G y la I, así que la matriz toma este aspecto:
A causa de esto, el estado de "0 voltios" se propaga por todas las líneas conectadas entre sí mediante los circuitos que han cerrado los pulsadores (teclas). EL dibujo muestra ahora dónde hay un potencial de 0 voltios.
Y por tanto, al leer la salida, encontramos que tanto D0 como D2 están a 0 voltios, interpretando erróneamente que la tecla C está pulsada.
Lo que ocurre exactamente es lo siguiente: cuando se pulsan dos teclas que pertenecen a distintas filas, pero que pertenecen a la misma columna (como la A y la G en el ejemplo), las filas de ambas teclas adquieren el potencial de 0 voltios, así que aunque nosotros hayamos seleccionado un fila para leer, en realidad se están seleccionando dos filas para leer. Si en la fila que no pretendíamos leer hay más de una tecla pulsada (la I), ésta obviamente aparecerá en la línea de salida.
Vale, pues esto es el "ghosting" en un teclado de matriz. Para detener este efecto, es necesario impedir que se formen circuitos cerrados allí donde no queremos, o al menos que si se forman sea porque la corriente deba circular por ese circuito en el sentido adecuado.
Lo que se me ocurre es cambiar la matriz por esta otra. Así al leer la fila F0, tenemos este panorama:
Si el usuario pulsa las mismas tres teclas, se cerrarán los correspondientes circuitos, PERO los diodos no dejarán pasar la corriente (y por tanto la condición de 0 voltios) si el potencial en el cátodo es menor que en el ánodo (el cátodo en los diodos es la raya, y el ánodo, el triangulito)
Como se ve, F2 está a 5 voltios ya que no se está leyendo, y eso hace que el diodos D7 esté polarizado inversamente (su cátodo tiene tensión más positiva que su ánodo). Si la polarización es inversa, el diodo se comporta como un circuito abierto. D9 tiene el mismo potencial (5 voltios) tanto en su cátodo (porpocionados por F2) como en su ánodo (proporcionados por el pullup de la línea D2) así que tanto si D9 conduce como si no, en D2 sigue habiendo 5 voltios (en realidad, para que un diodo conduzca la diferencia de potencial entre ánodo y cátodo debe superar los 0,7 voltios, así que en realidad, aquí debe aparecer como que no conduce, y así lo dibujaremos).
Por otra parte, D1 tiene 0 voltios en su cátodo (porpocionados por la fila F0) y su ánodo tiene 5 voltios, proporcionados por el pullup, así que el D1 se polariza directamente y se comporta como un circuito cerrado. La situación que se ve en la práctica, es ésta:
Con lo que desaparece el ghosting