9 votos

Pulsar mismas filas claves al mismo tiempo

Estoy diseñando un teclado en VHDL. Todo funciona bien cuando sólo hay una tecla es presionada. Estoy escaneando cada columna para que presione una tecla de una máquina de estado y cuando no se presiona ninguna tecla, que es la condición pin4pin6pin7pin2 = "0000" me cambio a otro estado para la digitalización de la siguiente columna. Así que me puse las columnas pin3pin1pin5 de forma secuencial a "001", "010" y "100".

Mientras que la digitalización pin3pin1pin5 como "001" e si pin4pin6pin7pin2 es "0100" simplemente "9" es presionado. Declaro en VHDL pin4pin6pin7pin2 como entrada y pin3pin1pin5 como puertos de salida. Cuando yo pulse 6 y 9 al mismo tiempo, pin6 y pin7 son high. La primera tecla que se presiona a la lectura, el segundo es ignorado. Cuando yo pulse 3 y 7 al mismo tiempo, el primero se presiona con pocos ms antes de la gana y la primera clave es leer, la segunda clave es ignorado, pin2 y pin4 son high.

Aquí está la parte difícil. Cuando yo pulse 4 y 6 al mismo tiempo, espero que pin7 a high pero se vuelve low y pin4pin6pin7pin2 = "0000", que no entiendo cómo y por qué. Porque "0000" es detectado como ninguna tecla pulsada, el estado de la máquina saltos de un estado a otro. Mientras que la celebración de 4 y 6 si uno empuja y hojas de 4 varias veces, es detectado como 6 pulsa varias veces, lo cual es un gran error. Yo estaría encantado si usted me puede ayudar a depurar esta!

Lo mismo sucede con "1" y "2", mismo con el "7" y "8" sólo para las llaves en la misma fila. Dado que este es un proyecto en curso que no puedo poner mi código VHDL en línea :( yo estaría encantado si usted me puede dar consejos para superar esto!

enter image description here

A continuación, no voy a subir mi código a la placa, no se ejecuta ningún código. Conectar Pin5 a tierra, con una simple pulsación en 1,2,4,5,7,8,*,0 no se convierta Pin3 LED pero si Im pulsar 6 y luego 4 al mismo tiempo, Pin3 LED está encendido y Pin7 LED sigue encendido, pero cuando el código se ejecuta de que esto no suceda. Tal vez me he conectado algo mal y por suerte, Pin7 está en, no sé...

enter image description here

A continuación está el esquema del teclado de la junta directiva:

Schematics

4voto

Andreas Puntos 741

La respuesta corta:

Invertir la lógica. La unidad de la columna de selección de líneas con drenaje abierto (o de colector abierto) lógica donde la columna seleccionada se sacó bajo y la onu-columnas seleccionadas son flotantes. Cuando usted mira a una fila, presionar una tecla será detectado por un '0'. Onu-teclas presionadas será detectado por un '1'.

Ahora los detalles:

Como EEIngenuity señala, al presionar 2 botones en la misma fila, que se traduce en un corto-circuito entre sus correspondientes columnas. Este (y otros problemas que involucran múltiples pulsaciones de teclas) es generalmente de superar en una matriz del teclado mediante la adición de un diodo en serie con cada interruptor.

Desde la adición de diodos no es una opción para usted, usted tendrá que flotan las salidas de la inactivo columna selecciona para evitar tratar de llevarlos a la polaridad opuesta como su columna active select. Esto se hace mediante el drenaje abierto de lógica. Si su columna selecciona están ligados directamente a un CPLD o FPGA, usted debería ser capaz de lograr esto en el código VHDL.

La foto en tu pregunta muestra que usted tiene una resistencia pull-up en cada columna y en cada fila. El pull-ups en las columnas son innecesarios, pero no me duele nada. El pull-ups en cada fila se va a asegurar una alta condición, a menos que sacó bajo por el drenaje abierto conductor en la columna selecciona (a través de un interruptor cerrado).

He tenido que hacer algunas suposiciones acerca de su circuito, puesto que no se han provisto de una completa esquemático o su código VHDL. Usted dice

cuando no se presiona ninguna tecla, que es la condición pin4pin6pin7pin2 = "0000"

sin embargo, a partir de la foto que usted proporcione, resistencias pull-up se muestra. Esto implica que usted ya tiene una lógica de inversión en algún lugar, posiblemente en su código VHDL o (menos probable) de los inversores entre sus filas y la lógica de su dispositivo (CPLD o FPGA).

Editar:

Por tu comentario, que utiliza lógica negativa en sus descripciones: "0000" indica que todos los cuatro pines son altos, etc. Siendo ese el caso, suponiendo que la columna selecciona la fila y la señal va directamente desde el conector de 2 en su diagrama esquemático para el FPGA, sólo tienes que seguir mis instrucciones anteriores mediante el uso de drenaje abierto de la lógica de la columna seleccionar las salidas en el FPGA.

Yo no soy un VHDL experto, pero he encontrado este de Xilinx:

Inferir el drenaje abierto de búfer mediante el siguiente código:

VHDL:

dout <= 'Z' cuando din='1' else '0';

También se nota en su esquema, todos los LEDs se muestra conectado al revés. Los ánodos de ir a la actual limitación de las resistencias y los cátodos de ir a las líneas de señal. Los Led de la luz cuando las líneas de señal se sacó bajo.

2voto

Ty. Puntos 1890

Puesto que usted está utilizando VHDL y tiene una asincronía en la entrada, estoy escribiendo esta respuesta para asegurarse de que usted tomó una medida de precaución. No estoy seguro de si este es su problema, pero que muy bien podría ser.

A ver una pregunta que le hice hace algún tiempo: VHDL: recibir módulo al azar cuando falla el conteo de bits

Ahora, usted dice que:

Porque "0000" se detecta como una tecla no pulsada, el estado de la máquina saltos de un estado a otro. Mientras que la celebración de 4 y 6 si uno empuja y hojas de 4 varias veces, es detectado como 6 pulsa varias veces, lo cual es un gran error.

Que es algo similar a lo que me enfrentaba. Tuve un problema en mi máquina de estado iba a saltar los estados, lo que parecía imposible.

Si usted lee las respuestas a la pregunta enlazado más arriba, verás que es recomendable añadir un sincronizador para la línea de entrada antes de que se alimenta en su estado de la máquina. Normalmente, esto se logra con dos D Chanclas en la serie:

enter image description here

No tener el botón de entrada sincronizado con tu HW hace muy extraño problemas, que he experimentado con mi N64 proyecto. La adición de este poco de HW fue casi como por arte de magia.

Por favor, compruebe primero que sus entradas están sincronizados.

1voto

shingara Puntos 163

Esta es una pregunta interesante! La razón por la que usted está viendo una baja en pin7 cuando usted presione key4 y key6 es porque de pin3 y pin5.

Para explicar aún más, pin3 y pin5 nunca va a estar de alta en el mismo tiempo - uno de ellos siempre será un camino de tierra (según su diseño). Por lo tanto, cuando usted pulse la tecla 4 y la tecla 6, se crea un camino a tierra para pin7.

Ver imagen:

Pin 7 sees a path to ground. You have a short circuit.

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