|
|
|
KBDEMUL : Emulación Teclado PS/2 con un 18F1320
|
| |
Descripción
|
|
|
- Si embargo este proyecto pretende ir
un paso mas allá. También deseo ampliar su funcionalidad intentando
darle un valor añadido, que no se quede en un mero experimento, y para
ello lo que vamos a implementar es un circuito by-pass entre el PC y el
Teclado, y que sea nuestro PIC quien intervenga en dicho circuito cuando
nos parezca oportuno e inyecte su emulación PS/2 en paralelo al teclado
real. Que se convierta nuestro PIC en un teclado virtual conectado al
mismo tiempo que el real a nuestro PC.
|
- La finalidad real va a consistir
en tener una conexión PC <-> PIC <-> Keyboard PS/2 en la que normalmente
se establecerá la correspondiente comunicación PC <-> Keyboard PS/2
salvo cuando el PIC necesite escribir algo en dicho canal que lo
conmutará para convertirlo en PC <-> PIC, tras lo cual volverá a dejarlo
tal como estaba antes.
|
- Las aplicaciones de esto son
infinitas. Yo ya he usado algunas de ellas como por ejemplo conectarle
al PIC un Lector de Tarjetas de Proximidad y poder inyectar los códigos
leídos en el PC para rellenar las fichas correspondientes en el software
de gestión utilitario que se esté usando. El resto solo dependerá de
vuestra imaginación.
|
Elementos
activos utilizados: |
|
|
-
Primero: El PIC.
Para este proyecto me he decidido por el mas pequeño de la serie 18F con
solo 9 pines por banda, no corta el mar sino vuela .... el PIC
18F1320. (Datasheet
PDF 5.4 Mbytes)
-
Una razón : porque es
el mas pequeño que he encontrado con tres interrupciones externas, que
para las aplicaciones Data/Clock son magnificas.
|
|

|
|

|
-
Segundo: El Conmutador.
Para realizar la conmutación de los canales Data y Clock del PS/2 entre
el PC <-> Keyboard y el PIC <-> Keyboard voy a utilizar el CD4053
(Datasheet 115 Kbytes)
-
Este conmutador dispone
de tres canales seleccionables mediante los pines A, B y C conmutando
cada uno de ellos X, Y y Z entre ax y ay, bx y by y cx y cy (En realidad
solo necesitamos dos canales, pero como tenía este de tres en
existencias ...)
|
|

|
|

|
Conexionado
eléctrico: |
| |
-
El teclado
PS/2 se conecta mediante cuatro hilos. Dos de ellos son para
alimentación Vcc a 5V y GND, y otros dos para las señales
Data y Clock. El pinout de los conectores Mini-DIN PS/2
tanto hembra, los del PC, como machos, los del Teclado, es tal como se
muestra en la imagen inferior:
|
|

|
- La alimentación del circuito la vamos
a tomar de este mismo conector PS/2 proporcionándonos los voltios
necesarios el PC al que va conectado.
|
- La idea para conectar nuestro circuito
con el PC y el Keyboard es utilizar un cable de los que venden para
alargar la conexión entre ambos y cortándolo insertar nuestro circuito
entre ellos. El extremo que va al PC debe de ir a las entradas del
CD4053 y cada una de las salidas alternativas de éste conectadas al PIC
y al Keyboard, para sean éste o aquel quienes dialoguen con el PC.
|
|
 |
|
|
|
|
Protocolo de
comunicación PS/2:
|
- El teclado PS/2 se comunica
mediante un Protocolo Serie Síncrono. Utiliza, por lo tanto, una
señal de Clock que índica cuando están disponibles los
correspondientes bits en la señal de Data.
|
|
- La trama completa se compone
de 11 bits. Siendo el primero un bit de Start, a
continuación los 8 bits del Dato a transmitir enviándose
primero el LSB (ó bit menos significativo), el décimo es el de
paridad (usa la Impar, u Odd en Inglés) y por último un bit de ACK
o Stop.
|
- Abajo puede verse un cronograma de
esta trama de comunicación PS/2 Teclado (Keyboard)
-> PC (host):
|
|

|
|
|
- Para poder habilitar la comunicación
inversa, del PC (host) al Teclado PS/2 (Keyboard) debemos primero
indicárselo así al Teclado mediante la señal de Clock. Para ello
debemos poner a nivel bajo el Clock durante unos 160 uS, y la señal de
Data a bajo unos 35 uS después de haber lanzado la del Clock. A partir
de ahí debemos esperar la señal del Clock generada por el Teclado.
Esto nos indicará que el teclado está dispuesto para recibir nuestro
comando. Detectamos dicha señal como primer pulso de Clock, y a partir
del siguiente podemos comenzar a enviarle nuestro byte.
|
-
Le enviaremos
entonces los ocho bits de nuestro comando, cada uno de ellos cuando el
correspondiente pulso en bajo del Clock del teclado así nos lo
indique, empezando por el LSB, a continuación el bit de paridad impar
(El numero de unos en los datos mas el de paridad deber ser impar o
sea 1 si el numero de unos es par y cero si el total de unos es impar)
|
-
Y entonces debemos
esperar el ACK del teclado, que debe venir tras dos pulsos de reloj,
en nivel bajo, indicándonos de este modo que el teclado ha recibido
correctamente nuestro comando. en caso contrario debemos volver a
repetir nuestra secuencia de envío.
|
- Mas abajo se muestra un cronograma de
la transmisión PC (host) -> Teclado PS/2 (Keyboard)
|
 |
| |
| Y con esto creo que ya
estamos en disposición de implementar la escritura de nuestro teclado PS/2 con el
PIC. |
| |
Implementación
|
|

|
|

|
Fotografías
|
- El PCB recién salido de la cubeta de
atacado de ácido:
|
|

|
- La KBDEMUL al recibir "la primera luz"
como los telescopios, y recién reconocido el 18F1320 por el GTP-USB+:
|
|

|
- Y como toda placa recién montada la
KBDEMUL debe probar su buen funcionamiento leyendo y escribiendo la
USART:
|
|

|
|
|
|
|
Software
|
|
|
|
|
|
|