Keyboard Controller [PS/2] to ASCII

204 views
Skip to first unread message

Democrito

unread,
Mar 25, 2025, 11:16:52 AMMar 25
to FPGAwars: explorando el lado libre
Hola,

He montado un controlador que toma las señales de un teclado PS/2 y lo convierte a ASCII. Tiene en cuenta mayúsculas, minúsculas y los símbolos más utilizados. También tiene 3 salidas que permite ver si las teclas Shift, Ctrl y Alt son pulsadas y las hago ver a través de los leds de la Alhambra II. Tiene un consumo total de 203 LCs. Creo que todo estará en su sitio con teclados sajones. En teclados españoles habrá ciertos símbolos (por ejemplo el '+' y el '-') que no estarán donde marca la tecla, sino en otras teclas. Letras y números y la mayoría de los símbolos saldrán bien.

¿Por qué no usar directamente un teclado USB en vez de un teclado PS/2?
Porque consumiría muchos recursos y es muy complejo de crear.

Existe una manera muy económica de usar los teclados USB de hoy en día y convertirlo a PS/2. Se trata de unos cacharros que tienen esa función y son muy baratos. Yo me compré uno para el teclado y otro para el ratón por poco más de 2 euros. Los gastos de envío también son 2 euros, pero si haces otras compras (pueden ser de otros productos) que superen los 10 euros te sale gratis los gastos de envío en Aliexpress.

usb-ps2.jpg

Aquí podemos ver la salida USB del teclado que se conecta al cacharro de color azul oscuro, que es el conversor para teclado de USB a PS/2. Y finalmente eso va enchufado a un conector hembra PS/2. Este conector es opcional. Lo puedes comprar o reciclar de otro aparato que lo contenga, o simplemente soldar los cables en los pines que corresponda.

Sólo necesitamos 4 cables que son los dos de alimentación (+5 VCC y GND), y dos de comunicación (PS/2 Data y clock). Las entradas de comunicación normalmente necesitan dos resistencias en pullup, pero en mi diseño no hace falta porque desde la FPGA hago que se activen esas entradas en configuración pullup.

Adjunto un ejemplo. Se trata de abrir un terminal serie y escribir lo que quieras en dicho terminal. También podrás comprobar que pulsando las teclas Shift, Ctrl y Alt (no importa que sea derecha o izquierda del teclado) se encenderá un led determinado mientras estén esas teclas apretadas.

Un saludo.

PD: Con el cacharro que convierte USB a PS/2 puedes utilizarlo para este otro proyecto donde se profundiza en el protocolo para teclado PS/2.

Ahí aprenderás los conceptos de "make" (tecla apretada) y "break" (tecla que se acaba de dejar de apretar). Esta parte yo la hago funcionar distinto y sólo tengo presente la tecla apretada, excepto las teclas Shift, Ctrl y Alt.
example_ps2_to_serial_terminal.ice

Democrito

unread,
Mar 25, 2025, 11:17:52 AMMar 25
to FPGAwars: explorando el lado libre
Por cierto, se me olvidó comentar que no le des a verificar si vas a probar el circuito, dale directamente a subir.

Democrito

unread,
Mar 25, 2025, 3:32:32 PMMar 25
to FPGAwars: explorando el lado libre
El "cacharrilo" que pasa de USB a PS/2 lo compré aquí, por si os vale como referencia: https://aliexpress.com/item/1005007732438136.html

charli va

unread,
Mar 25, 2025, 3:50:15 PMMar 25
to fpga-wars-explora...@googlegroups.com
Demócrito! muchas gracias, he probado el módulo y la verdad que ha funcionado muy bien, te pasaré alguna idea que creo que puede ser buena de cara al bloque pero tengo que darle una vuelta.

Yo me he montado un adaptador ps2 reciclando una placa base vieja que tenía rota , mañana os mando alguna foto por si alguien se quiere animar a reciclar basura informática que tenga en el trastero.

Tenía unos cuantos adaptadores usb/ps2 de los maravillosos 90's y con esto van a volver a vivir porque la verdad poder aprovechar ratón y teclado usb de forma transparente y por un puñado de luts está fantástico.

Si te animas ir a por el ratón! sería una pasada ;)

Nuevamente muchísimas gracias!


--
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.
Para ver este debate, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/3c9a3dd8-80f7-49c6-8d03-d8359a375fa2n%40googlegroups.com.

Democrito

unread,
Mar 25, 2025, 4:20:15 PMMar 25
to FPGAwars: explorando el lado libre
Carlos, me apunto, pero ha de esperar un poco porque ahora mismo estoy liado con otra cosa. Muchas gracias por tus comentarios.

Aprovecho para comentar que me equivoqué en la cantidad de LUTs consumidos, dije que eran 203, pero no me dí cuenta que tenía puesto un puerto serie TX, en realidad mide 173 LCs. Con el puerto TX sí mide unos 210 LCs.


LCs.png

charli va

unread,
Mar 25, 2025, 4:26:01 PMMar 25
to fpga-wars-explora...@googlegroups.com
A tu ritmo! lo que tardes! simplemente te "tiraba la piedra" XD

Democrito

unread,
Mar 25, 2025, 4:40:56 PMMar 25
to FPGAwars: explorando el lado libre
jejeje

Jesus Arias

unread,
Mar 26, 2025, 7:40:13 AMMar 26
to FPGAwars: explorando el lado libre
Hola,
Me ha llamado la atención lo poco que ocupa el diseño. Me esperaba una BRAM para la tabla de traducción de scancodes a ascii, pero por lo visto yosys ha preferido ahorrarse la BRAM y sintetizarla con celdas lógicas, realmente con muy pocas (yosys me parece pura magia, mucho más que Merlín, meigas, y similares ;)

Respecto de la recepción de los datos del teclado ps2 creo que tan sólo llevas la cuenta de los 11 bits, pero esto no es muy robusto. Me he encontrado con casos en los que se puede perder un bit al arrancar y luego todos los códigos se leen mal (en mis diseños, no lo he probado con el que adjuntas). Yo lo he solucionado incluyendo un "perro guardian" que resetea el contador de bits cuando se lleva un tiempo un poco largo sin pulsos en el reloj del teclado.

Saludos

El martes, 25 de marzo de 2025 a las 16:16:52 UTC+1, Democrito escribió:

Democrito

unread,
Mar 26, 2025, 10:28:44 AMMar 26
to FPGAwars: explorando el lado libre
Hola Jesús,

En las pruebas que hice (intentando trolear al circuito) al parecer fue bien, sin embargo nunca se sabe, así que en cuanto vuelva a tocar este circuito veré cómo implemento esa especie de "time out".

Gracias por tus comentarios, siempre se aprende algo y/o propones puntos de vistas que conviene tener presente.

Jesus Arias

unread,
Mar 26, 2025, 10:57:08 AMMar 26
to FPGAwars: explorando el lado libre
Hola, Demócrito
Permíteme que te adjunte el código que he usado para simular el teclado en el clon del laser200.
La idea fundamental se parece bastante a tu diseño, aunque la principal diferencia es que en lugar de códigos ASCII se genera la posición que ocupa la tecla equivalente del clon en la matriz de 8x6 de su teclado. Matriz que se acaba simulando como una RAM de 48 bits. La "ROM" de traducción en mi caso es combinacional, con lo que nunca puede ir en una BRAM.
Otra diferencia es que no uso un contador de bits. En su lugar precargo el registro de desplazamiento con unos, y cuando el cero del  bit de start llega al extremo del registro es que se ha terminado de recibir el dato.
Saludos
keyb.v

charli va

unread,
Mar 26, 2025, 12:41:14 PMMar 26
to fpga-wars-explora...@googlegroups.com
Muy interesante el tema del "perro" :) la verdad que los dos planteamientos son muy interesantes y quizá estaría muy bien plantear por un lado un módulo "RAW" que por un lado tenga un buffer de salida de caracteres leido y un registro de flags  para indicar en cada momento el estado de las teclas tipo shift, num lock, etc y luego otro bloque de traducción que podría ser el caso de los códigos ascii o el de cualquier matriz de teclado tipo la del laser2000 o cualquier otro equipo retro que queramos simular con el teclado.

Yo, ando ahora también con otros frentes que quiero acabar antes de enredarme y sólo  lo he probado y ha funcionado muy bien, como os comenté monté un adaptador "Franken ps2" a partir de una placa base rota a la que le voy extirpando cualquier cosa útil XD

Por si alguien quiere montarse algo similar y le sirve de algo o porque tenga un socket a mano os dejo unas fotos y el diagrama de conexiones del socket ps2. Lo  he montado a modo de conector pmod, con un puente para poder colocar resistencias de cualquier valor o puentear de forma directa la conexión. 

IMG_2405.jpg.  IMG_2406.jpg
IMG_2407.jpg.    IMG_2408.jpg

Bottom-Mini-DIN-Female-Connector-Plug-PS2-Interface-2.jpg

Buena tarde!


--
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.

Jesus Arias

unread,
Mar 26, 2025, 2:15:45 PMMar 26
to FPGAwars: explorando el lado libre
Hola de nuevo y disculpad el código anterior pues he detectado que tiene un bug. Lo adjunto ya arreglado.
Lo cierto es que ese módulo era un tanto chapucero pues estaba hecho con "recortes" de otros proyectos, y al ponerme a adecentarlo he dado con el bug, que era:
- Si el flanco del reloj del teclado coincide en el mismo ciclo que el "timeout" del contador "perro guardian" se pierde el primer bit del dato. Eso implica que al final son sólo 10 bits recibidos y el efecto sería el de una tecla que no se pulsa, cosa que fácilmente se puede achacar a un fallo mecánico. La probabilidad del fallo era de una entre 4096, con lo que no es raro que se me haya pasado desapercibido.

Lo curioso es que una vez parcheado el número de celdas lógicas del diseño se ha reducido en unas 30.
Además ahora el nuevo código está bastante más abreviado, y con más comentarios, aunque es fundamentalmente el mismo de antes.

Aparte de esto he encontrado en un cajón uno de esos adaptadores de USB a PS2, y aunque no funciona me ha parecido que es algo completamente pasivo (todos los hilos del USB aparecen con 0 ohmios en serie en el lado PS2, salvo D+, y esa debe ser la causa de que no funcione). Por lo visto el micro del teclado detecta el tipo de interfaz al conectarse al PC y funciona como USB o PS2 según le toque.
Saludos
keyb.v

charli va

unread,
Mar 26, 2025, 2:30:18 PMMar 26
to fpga-wars-explora...@googlegroups.com

30 Lcs puede considerarse estar a "dieta" XD

Lo que comentas del USB es curioso, yo pensaba que el adaptador llevaría algún tipo de micro o chip empaquetado pero por lo que comentas, ahora me cuadra este esquema que encontré buscando el pinout del socket y que pensé que era sólo conceptual:

ps2-usb.png



--
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.

Democrito

unread,
Mar 26, 2025, 5:55:40 PMMar 26
to FPGAwars: explorando el lado libre
Es una auténtica barbaridad, Jesús, "unos 30" LCs! No sólo exprimes los circuitos, sino que además el formato en el que lo haces es muy elegante. Pongo un ejemplo para que lo vean los demás, es una línea de código de ejemplo:

<<
kreg<=(newsc|tout) ?11'h7FF : ( fall ? {kdat,kreg[10:1]} : kreg);
>>

La primera vez (creo) que vi hacer este tipo de virguerías fue con otros diseños anteriores que tienes en tu web personal, que por cierto es una fuente de inspiración, pero también te confieso que muchas cosas no las comprendo pero "creo" que puedo intuirlas. Pensar en hardware con módulos prefabricados más o menos me defiendo, pero pensar en hardware en verilog eso es otro nivel (superior).

Con respecto a los conversores USB-PS/2, menudo chasco! Yo también pensaba que habría algún chip dentro que hiciese la conversión. Por otra parte es muy curioso que el USB pueda actuar como PS/2. Si realmente esto es así, no es nada malo, todo lo contrario.

Me ha encantado lo que surge de estos temas.

Muchas gracias Carlos por probarlo y todos los comentarios que has hecho, han sido muy ilustrativo, al igual que Jesús por darle una vuelta de tuerca a todo lo que sale.

Jesus Arias

unread,
Mar 27, 2025, 4:54:49 AMMar 27
to FPGAwars: explorando el lado libre
<<
kreg<=(newsc|tout) ?11'h7FF : ( fall ? {kdat,kreg[10:1]} : kreg);
>>
Justo la línea donde estaba el bug, je, je ;)
Aunque en la versión corregida sigue igual, el parche está en tout:
tout=(toutc==12'hFFF) & (~fall);

Y esto era en lo que estaba pensando cuando escribí esa línea:
shift.jpg
En un registro de desplazamiento con entrada de habilitación (fall), y set (carga de todos los bits en uno) síncrono. Puesto que Dn depende de sólo 4 variables (Qn+1, Qn, fall, y (newsc|tout) ) cada bit de este registro debería caber en una sola celda lógica.
Buenos días

charli va

unread,
Mar 27, 2025, 11:01:19 AMMar 27
to fpga-wars-explora...@googlegroups.com
Demócrito es una de las personas con más capacidad de encontrar fallos de las que he conocido, es el "dardo en el bug"!

Me encantan los esquemas a mano como este y si estuviera en una servilleta aún mejor, suelen aglutinar ideas enormes ! , habría que hacer un monumento a la servilleta de papel en algún museo de las ciencias de este país XD

Pasad una buena tarde!

--
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.

Democrito

unread,
Mar 27, 2025, 11:26:17 AMMar 27
to FPGAwars: explorando el lado libre
La línea que puse y que ahí estuviese el bug fue pura casualidad

Unai Sainz

unread,
Mar 27, 2025, 12:01:03 PMMar 27
to fpga-wars-explora...@googlegroups.com
Democrito, could you find a bug here? https://github.com/Unike267/MPPT/blob/main/LAZO_ABIERTO_SIMULACION/mult_logic.v hahaha (just kidding).

The behavioral module is explained in section "2.3.3.3 Multiplicador lógico" (there's a link in the repo's README.)

BTW, very beautiful code, Jesús!

Cheers!

beni...@gmail.com

unread,
Mar 27, 2025, 12:02:47 PMMar 27
to FPGAwars: explorando el lado libre
Hola a todos,

Cuidado con los adaptadores de USB a PS2. La mayoria que encontrais son pasivos, al menos los que habeis puesto por aqui.
En la tansicion de PS2 a USB, los teclados y ratones eran multinorma y aceptaban esos adaptadores. A dia de hoy, pocos teclados son multinorma , es decir que si son USB, no funcionaran si utilizais ese tipo de adaptadores.
Cuanto mas antiguo sea el telcado mas probabilidad de que sea multinorma.

Esta cuestion es tipica en los foros y grupos de FPGAs estilo ZXUNo, ZXDos, ZXTres,  UnAmiga , NeptUNO, Poseidon y variados a estos. Son FPGAs para uso ludico principalmente en donde se implementan viejos microcontroladores y equipos de 16 bits usando el teclado PS2 como teclado base. Y en estas FPGAs se usa un controlador PS2 sencillo. Lo mismo pasa con el raton PS2 

Espero haber resuelto vuestras dudas con este tema

Un saludo
Fernando Mosquera (Benitos)

Unai Sainz

unread,
Mar 27, 2025, 12:04:53 PMMar 27
to fpga-wars-explora...@googlegroups.com
The module's behaviour is explained in section "2.3.3.3 Multiplicador lógico" there's a link in the repo's README.*

Sorry for my English :)

charli va

unread,
Mar 27, 2025, 12:09:03 PMMar 27
to fpga-wars-explora...@googlegroups.com
Pues un gran aviso Fernando, muchísimas gracias!, desconocía completamente que esos adaptadores literalmente fueran un puenteado. Muy importante para no volvernos locos.

Yo el teclado que he probado , la verdad ha funcionado a la primera y es un teclado relativamente nuevo y bastante bueno, también lo probé con el teclado que viene con un kit de la raspberry pi que es malucho y también funcionó.

Demócrito anda con el ratón y esto que indicas es de agradecer porque te puedes estar dando de bruces con que el dispositivo que estés intentando integrar como dices no sea multinorma.

Un abrazo!

Jesus Arias

unread,
Mar 27, 2025, 4:00:01 PMMar 27
to FPGAwars: explorando el lado libre
Hola a todos
He localizado otro de esos adaptadores de USB a PS2 y este sí que ha funcionado con los dos teclados USB que he probado. El más nuevo será más o menos del 2015 (un NGS marca blanca, el otro es un Genius más viejo).
Aunque he tenido que añadir un par de resistencias de pull-up al circuito, ya que según parece es la presencia de tensión en las señales del teclado lo que identifica al PS2 (el bus USB tiene pull-downs de 15kohm a tierra):
pull_ups.png
También mantengo las resistencias en serie con los pines de la FPGA ya que las señales del teclado son de 5V. La placa Alhambra ya tiene unos 200ohm de resistencia en serie que nos limitan la corriente pero no pasa nada por añadir más resistencia, que estas señales son muy lentas y otras placas de FPGA puede que no tengan los pines protegidos así que es buena idea no olvidar ponerlas. En cuanto a los pull-ups seguramente también valdrían los internos de la FPGA aunque estén conectados a +3.3V, tal como nos mostró Demócrito, y nos ahorrarían un par de resistencias.

Lo cierto es que el encontrar que muchos de los teclados USB también funcionan como PS2 es un gran descubrimiento, porque el USB es un %$@&|$ de interfaz. Lo malo es que no tenemos garantizado que vayan a funcionar hasta que los probemos.

Saludos

beni...@gmail.com

unread,
Mar 27, 2025, 4:25:03 PMMar 27
to FPGAwars: explorando el lado libre
Hola Jesus, 

La verdad es que me esta sorprendiendo que me digas que has encontrado tantos teclados que so compatibles con PS@.
Puede que el hecho de añadir esas dos resistencias pull-up haga que los active y hayas descubierto algo muy importante porque desde otras FPGAs a la gente le cuesta encontrar Teclados compatibles PS2.
Hay otras placas FPGAs incluso comerciales que incluso aunque tienen un conector USB, lo tienen conectado a la FPGA medianto los dos pines DAT y CLK del protocolo PS2. Un ejemplo lo tienes en las Nexys o Basys de Digilent 
Y su usuarios tienen el mismo problema, solo los teclados antiguos USB son compatibles con estas FPGAs

Un Saludo
Fernando Mosquera (Benitoss)

beni...@gmail.com

unread,
Mar 27, 2025, 4:40:42 PMMar 27
to FPGAwars: explorando el lado libre
Tambien algo que se me olvidadba.
Ahora que recuerdo en otras FPGAS me acuerdo que se utiliza el pull-up interno para esas dos lineas de PS2.
Y otra cosa importante, hay que tener cuidado con la implementacion fisica y conexion fisica del teclado.
Estos teclados van a 5 V, y las FPGAS van a 3.3 V. Normalmente en la implementaciones de teclado USB en placas FPGA no protegigas como la Alhambra, hay que añadir electronica para proteger las lineas de la FPGA

Por ejemplo, este es el esquema para el PS2 del ZX_NEXT que usa una Xilinx X16

PS2_ZXNEXT.png

Y este es el esquema del PS2 del ZXUNO

PS2_ZXUNO.png
Por cierto miraros este video que no tiene desperdicio, creo que usa una ICE40. Tambien tiene ejemplos en Verilog que serian compatibles con IceStudio

Fernando (Benitoss)

charli va

unread,
Mar 27, 2025, 5:38:50 PMMar 27
to fpga-wars-explora...@googlegroups.com
Gracias Fernando, el video tiene muy buena pinta! seguro que sacamos algo util.

yo de momento todos los teclados han funcionado perfectamente con los pullups internos como hizo Demócrito, he probado 4 muy distintos unos de otros si quereis que os de los modelos mañana os los paso.



Democrito

unread,
Mar 27, 2025, 6:53:21 PMMar 27
to FPGAwars: explorando el lado libre
El único teclado que he usado es chino barato-barato, de marca "Sanda" (con cable) y que yo le llamo "sandía" cariñosamente. He buscado por Inet. alguna foto, pero no lo encuentro. Pero lo dicho, de momento el circuito USB -> ps/2 para teclado no ha dado problemas, al menos con la FPGA Alhambra II.

Llevo desde ayer (me refiero al miércoles) tratando de manejar un ratón del mismo modo y de momento tiene pinta de ser misión imposible, al menos con el adaptador pasivo.

charli va

unread,
Mar 28, 2025, 3:49:13 AMMar 28
to fpga-wars-explora...@googlegroups.com
Yo he probado 4 teclados y han ido todos perfectos :)

Lo del ratón creo que el diseño va muy desviado, tengo que mirarme la documentación bien del ps2, esta tarde te cuento si puedo probar algo vale? el tema es que el ratón tiene más miga, hay que seguir una secuencia determinada e incluso por lo que he podido ver dejar unos tiempos de espera clavados entre resetes (imagínate, hace sun reset y hay que esperar exactamente 100us antes de lanar otro comando).

si no se hace esa secuencia exacta el ratón está en modo "disabled" y no emite nada. Está claro que está el tema que comenta Fernando que he hecho búsquedas y preguntado a las ias y efectivaente no todos los dispositivos son compatibles, peeero a mi me da que casi todos son compatibles ,es sólo intuición y es más que la secuencia debe ser compleja o qpequeños detalles como los pullups del teclado es lo que marean al personal.  Déjame darle una vuelta, igual es en vano pero algo aprenderé por el camino.

Por otro lado tu idea de simplificar el ratón usb, me he despertado pensando que aunque suena loco igual funciona XD. Es decir el protocolo usb es muy complejo si se quiere soportar el protocolo, peeero igual si sabes que lo que vas ac onectar es un teclado o un ratón, tal cual y obvias en sí el protocolo y vas a recibir y enviar cosas a piñón, igual se simplifica muchísimo tipo lo que me has pasado.

Ahí hay cosas que me suscitan interrogantes porque lo veo demasiado demasiado simplificado pero, vete a saber, igual si obviamos todas las generalidades del usb se queda en una gilipollez, lo vamos aprobar.

Déjame que hoy por la mañana lo tengo complicado pero esta tarde reviso ambas cosas y te cuento.

Las inout de verilog sin el módulo de juan que es adhoc para las ice40 son una maravilla. En cuanto veas como van te va a flipar, olvídate de meter. y sacar por pines de entrada/salidas, simplemente tienes que marcar la casilla de inout en el pin y luego en verilog pones algo tan sencillo como assign ps2_clk = ps2_clk_oe ? 1'b0 : 1'bz;

el bz es el modo tristate en el cable y entonces puedes leerlo, ya está sin más jaleos.

Luego lo reviso todo y te digo.

Un feurte abrazo!!



charli va

unread,
Mar 28, 2025, 3:52:08 AMMar 28
to fpga-wars-explora...@googlegroups.com
Buenas familia! le he escrito este mensaje a Demócrito, con otro que me había lanzado directamente y no me he dado cuenta y he respondido en la lista sin darme cuenta XD

Ya os contaremos si sacamos algún avance.

charli va

unread,
Mar 28, 2025, 1:45:27 PMMar 28
to fpga-wars-explora...@googlegroups.com
Buenas tardes familia, acabo de probar un teclado que aún no había probado , es el nuevo de rpi que venden o por separado o con el kit de la rpi4, que no hace mención, literalmente es como si ni siquiera recibiera alimentación, posiblemente al no tener la interfaz eléctrica usb correcta el teclado lo detectará y no inicializará.

Lo comento porque de 5 teclados, 4 han funcionado perfectamente (un chino, un logitech,un corsair y el antiguo de raspberry pi) pero este nuevo me da la sensación de que el teclado lleva un hub usb y el propio controlador del teclado irá conectado a ese hub. Como la interfaz de salida debe ser el hub, no es capaz de funcionar con el conversor pasivo.

Democrito

unread,
Apr 10, 2025, 4:41:04 AMApr 10
to FPGAwars: explorando el lado libre
Acabo de subir a mi GitHub unas correcciones del teclado (no salía la letra U) y he aprovechado para hacer otras modificaciones como por ejemplo teclado español y en el futuro crearé el inglés.

También he añadido ejemplos para (además de usar un terminal serie) verlo a través de una pequeña OLED monocromática.

Todas las actualizaciones las llevo aquí:

beni...@gmail.com

unread,
Apr 30, 2025, 5:56:08 PMApr 30
to FPGAwars: explorando el lado libre
Democrito,

Ahora que lo acabo de ver, mira este esquema de como se conecta de manera segura un teclado PS2 a una FPGA
Este esquema es el que se usa en FPGAs como el ZXUNo. ZXDos, ZXTres, NeptUNO y NeptUNO+
La idea es evitar que lleguen a la FPGA los 5 Voltios de los que se alimenta el teclado PS2
La misma construccion sirve para ratones PS2

PS2_FPGA_conection.png

Espero que te pueda servir

Saludos
Fernando Mosquera

Democrito

unread,
Apr 30, 2025, 6:51:17 PMApr 30
to FPGAwars: explorando el lado libre
Fernando muchas gracias por ese esquema. La cosa es que trabajo con una Alhambra II y en sus I/O tienen una resistencia en serie de 200 ohmios. Digamos que esa resistencias en los pines (tanto en lectura como escritura) permite que una entrada de 3.3V puedan soportar los 5 voltios, o dicho de otro modo, las vuelvan tolerantes a ese voltaje sin problemas. Llevo 5 años (este dato no lo recuerdo bien igual son 4 o son 6 años) que no he tenido ningún problema con las tensiones de entrada. Por supuesto la salida siempre son de 3.3V, porque es una "historia" pasiva.

No estoy diciendo que una simple resistencia en serie a la I/O sea lo más aconsejable, pero hasta el momento y lo que yo he probado ha funcionado perfecto y sin problemas, es lo único que puedo decir a ese respecto desde la experiencia.

Las excepciones siempre están ahí, pero hay que averiguarlas, y el tiempo siempre es el mejor maestro y nunca falla.

De todas formas, si tuviera que enviar un cohete a la luna y dependiese de un diseño mío, haría cosas como lo que has mostrado para asegurarme de que por el motivo que sea no pueda haber compatibilidad de voltajes, evitar excepciones en definitiva.

Muchas gracias por tu comentario!

Un fuerte abrazo!

Jesus Arias

unread,
May 2, 2025, 5:30:03 PMMay 2
to FPGAwars: explorando el lado libre
Hola,
En este esquema las resistencias se pueden hacer bastante mayores pues la frecuencia del reloj es de solo unos 10kHz. Eso reduce la corriente que se inyecta en la alimentación de +3.3V. Con 510ohm se están inyectando unos 4.7mA en la alimentación, y si esa corriente llegase a ser mayor que la que se consume en la alimentación de 3.3V la tensión podría subir por encima de su valor nominal.
Por otra parte, esos diodos de protección, o algún circuito similar, ya están integrados como protecciones contra descargas electrostáticas en los pines de la FPGA (y en cualquier circuito CMOS), con lo que no es necesario ponerlos de forma externa salvo que queramos absorber corrientes grandes.

Saludos
El miércoles, 30 de abril de 2025 a las 23:56:08 UTC+2, beni...@gmail.com escribió:
Reply all
Reply to author
Forward
0 new messages