Necesito conectar 4 teclados ps2 a tan solo 4 pins del arduino.
+5
GDN
pin2 (digital) - Datos
pin3 (digital) - Reloj
Pensando que nunca funcionarán al mismo tiempo, se he ocurrió conectarlos directamente, los cuatro tal cual... pero claro... no podia ser tan facil!!! y efectivamente no lo fue, al presionar una tecla de cualquiera de ellos, automáticamente empieza a funcionar el Reloj, y vuelve locos al resto que se lian a emitir codigos (supongo que de error) y arduino recibe pura basura (cada vez diferente)...
Necesito algún tipo de Multiplexor, barato, para implementarlo sobre una PCB y si es posible como tengo que hacer las conexiones (estoy un poco pez en este tema).
Yo no veo muy factible un multiplexor. Un multiplexor te va a ser útil para manejar diferentes salidas, o gestionar entradas siempre que admitan una lectura asíncrona, es decir, que no importe que seas tu quien decide CUANDO leer cada entrada, pues el gobierno del multiplexor lo haces tu.
EN el caso del teclado, tu nunca vas a saber cuando va a empezar a trasnmitir un teclado concreto, con lo que no podrás "prestarle atención" justo cuando lo merece.
Lo normal con un multiplexor es que vayas rotando y cada fracción de tiempo leas una entrada distinta, pero como te digo en cualquier momento puede empezar a transmitir un PS2 y tu no estas apuntando a él.
Creo que no te quedará más remedio que usar 6 señales, 2 para cada teclado.
Y el clock tampoco lo puedes unificar pues son los teclados quienes lo generan, no el host.
Bueno, podrías hacer un OR de todos los CLK y luego el código determinar cual de los data está mandando algo, eso si, pero se te prepararía un cirio si pulsas algo a la vez en dos teclados. Así te ahorrarías 2 patas (1 CLK + 3 DATA).
Gracias por la aclaración del tema de los Multiplexores...
Un par de Premisas sobre el funcionamiento
Los teclados se encontrarán en diferentes habitaciones y se gestionan por una sola persona...
No importa de que teclado procedan las ordenes, simplemente la orden en si...
Se me ocurre una posible solución:
Como bien has dicho, si se unen los 4 Clock con un OR y los cuatro Data (se supone que funcionaria??) (siempre suponiendo que solo se utiliza un teclado)
(No se si se nota... pero ando mmuyyy escaso de pins!!!)
Otra solución sería un segundo Arduino y comunicarlos entre si.... (no lo he intentado nunca)
La verdad es que nunca lo he probado, pero segun tengo entendido, toda la información de un teclado (tanto CLK como DATA) PARTEN del teclado, con lo que a priori pienso que no debería haber problema.
Pero en tu mensaje dices que puenteandolo todo te empiezan a tirar basura tras la primera pulsacion. Se supone que los 3 teclados reciben la tecla del cuarto y lo interpretan como algo que no pueden entender con lo que responden "algo".
Solo se me ocurre algun circuito que en cuanto que reciba un pulso de CLK, conecte eléctricamente el DATA correspondiente a la entrada del Arduino durante un tiempo de un par de segundos (no tardarás menos de eso en cambiar de teclado).
Igual es más fácil de implementar esto, como dices, con un segundo arduino, con lo cual casi que haces en ese segundo arduino la gestión completa de las 6 líneas y las metes por serie
segun tengo entendido, toda la información de un teclado (tanto CLK como DATA) PARTEN del teclado
Solo a titulo informativo:
Al igual que tu, yo tambien pensaba que los teclados eran dispositivos unidireccionales, vamos, que todos los datos los envia el propio teclado hacia el "ordenador", pero me llevé una gran sorpresa al comprobar que un teclado es capaz de responder a peticiones echas desde el "ordenador"
Un par de ejemplos
· Los leds que todos tenemos en el teclado NO son controlados por el propio teclado, sino que obedecen a comandos enviados al teclado....
· Otro ejemplo y este con mucha logica... si el teclado envia el valor de una tecla y el "ordenador" detecta un error de Checksum le pide al teclado que la repita.
Los errores que envian los teclados al puentearlos tienen mucha logica, pues el resto de teclados reciben la señal del Clock (si que la entienden) y la de Data (codigo de Tecla pulsada) la cual no estan preparados para recibir (realmente solo pueden recibir 8 o 10 comandos predefinidos, el resto lo interpretan como error o piden que se les repita).
He leído tu consulta y estoy seguro que lo que realmente necesitas es usar un I2C-TWI, con este sistema puedes conectar hasta 127 entradas creo recordar según las especificaciones de Philips en su I2Cbus.
Busca en la red documentación al respecto, además en Arduino Playground - I2C puedes encontrar algo al respecto.
Por mi parte estoy intentando manejar distintas entradas a una placa de Arduino con un limitado número de hilos (entradas) en I2C, se usan 2 (SDA, SCL más la alimentación). Creo que con eso tendrás la solución que buscas.
Me interesaria muchisimo poder comunicar a traves de I2C (ya tengo un par de pantallas 20x4 que lo hacen) pero de momento todos los adaptadores que encuentro son de paralelo a I2C y no he visto nada de serie a I2C... ;-/ de todas formas con la información que me has dado seguiré buscando a ver que encuentro....
Al investigar un poco sobre el funcionamiento del I2C y del Ps2 me ha surgido una duda... a ver si alguien me la puede aclarar...
En el protocolo Ps2 trabajamos con:
Alimentación
DATA - (Serie)
CLOCK - (Serie)
y en el protocolo I2C con:
Alimentación
SDA (Serial DAta)
SCL (Serial CLock)
Estos protocolos solo me parecen IDENTICOS a mi?? (Supongo que el I2C será una especie de actualización sobre el Ps2)
Que pasaría si se conecta directamente el Ps2 a los puertos SDA y SCL??? (será cuestión de probar...)
Hola! No hay porque, encantado de servir con mi aporte.
En cuanto a tu pregunta,
Que pasaría si se conecta directamente el Ps2 a los puertos SDA y SCL??? (será cuestión de probar...)
La verdad, no lo he probado. En principio y sólo en principio, debe haber alguna respuesta, el problema puede ser que haya comunicación inteligible.
Por otra parte, el I2Cbus es bastante anterior a la PS2, por ese motivo te digo que algo debe ocurrir al interconectarlos, las señales son similares, falta ver los tiempos de acceso y demás 'limaduras', eso te lo dejo a tu antojo, ya contarás que sale de tu experiencia.
una forma barata de solucionar esto seria utilizar un puñado de microcontroladores haciendo de conversor I2C-PS2. Los podrias alimentad con los mismos 5V del Arduino original y asi, de hecho, podrias poner tantos dispositivos como quisieras (hasta 127).
Estoy muy interesado en lo que comentas de los microcontroladores, pero la verdad esque estoy totalmente perdido con ese tema, supongo que te refieres a hacer algo similar a lo que estais haciendo con el tema del RS485.
Me podrias indicar por donde empezar (sobre todo tipo de microcontrolador).