[Icestudio][PS/2] Controlador básico para teclado PS/2

476 views
Skip to first unread message

Obijuan

unread,
Sep 18, 2017, 11:23:03 AM9/18/17
to FPGAwars: explorando el lado libre
Hola!

He hecho un mini-controlador de teclados PS/2:

 


Toda la documentación está en esta wiki:

https://github.com/Obijuan/PS2-KeyBoard-FPGA/wiki

La verdad es que es super-adictivo usar el teclado. Ahora ya tengo "infinitos" pulsadores para hacer pruebas :-)


En realidad son dos controladores. El primero es el de bajo nivel: simplemente recibe las tramas que vienen del teclado y devuelve los datos (de 8 bits) en paralelo, junto a un pulso para poder capturar el dato. Este es el ejemplo "hola mundo", que saca por los leds los datos recibidos:





Si se conecta directamente al puerto serie, podemos ver todos los códigos que genera el teclado al apretar / soltar las teclas:



Por ejemplo, si apretamos la "a" vemos esto:




El primero 1C es el código de la tecla a. Se recibe al pulsarla. El F0 1C es el código de "Tecla soltada"

Los códigos de las teclas son estos:



Para procesar la información de tecla pulsada / liberada junto con los códigos extendidos, he creado otro controlador superior. Este es el ejemplo hola mundo:



Aunque he usado el mismo dibujo para el bloque, es otro controlador. Devuelve el código de la tecla, y un pulso en make si la tecla se ha pulsado, y uno en break cuando se libera. En el ejemplo, se ha usado el pulso de tecla pulsada (make) para capturar el dato en el registro y sacarlo por los Leds. Pero si en vez de make usamos la señal break, se capturará la tecla al soltarla

Finalmente, para muchas aplicaciones es útil reconocer ciertas teclas. He hecho un ejemplo creando los bloques para las teclas 1,2,3 y 4. Al apretar estas teclas se cambia de estado los leds 0.,1,2 y 3 respectivamente



En el bloque de cada tecla lo que hay es un comparador, y se genera un pulso de salida si se ha reconocido la tecla.   A la salida de esos bloques he puesto unos biestables T para que cambien su estado con cada pulsación. Y ellos están conectados a los leds para ver su estado

La verdad es que es un vicio esto :-)

Saludos, Obijuan
Auto Generated Inline Image 1
Auto Generated Inline Image 2
Auto Generated Inline Image 3
Auto Generated Inline Image 4
Auto Generated Inline Image 5
Auto Generated Inline Image 6
Auto Generated Inline Image 7

Juan José Luna Espinosa

unread,
Sep 18, 2017, 11:33:05 AM9/18/17
to fpga-wars-explora...@googlegroups.com
Fantástico! Poco a poco te estás haciendo un ordenador.

Creo que una memoria RAM serie (SPI) sería una buena adición a VGA + PS/2


--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/933ab6d4-ed38-4efa-9036-2ca92f120be5%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juanma Rico

unread,
Sep 18, 2017, 7:29:08 PM9/18/17
to FPGAwars: explorando el lado libre
¡¡Genial Juan!!

Ya había visto en github que estabas con pruebas de teclado... :)
Pero eres muy malo, no das tiempo a saciar el SAV con la controladora VGA cuando ya generas más ansiedad con el teclado...  jajajajaja
Habrá que desempolvar el viejo teclado PS/2... :)))

Con este proyecto ya realizado me surge una duda, perdonad mi ignorancia... ¿Por qué no conectar directamente un teclado USB?

Saludos.

Juanma Rico

unread,
Sep 18, 2017, 7:41:22 PM9/18/17
to FPGAwars: explorando el lado libre

Hola Juan José,

En ello estoy... :))

Con el proyecto "Cold/Warm boot" de escritura en la flash necesito una memoria RAM de al menos 4kB... ya he pedido los integrados... estoy a la espera de recibirlos. En cuanto los reciba espero poder aportar eso de la RAM al grupo (junto con los cambios de escritura en la flash y por tanto, haciendo efectivo el uso de más de una imagen desde la propia FPGA).

Igual es un proyecto muy ambicioso... pero como dice Jesús, pasito a pasito... y en el camino igual conseguimos alguna funcionalidad extra, lo de la RAM no estaría mal.  :))

Saludos.

Obijuan

unread,
Sep 19, 2017, 2:17:41 AM9/19/17
to FPGAwars: explorando el lado libre
Como dice la canción: "Pasito a pasito... suave suavecito..."

A mí no me interesa tanto la aplicación final (un controlador de teclado o de vga) como el proceso para que la gente aprenda a llegar hasta ellos

Antes de enseñar cómo hacer un controlador USB (yo tengo que aprenderlo), empiezo por uno de PS/2 que se puede implementar con un registro de desplazamiento y poco más

Luego, poco a poco, se irán construyendo el resto de cosas, entre todos  :-)

El teclado usb lo tendremos. Paciencia

Saludos, Obijuan

Julián Caro Linares

unread,
Sep 21, 2017, 4:09:36 AM9/21/17
to FPGAwars: explorando el lado libre
Está genial Juan

Me encantan  estos ejemplos tan sencillos que desmitifican un poco que la electrónica es "solo" complicada y que demuestran que haciendo las cosas con calma y bien se entiende y se pueden hacer muchísimas cosas :)

Juan Gonzalez Gomez

unread,
Sep 21, 2017, 5:05:38 AM9/21/17
to FPGA-WARS: explorando el lado libre
Gracias Julian! Eso es lo que quiero intentar, conseguir que la gente desarrolle una intuición sobre cómo hacer circuitos digitales.

No sé si lo conseguiré, pero el viaje seguro que merece la pena :-)

Saludos, Obijuan

El 21/9/2017 10:09 a. m., "Julián Caro Linares" <jcarol...@gmail.com> escribió:
Está genial Juan

Me encantan  estos ejemplos tan sencillos que desmitifican un poco que la electrónica es "solo" complicada y que demuestran que haciendo las cosas con calma y bien se entiende y se pueden hacer muchísimas cosas :)

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Salvador Eduardo Tropea

unread,
Sep 22, 2017, 1:29:30 PM9/22/17
to fpga-wars-explora...@googlegroups.com
¡Hola ObiJuan!

Muy buena aplicación. Ya me pude armar un conector PS/2 para la Kéfir.
Usé uno de los dos conectores PMOD, que todavía no había probado.
Conseguí este conector de teclado+mouse de un mother.
En la foto se ve el módulo PS/2 para PMOD improvisado (por ahora soldé
los pines del teclado, no los del mouse).

La Kéfir funciona con 3,3 V, el teclado no tiene problemas,
probablemente alguno de los viejos (con el conector DIN grande) no
funcione, pero estos "modernos" andan con 3,3 V.

En el tutorial el link a 09-key-leds-2.ice está roto, hay que
corregirlo, le falta el nombre del archivo.

Saludos, Salvador


On 18/09/17 12:23, Obijuan wrote:
> Hola!
>
> He hecho un mini-controlador de teclados PS/2:
>
>
>
>
> Toda la documentación está en esta wiki:
>
> https://github.com/Obijuan/PS2-KeyBoard-FPGA/wiki
>
> La verdad es que es super-adictivo usar el teclado. Ahora ya tengo
> "infinitos" pulsadores para hacer pruebas :-)
>
>
> En realidad son dos controladores. El primero es el de bajo nivel:
> simplemente recibe las tramas que vienen del teclado y devuelve los
> datos (de 8 bits) en paralelo, junto a un pulso para poder capturar el
> dato. Este es el ejemplo "hola mundo", que saca por los leds los datos
> recibidos:
>
>
>
>
>
> Si se conecta directamente al puerto serie, podemos ver todos los
> códigos que genera el teclado al apretar / soltar las teclas:
>
>
>
> Por ejemplo, si apretamos la "a" vemos esto:
>
>
>
>
> El primero 1C es el código de la tecla a. Se recibe al pulsarla. El F0
> 1C es el código de "Tecla soltada"
>
> Los códigos de las teclas son estos:
>
>
>
> Para procesar la información de tecla pulsada / liberada junto con los
> códigos extendidos, he creado otro controlador superior. Este es el
> ejemplo hola mundo:
>
>
>
> Aunque he usado el mismo dibujo para el bloque, es otro controlador.
> Devuelve el código de la tecla, y un pulso en make si la tecla se ha
> pulsado, y uno en break cuando se libera. En el ejemplo, se ha usado
> el pulso de tecla pulsada (make) para capturar el dato en el registro
> y sacarlo por los Leds. Pero si en vez de make usamos la señal break,
> se capturará la tecla al soltarla
>
> Finalmente, para muchas aplicaciones es útil reconocer ciertas teclas.
> He hecho un ejemplo creando los bloques para las teclas 1,2,3 y 4. Al
> apretar estas teclas se cambia de estado los leds 0.,1,2 y 3
> respectivamente
>
>
>
> En el bloque de cada tecla lo que hay es un comparador, y se genera un
> pulso de salida si se ha reconocido la tecla.   A la salida de esos
> bloques he puesto unos biestables T para que cambien su estado con
> cada pulsación. Y ellos están conectados a los leds para ver su estado
>
> La verdad es que es un vicio esto :-)
>
> Saludos, Obijuan
> --
> Has recibido este mensaje porque estás suscrito al grupo "FPGAwars:
> explorando el lado libre" de Grupos de Google.
> Para cancelar la suscripción a este grupo y dejar de recibir sus
> mensajes, envía un correo electrónico a
> fpga-wars-explorando-el...@googlegroups.com
> <mailto:fpga-wars-explorando-el...@googlegroups.com>.
> Para publicar en este grupo, envía un correo electrónico a
> fpga-wars-explora...@googlegroups.com
> <mailto:fpga-wars-explora...@googlegroups.com>.
> Visita este grupo en
> https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
> Para ver esta conversación en el sitio web, visita
> https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/933ab6d4-ed38-4efa-9036-2ca92f120be5%40googlegroups.com
> <https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/933ab6d4-ed38-4efa-9036-2ca92f120be5%40googlegroups.com?utm_medium=email&utm_source=footer>.
> Para acceder a más opciones, visita https://groups.google.com/d/optout.


--
Ing. Salvador Eduardo Tropea http://utic.inti.gob.ar/
INTI - Micro y Nanoelectrónica (CMNB) http://www.inti.gob.ar/
Unidad Técnica Sistemas Inteligentes Av. General Paz 5445
Tel: (+54 11) 4724 6300 ext. 6919 San Martín - B1650KNA
FAX: (+54 11) 4754 5194 Buenos Aires * Argentina




DSC09486.JPG

Juan Gonzalez Gomez

unread,
Sep 22, 2017, 1:59:29 PM9/22/17
to FPGA-WARS: explorando el lado libre
Hola Salvador!

Gracias por aviso. En cuanto pueda arreglo el enlace. Llevo unos dias de congresos y no estoy ordenador. Mientras tanto, los ejemplos estan en el repo aquí:


En cuanto llegue a madrid pruebo tu transmisor serie mejorado :-)

Saludos, Obijuan

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com <mailto:fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com>.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com <mailto:fpga-wars-explorando-el-lado...@googlegroups.com>.


--
Ing. Salvador Eduardo Tropea          http://utic.inti.gob.ar/
INTI - Micro y Nanoelectrónica (CMNB) http://www.inti.gob.ar/
Unidad Técnica Sistemas Inteligentes  Av. General Paz 5445
Tel: (+54 11) 4724 6300 ext. 6919     San Martín - B1650KNA
FAX: (+54 11) 4754 5194               Buenos Aires * Argentina
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar una entrada en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.

Obijuan

unread,
Sep 25, 2017, 4:06:17 AM9/25/17
to FPGAwars: explorando el lado libre
Hola Salvador!


El viernes, 22 de septiembre de 2017, 19:29:30 (UTC+2), Salvador Eduardo Tropea escribió:

En el tutorial el link a 09-key-leds-2.ice está roto, hay que
corregirlo, le falta el nombre del archivo.


Corregido!  :-)  Gracias por el aviso

Saludos, Obijuan

 
> Para publicar en este grupo, envía un correo electrónico a

Juan Gonzalez Gomez

unread,
Sep 27, 2017, 11:41:45 AM9/27/17
to FPGA-WARS: explorando el lado libre
Estupendo!!!!  :-)

Cada vez tenemos más cosas

Gracias

Saludos, Obijuan

El 27 de septiembre de 2017, 17:36, Salvador Eduardo Tropea <salv...@inti.gob.ar> escribió:
Hola!

Ya agregué lo del teclado a la colección de Kéfir.
Al bloque de recepción PS/2 le agregué una salida que indica si hubo error de paridad. No creo que sirva de mucho, pero es buena para mostrar como se usa la paridad. El bloque es muy similar al tuyo, sólo que usa otros bloques diferentes, así es más fácil de mantener.
El bloque que decodifica el estado del teclado, el de la FSM, lo mantuve separado del de recepción y lo rehice usando sólo bloques, sin verilog. No es un circuito óptimo, pero creo que se puede entender.
Los bloquecitos que detectan teclas son un poco diferentes, por las señales del decodificador. Son parametrizables con los templates, por lo que hice del 0 al 9, pero agregar cualquier otra tecla es trivial.
Agregué unos bloques que reflejan el estado de la tecla (el LED está encendido mientras se mantiene presionada).
Y otros bloques que hacen esto con las teclas "extendidas", en el ejemplo usé las flechas.

Todo en github.

Saludos, Salvador



On 22/09/17 14:58, Juan Gonzalez Gomez wrote:
Hola Salvador!

Gracias por aviso. En cuanto pueda arreglo el enlace. Llevo unos dias de congresos y no estoy ordenador. Mientras tanto, los ejemplos estan en el repo aquí:

https://github.com/Obijuan/PS2-KeyBoard-FPGA/tree/master/ps2-keyb-collection/examples

En cuanto llegue a madrid pruebo tu transmisor serie mejorado :-)

Saludos, Obijuan


        Para publicar en este grupo, envía un correo electrónico a
        fpga-wars-explorando-el-lado-lib...@googlegroups.com
        <mailto:fpga-wars-explorando-el-lado...@googlegroups.com>




    --     Ing. Salvador Eduardo Tropea http://utic.inti.gob.ar/
    INTI - Micro y Nano

    (CMNB) http://www.inti.gob.ar/
    Unidad Técnica Sistemas Inteligentes  Av. General Paz 5445
    Tel: (+54 11) 4724 6300 ext. 6919
    <tel:%28%2B54%2011%29%204724%206300%20ext.%206919>  San Martín -
    B1650KNA
    FAX: (+54 11) 4754 5194 <tel:%28%2B54%2011%29%204754%205194>

     Buenos Aires * Argentina





    --     Has recibido este mensaje porque estás suscrito al grupo
    "FPGAwars: explorando el lado libre" de Grupos de Google.
    Para cancelar la suscripción a este grupo y dejar de recibir sus
    mensajes, envía un correo electrónico a
    fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com

    Para publicar una entrada en este grupo, envía un correo

    Para obtener más opciones, visita
    https://groups.google.com/d/optout



--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com <mailto:fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com>.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com <mailto:fpga-wars-explorando-el-lado...@googlegroups.com>.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

Jesús Arroyo

unread,
Oct 1, 2017, 5:43:24 PM10/1/17
to FPGAwars: explorando el lado libre
Muy fan de este bloque :D

(Me encanta el mapa de códigos!)

Un saludo.
Reply all
Reply to author
Forward
0 new messages