Doble teclado en ZXUNO

Dudas, cuestiones, sugerencias y peticiones en general sobre el proyecto / Questions and requests about the project
ManuFerHi
Mensajes: 752
Registrado: 15 Nov 2015, 17:50

Re: Doble teclado en ZXUNO

Mensaje por ManuFerHi » 14 Nov 2017, 12:53

Ahora no estoy en casa, pero debería estar el esquema en pdf en el github, ten en cuenta que cada señal de clk y data debe tener su terminación sus resistencias para evitar ruido , el zxuno ya lleva las suyas pero si conectas otro teclado debes añadir también resistencias a estas dos señales nuevas.

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Doble teclado en ZXUNO

Mensaje por spark2k06 » 14 Nov 2017, 12:55

ManuFerHi escribió:Ahora no estoy en casa, pero debería estar el esquema en pdf en el github, ten en cuenta que cada señal de clk y data debe tener su terminación sus resistencias para evitar ruido , el zxuno ya lleva las suyas pero si conectas otro teclado debes añadir también resistencias a estas dos señales nuevas.
Pues tienen que ir por ahí los tiros, voy a buscar el PDF, gracias.

Enviado desde mi Thor mediante Tapatalk

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Doble teclado en ZXUNO

Mensaje por spark2k06 » 14 Nov 2017, 13:10

He revisado y comparado. Como el propio ZXUno 4.1 ya lleva sus propias resistencias en su conector PS/2, solo me faltaría poner unas en la entrada de arduino, y vemos si la cosa mejora cuando está junto con teclado externo. Ya os contaré algo.

Enviado desde mi Thor mediante Tapatalk

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Doble teclado en ZXUNO

Mensaje por Quest » 14 Nov 2017, 13:21

Entro a comentar en el hilo (a pesar de que últimamente no puedo participar mucho) para aclarar un tema con respecto a los teclados, que veo que os estáis haciendo un poco de lio por aquí.

Es sobre el tema del "retardo" al empezar a funcionar los teclados duales (y algunos otros teclados modernos PS/2).

Lo que ocurre no tiene absolutamente nada que ver con ningún apantallado, resistencia ni nada por el estilo. Lo que ocurre lo se exactamente porque fui yo el que añadí el soporte e inicialización de teclados "problemáticos" (entre los que se encuentran todos o casi todos los duales) en la BIOS/firmware. Esto fue hace ya 2 años tranquilamente. Si no está en el historial de este foro probablemente lo esté en los hilos de Zonadepruebas que alojaban la info sobre el ZX-Uno antes de que el foro actual existiera.

Los teclados duales (y algunos otros modernos Ps/2) REQUIEREN inicialización por parte del host, mientras que los nativos ps/2 o antiguos no lo necesitan. De hecho antes de meter la inicialización, ni siquiera funcionaban. El tema del retardo es el siguiente: Desde que reciben corriente, estos teclados "Problemáticos" necesitan un tiempo de auto-inicialización / auto-diagnóstico antes de empezar a escuchar al host. Si mandas los comandos de inicialización antes de ese tiempo, no sirve de nada y no funcionan. Estuve estudiando en su día el tema con unos 4 teclados, tanto duales como ps/2 modernos que requieren inicialización (entre ellos por ejemplo el famoso mini teclado perixx / periboard). Variaban ligeramente en el tiempo que necesitan para empezar a escuchar comandos (normalmente entre 400ms y 1600ms o algo asi, no lo recuerdo al 100% de memoria ahora, ha pasado mucho tiempo) así que lo metí así en el firmware. Casualmente el tiempo necesario para la inicialización es más largo que el que la BIOS da para pulsar las teclas de entrar a bios, de sacar lista de cores, etc, así que por eso siempre he dicho que con estos teclados hay que esperar a que arranque el core (para dar tiempo a la inicialización) y luego ya resetear para poder usar normalmente esas teclas de acceso a bios, menu de cores, etc.

Espero que haya quedado claro el tema, para no especular con otras cosas que no tienen relación.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: RE: Re: Doble teclado en ZXUNO

Mensaje por spark2k06 » 14 Nov 2017, 13:28

Quest escribió:Entro a comentar en el hilo (a pesar de que últimamente no puedo participar mucho) para aclarar un tema con respecto a los teclados, que veo que os estáis haciendo un poco de lio por aquí.

Es sobre el tema del "retardo" al empezar a funcionar los teclados duales (y algunos otros teclados modernos PS/2).

Lo que ocurre no tiene absolutamente nada que ver con ningún apantallado, resistencia ni nada por el estilo. Lo que ocurre lo se exactamente porque fui yo el que añadí el soporte e inicialización de teclados "problemáticos" (entre los que se encuentran todos o casi todos los duales) en la BIOS/firmware. Esto fue hace ya 2 años tranquilamente. Si no está en el historial de este foro probablemente lo esté en los hilos de Zonadepruebas que alojaban la info sobre el ZX-Uno antes de que el foro actual existiera.

Los teclados duales (y algunos otros modernos Ps/2) REQUIEREN inicialización por parte del host, mientras que los nativos ps/2 o antiguos no lo necesitan. De hecho antes de meter la inicialización, ni siquiera funcionaban. El tema del retardo es el siguiente: Desde que reciben corriente, estos teclados "Problemáticos" necesitan un tiempo de auto-inicialización / auto-diagnóstico antes de empezar a escuchar al host. Si mandas los comandos de inicialización antes de ese tiempo, no sirve de nada y no funcionan. Estuve estudiando en su día el tema con unos 4 teclados, tanto duales como ps/2 modernos que requieren inicialización (entre ellos por ejemplo el famoso mini teclado perixx / periboard). Variaban ligeramente en el tiempo que necesitan para empezar a escuchar comandos (normalmente entre 400ms y 1600ms o algo asi, no lo recuerdo al 100% de memoria ahora, ha pasado mucho tiempo) así que lo metí así en el firmware. Casualmente el tiempo necesario para la inicialización es más largo que el que la BIOS da para pulsar las teclas de entrar a bios, de sacar lista de cores, etc, así que por eso siempre he dicho que con estos teclados hay que esperar a que arranque el core (para dar tiempo a la inicialización) y luego ya resetear para poder usar normalmente esas teclas de acceso a bios, menu de cores, etc.

Espero que haya quedado claro el tema, para no especular con otras cosas que no tienen relación.
Interesante asunto lo de la inicialización que requieren sí o sí algunos teclados, como los duales. No tenía ni idea del asunto, gracias. Eso me lleva a la necesidad de hacer prescindible el diodo para éste tipo de teclados, que de lo contrario no funcionarían puesto que éste inhibe la escucha de comandos... Con mas razón aún si cabe la investigación sobre las resistencias para ver si ello evita conflictos.

Edito: aunque espera, en el vídeo que cuelgo no tiene diodo el teclado, pero esta misma mañana lo probé con diodo y el teclado dual también funcionaba, lo cuál significa que, al menos el core de spectrum no requiere inicialización... ni debería porque el diodo la inhibe, eliminando los conflictos y teclas que se quedan pulsadas.

Enviado desde mi Thor mediante Tapatalk

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Doble teclado en ZXUNO

Mensaje por spark2k06 » 14 Nov 2017, 13:52

@Quest, voy a hacer un resumen de lo que estoy buscando para ponerte en situación, a tí o a cualquiera que se te esté haciendo un lío.

Todo empieza por la necesidad de hacer compatible la comunicación con el ZXUno de dos teclados, uno basado en arduino (como puede ser el Go+, o scancodes de Joystick como Joy2PS2) y otro real... ambos por el mismo puerto PS/2.

Hasta el momento, y por las numerosas pruebas que he realizado, llegue a una primera conclusión. Y es que la escucha de comandos por una de las partes interfiere con la otra, cuando esta otra emite eventos de teclado... a veces no pasa nada, pero otras provoca la peor de las situaciones, que una tecla se quede pulsada.

Mientras que la escucha de comandos por parte de arduino es manejable via firmware, no escuchando por defecto... no es así en la parte del teclado real, que a priori no se puede controlar. La alternativa que propuse por tanto, y que de hecho funciona y ha quedado demostrado (bueno, me propuso un usuario del foro), es colocar un diodo en la linea DATA con el catodo mirando hacia el teclado externo. De esta manera inhibimos la escucha por parte del teclado externo, a la vez que a éste se le permite mandar scancodes. Esto tiene un inconveniente, y es que éste no podrá completar una inicialización, por ejemplo, en el core de PC/XT para pasar al Set 1 de Scancodes.

Todo bien y funcionando como esperaba, hasta que usuarios como Manu o Uto, para mi sorpresa, les funciona correctamente sin necesidad de diodo... es mas, envían vídeos de prueba y efectivamente no parece haber conflictos. Por ese motivo estoy investigando actualmente el tema de las resistencias.

Yo también quiero dejar claro el motivo de esta investigación :-)

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Doble teclado en ZXUNO

Mensaje por Quest » 14 Nov 2017, 14:08

Spark, yo sólo he aclarado un tema muy concreto, y es el que se ha comentado de que los teclados duales comenzaban a funcionar unos segundos más tarde. En todo lo demás que comentas y del origen del hilo, no entro.

No obsatante, como pincelada, para este tema, conviene conocer el funcionamiento del protocolo ps/2 y de que sus líneas funcionan en colector abierto con pullups. Pongo un pequeño extracto en inglés:
"The PS/2 mouse and keyboard implement a bidirectional synchronous serial protocol. The bus is "idle" when both lines are high (open-collector). This is the only state where the keyboard/mouse is allowed begin transmitting data. The host has ultimate control over the bus and may inhibit communication at any time by pulling the Clock line low.
The device always generates the clock signal. If the host wants to send data, it must first inhibit communication from the device by pulling Clock low. The host then pulls Data low and releases Clock. This is the "Request-to-Send" state and signals the device to start generating clock pulses."
Espero que lo solucionéis, yo insisto que no quería entrar en materia en el hilo, sólo puntualizar el tema del retardo, tal como he dicho al principio.

Suerte!
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
spark2k06
Mensajes: 1188
Registrado: 12 Feb 2016, 13:58

Re: Doble teclado en ZXUNO

Mensaje por spark2k06 » 14 Nov 2017, 14:20

Quest escribió:Espero que lo solucionéis, yo insisto que no quería entrar en materia en el hilo, sólo puntualizar el tema del retardo, tal como he dicho al principio.

Suerte!
Entiendo lo del retardo, pero a mí, con un teclado dual y siendo exactamente el mismo que el de Manu, parece funcionarme desde el primer momento al conectar la corriente sin esperar apenas, el dice que tiene que esperar unos 15 segundos si lo conecta de la misma manera en frío... otra cosa curiosa que a mi no me pasa, pero bueno. Y sobre la inicialización, en el core de spectrum al menos, ésta no es necesaria... porque mi teclado dual funciona también con el diodo que la inhibe. Puede que los teclados duales y algunos modernos comiencen a funcionar un poco mas tarde en el set 2 de scancodes por defecto desde que reciben la corriente, pero no será debido a que requiera una inicialización escuchando ningún comando específico del host, eso seguro.

Sobre el resto, en ello sigo, gracias.

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Re: Doble teclado en ZXUNO

Mensaje por Quest » 14 Nov 2017, 14:32

Para finalizar mi intervención en el hilo...
Y sobre la inicialización, en el core de spectrum al menos, ésta no es necesaria... porque mi teclado dual funciona también con el diodo que la inhibe. Puede que los teclados duales y algunos modernos comiencen a funcionar un poco mas tarde en el set 2 de scancodes por defecto desde que reciben la corriente, pero no será debido a que requiera una inicialización escuchando ningún comando específico del host, eso seguro.
En teclados problemáticos, sí es necesaria. Nunca puedes dar nada por seguro, ni presuponer nada. Te lo digo porque conforme vas investigando te llevas sorpresas. No podemos dar por sentado que todos los fabricantes lo hacen todo igual. Me he encontrado con un dual (un asus creo recordar) que no necesita un comando específico para inicializarse (bueno, más que inicializarse, lo que hace es tratar de detectar si está conectado a un puerto ps/2 o un usb de una forma muy simple), de hecho este teclado dual concreto, sólo necesita que en la linea Clock haya un cambio de flanco. Por tanto (aunque no seguro), bien podría ser que tuvieras uno de esos, y por tanto el diodo en Data no influiría nada en su "inicialización", dado que ésta, (el simple cambio de flanco) se produce en la línea de reloj. ¿Ves como no se puede dar nada por sentado?

Respecto a lo de los 15 segundos, sinceramente, dudo que sean 15. Probablemente sea eso lo que tarda en arrancar el core completo hasta que se puede escribir y comprobar que funciona. Ahora bien, como no puedo estar seguro (para no contradecirme con lo dicho en el párrafo anterior), podría ser algo raro o exclusivo de esos teclados, aunque las probabilidades son pocas. Creo que se percibe la sensación de tiempo más larga al no responder el teclado a F2 ni TAB ni Capslock al inicio. Pero estoy 99% seguro de que si mientras ESXDOS inicializa la SD, pulsa Ctrl+Alt+Backspace... el master reset funciona.

Lo dicho, Suerte! (ahora sí, lo dejo aquí ;))
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

ManuFerHi
Mensajes: 752
Registrado: 15 Nov 2015, 17:50

Re: Doble teclado en ZXUNO

Mensaje por ManuFerHi » 14 Nov 2017, 14:38

Cronometrado Quest, cronometrado. Es super raro pero arrancas el zxuno, y hasta que no pulsas la primera tecla no empieza a correr los 15 segundos, también puedes reconectarlo físicamente y funciona al instante.
Pero lo más raro es que no pasa con los V4.1 , sólo pasa en los modelos mios VGA 2M y GO+ y la única diferencia que he encontrado es que en la V4.1 el blindaje del minidin 6 no está conectado a masa y en mis modelos sí.

Responder