Adaptador de teclado PC para
Spectrum
IMAR-3
(C) Droy 2002
Si lo que te interesa es construir uno sin tener que gastar tiempo leyendo aburridas disertaciones sobre electrónica, puertos de entrada salida y otras gaitas, puedes ir directamente a la sección descargas y bajarte todo lo necesario para su construcción.
Adaptador de teclado PC para Spectrum
¿ Qué hace este adaptador realmente? ¿Tengo que cargar algo en el Spectrum ?
¿
Qué hace este adaptador realmente?¿Tengo que cargar algo
en el Spectrum ?
Este adaptador se conecta al bus de expansión igual que los adaptadores de Joystick, de forma que tenemos disponible una conexión para un teclado estándar de PC del tipo AT o PS/2. (No los antiguos XT de 94 teclas). Este adaptador dispone de un microcontrolador del tipo PIC-16F84, ampliamente conocido por los piratas del Canal Satélite Digital, pues se usa en algunas de las tarjetas que lo piratean (PICCAR 1).
Este microcontrolador ha de ser programado antes de su inclusión en la placa - mas adelante explico como puedes hacerlo-. Una vez programado el PIC e instalado en su zócalo no será necesario nada más que encender y usar, no es necesario cargar nada en el Spectrum ni es necesario abrirlo para nada.
¿ Cómo funciona el teclado del Spectrum?
Si has abierto alguna vez tu Spectrum habrás podido comprobar que de la mitad superior de la carcasa salen dos cables planos de 8 y 5 contactos. Estos cables realmente forman parte de la propia membrana, que no es mas que una matriz de contactos bajo las gomas de las teclas. Esta matriz está repartida en 8 semifilas de 5 teclas cada una, que corresponden con los contactos de la membrana. Ver esquema siguiente para mas detalles:
Como puedes ver en el esquema superior cada una de las 8 semifilas está conectada a una de las líneas de dirección de la mitad superior del bus, y el otro extremo de cada tecla en grupos de cinco a una línea del bus de datos desde D0 a D4 a través de la ULA.
Generalmente cuando se quiere saber si una tecla está pulsada, se lee la semifila completa (Cinco teclas), leyendo el puerto de I/O que pone un cero en la línea de dirección de dicha semifila.
Por Ejemplo:
Supongamos que queremos saber si está pulsada la tecla “W”, para lo cual realizamos una lectura del puerto que le corresponde IN(64510) que en binario es 11111011 11111110, ésto pone a cero las líneas A0 para indicar a la ULA que estamos leyendo el teclado y la línea A10 a cero para indicar que estamos leyendo la semifila 2, ésto nos devolverá un número cuyos bits corresponden del D0 al D4 con las teclas QWERT respectivamente, al estar el bus de datos forzado a uno por las resistencias R65-R69 obtendremos un uno en reposo y un cero (obtenido del propio bus de direcciones) si está pulsada, así para este ejemplo dependiendo del valor del bit D1 sabremos el estado de la tecla “W” .
Para ver en vivo lo que acabo de contar puedes escribir el siguiente programa y ver el efecto que tiene la pulsación de distintas teclas simultáneamente en la semifila QWERT sobre el valor leído. Pasa el valor a binario y lo entenderás mejor. (También funciona en un emulador)
10 REM Ejemplo de lectura de teclas sin comando INKEY$20 CLS30 PRINT AT 10,1;“Byte leído en semifila 2:”;IN(64510)40 GOTO 30
Como acabamos de ver, el teclado de un Spectrum esta íntimamente unido a su hardware, en el caso de los teclados de PCs y su host es radicalmente diferente, de hecho solo hay que observar que el teclado y su host están conectados a través de 4 hilos. ( Entiendase “host” como dispositivo que se comunica con el teclado intercambiando información con él, en el caso de un PC, es el propio PC, en nuestro caso el microcontrolador actúa como host)
Existen muchas páginas en internet donde se puede obtener información técnica muy detallada, aquí solo pretendo hacer un resumen muy básico de su funcionamiento.
La conexión entre un teclado y el PC se realiza a o bien a través de un conector DIN 5 puntas en 180º o a través de un conector del tipo PS/2 (mini-din 6 puntas). En ambos casos una línea transmite la señal de reloj otra la de datos y dos más la alimentación +5V y GND.
LSB: Less Significative Bit (Bit menos significativo)
Spectrum |
Teclado PS/2 o AT
|
Symbol Shift |
Crtl (Derecho e Izquierdo)
|
Caps Shift |
Shift (Derecho e izquierdo)
|
Caps Lock (Caps Shift + 2)
|
Caps Lock
|
Modo extendido (Caps Shift + Symbol Shift)
|
TAB (Sólo en modo edición)
|
Cursores
|
Flechas del cursor (Sólo en modo edición)
|
Borrar (Caps Shift + 0)
|
Borrar (Backspace)
|
Punto (.)
|
Punto (.) (Sólo en modo edición)
|
Coma (,)
|
Coma (,) (Sólo en modo edición)
|
Punto y coma (;)
|
Punto y coma (;) (Sólo en modo edición)
|
Comillas (“)
|
Shift + 2 (Sólo modo edición)
|
Break (Caps Shift + Space)
|
ESC (Sólo en modo edición)
|
Se puede alternar entre modo normal y modo edición con F12. Además las flechas del cursor están mapeadas con el joystick del interface II en modo normal siendo el disparo las teclas Alt y el cero del teclado numérico. Para jugar es preferible el modo normal pues se evitan posibles conflictos en pulsaciones dobles, y para escribir programas el modo edición. A los usuarios del PlusD y Disciple les gustará saber que en modo edicion F1 escribe LOAD d1;"snap "S y pone el cursor a la izquierda de la ultima comilla.
Al igual que en otros montajes anteriores en los Trastos de Droy, este montaje se puede realizar también con placas preperforadas, si no te apetece usar revelador, insoladora, ácidos, etc puedes ponerte manos a la obra siguiendo los pasos de la siguiente sección. Yo he usado para el prototipo este método pues me permite durante el desarrollo realizar algunos cambios o modificaciones sin tener que rediseñar y rehacer la placa.
Por otro lado y una vez alcanzado un diseño definitivo (...al menos eso creo ahora) llega el momento de diseñar la placa de circuito impreso que facilite su construcción a los aficionados que no les de pereza usar el revelador el ácidos y demás herramientas. Esto lo abordaré en la próxima sección tan pronto como me sea posible, por el momento si quieres hacerlo en C.I. tendrás que diseñar la placa tu mismo, puedes usar el esquema dibujado con Eagle 4.0 como base, o esperar a que termine el mío.
1. Con placas preperforadas.
Como siempre, la foto de familia con los componentes antes de empezar ( realmente es ya por tradición). Si nunca has usado placa preperforada y deseas mas detalles de cómo trabajar con ellas puedes visitar las otras secciones donde explico cómo trabajo yo con este tipo de placas.
Básicamente para realizar un montaje en placa preperforada, lo que hago es colocar los componentes y fijarlos temporalmente con celo para buscar la distribución que mejor se ajuste a mis necesidades. Tras varias reorganizaciones, y teniendo en cuenta las perforaciones que cada patilla va ha necesitar, además de las que se pierden con la taladradora o el cutter para separar pistas, la placa puede presentar un aspecto como el siguiente:
Puedes observar en el esquema que existen varios condensadores de 100 nF en paralelo con la alimentación, su objetivo es reducir el ruido eléctrico típico de la tecnología TTL, lo importante es que estén próximos a las patillas de alimentación de los integrados y no todos juntos en un rincón de la placa, mira la foto para hacerte una idea.
Mi técnica para no olvidar conexiones es
marcar con un rotulador rojo sobre el esquema las uniones según
las voy completando. No debes olvidar que las conexiones de alimentación
de los integrados no suelen aparecen en el esquema, pues se dan por supuestas,
evidentemente se deben realizar y corresponden con los siguientes pines:
Circuito Integrado
|
+5V
|
GND
|
75LS245
|
20
|
10
|
74LS157
|
16
|
8
|
74LS148
|
16
|
8
|
74LS32
|
14
|
7
|
PIC 16F84
|
15
|
5
|
6116
|
24
|
12
|
Tras soldar todas las conexiones y completadas unas sesiones de bricolaje con la caja el adaptador puede ir presentando el siguiente aspecto:
Si una imagen vale más que mil palabras, aquí tienes unas 15.342.845 palabras que lo aclaran todo sobre la mecanización del adaptador, observa como la propia caja de aluminio hace las veces de refrigerador para el regulador 7805 que se aloja fuera de la placa.
Alguna de estas fotos pueden corresponder a una distribución y número de componentes distintos de los mostrados anteriormente, ésto es debido a los distintos cambios que durante la fase de desarrollo ha sufrido este adaptador, de cualquier forma ilustran la idea del montaje que quiero transmitir, bastará con seguir el esquema teórico que corresponde a la última versión ya depurada del adaptador.
Para poder conectar más dispositivos por cinta plana, fue necesario conectar internamente un macho de 34 pines de cara al exterior. (Visible en la foto):
2. Con circuito impreso.
En este diseño he pretendido no sólo facilitar su posterior mecanización sino propagar el propio bus de expansión para que puedas conectar algún otro adaptador a parte del IMAR-3. Las pistas son bastante finas por lo que es prácticamente imprescindible la fabricación por insoladora. Si crees que la disposición de componentes y pistas puede optimizarse no me aburras con los detalles, hazlo con Eagle, “LO PRUEBAS !!!” y lo publicamos aquí con tu nombre y nuestro agradecimiento.
Como puedes observar en la parte inferior, el bus de expansión se propaga con una pequeña placa, soldando a esta los propios pines del conector de expansión. En realidad propagar el bus es opcional, si no piensas usar mas adaptadores, o los que vas a usar ya propagan el bus, puedes ahorrarte esta parte. Si decides usar esta expansión no olvides estañar los contactos, para lo cual te recomiendo usar pasta de soldar. No olvides recortar el Slot en la placa extensora.
Debes atornillar el LM7805 (Regulador de tensión) a un refrigerador, un “Recorte de aluminio” puede servir tanto para el refrigerador como para las escuadras que aseguran la placa de expansión. (... TRUCO, a mi en las carpinterías de aluminio me regalan los pequeños recortes, y los grandes me los venden baratos. Prueba en la de tu barrio !!)
En la siguientes fotos puedes ver con mas detalle algunos aspectos de la mecanización del adaptador.
La parte frontal esta cubierta con una placa de fibra de vidrio (... “TRUCO” es una placa de circuito impreso con la cara de cobre totalmente consumida por el ácido, sobrante de un experimento fallido, es un material barato y fácil de trabajar). La parte trasera esta protegida por una plancha de metacrilato (... es un recorte de otros trabajitos anteriores, puedes usar también fibra de vidrio u otro material como en el frontal , aunque el toque transparente lo hace mucho mas elegante.
El IMAR-3 conectado a un Spectrum 48K Plus.
Y aquí el IMAR-3 conectado a un Spectrum 48K y a un Interface II (Clónico) gracias a la propagación del bus.
Vista frontal, la conexión lateral del teclado permite asegurar la conexión de este tanto si el IMAR-3 es el primero del bus como si es el último, sin que se estorbe físicamente con otros adaptadores.
Nota para posibles compradores.
No tengo intención de vender adaptadores, pero estaría dispuesto a cambiar alguno por material relacionado con el Spectrum. Aunque te parezca mentira después de leer el articulo sobre los cartuchos del Interface II, no tengo ningún cartucho ROM original, si tienes alguno y te interesa cambiarlo escríbeme y hablamos. Solo estoy interesado en hardware preferiblemente Sinclair, nada de cintas de programas.
3. Cómo programar el PICLa familia de microcontroladores PIC es una de las más usadas y versátiles, sólo tienes que echar un vistazo en la red para encontrar infinidad de recursos. Para conseguir tu PIC programado debes primero bajarte de la sección de descargas de esta misma página el programa correspondiente, comprar uno, su precio es de aproximadamente 5 o 6 € y después elegir entre las distintas alternativas para programarlo:
Cuando todo este listo para encender sería buena idea dar un repaso general antes de conectarlo. Especialmente poner atención a la key del conector del Spectrum que es la que nos sirve de guía para no meter el conector desplazado. Al encender deben iluminarse todas las luces del teclado por un instante, apagarse y después encenderse permanentemente la luz del Caps Lock, esto indica que se ha iniciado bien el teclado por lo que el PIC está trabajando bien.
De la inicializacion del teclado se encarga exclusivamente el PIC, así que si no obtenemos este comportamiento revisa atentamente las conexiones del microcontrolador. Para buscar un problema que impide la inicialización correcta puedes sacar todos los integrados de sus zócalos excepto el PIC, pues este es el único necesario para encender la luz de Caps Lock.
Una vez completada la construcción del primer prototipo comenzaron las pruebas con distintos programas comerciales para observar su comportamiento. Para ser sincero esperaba encontrar tan solo problemas de rendimiento, pues el programa de control del PIC estaba en una fase muy inicial y el programa estaba sin optimizar. Pero no fue así, el rendimiento parecía ser bueno pero un 30% de los programas presentaban ausencia en algunos de sus controles. Curiosamente todos los de la casa Ultimate con fecha posterior al Knigh Lore, éste incluido, presentaban el mismo problema (Precisamente mis favoritos...).
Para estudiar el problema detenidamente tuve que desensamblar estos programas y averiguar como sus programadores se las ingeniaban para realizar las lecturas de teclado.
Lectura simultanea de dos semifilas
Esta técnica de lectura simultanea de dos semifilas me obligó
a cambiar el diseño original, y sustituir un 74LS245 que hacia las
veces de trasceiver por un 74LS148. Si has leído el apartado de
“Como funciona “ sabrás que el 74LS148 es un codificador con prioridad,
entrega una dirección de tres bits (de 000 a 111) dependiendo de
cual de sus 8 entradas está a 0 (conectadas con A8-A15), ésto
indica que semifila está siendo leída. Como es “con prioridad”
si dos semifilas están siendo leídas al mismo tiempo, entregará
la dirección de la de más prioridad, con lo que ahora al
menos se obtendrá el estado de una de ellas.
Estado del teclado en una sola lectura
¿Debo usar un conector DIN 5 puntas o Mini DIN de 6 puntas según el modelo de teclado AT o PS/2 ?
Lo ideal es que uses el tipo de conector del teclado que tengas planeado usar. Puedes además usar el típico conversor entre estos dos tipos de conexión. Aunque es muy raro, existen teclados PS/2 con conector DIN 5. El motivo por el cual en el prototipo uso DIN 5, es por que no he encontrado en ninguna tienda de electrónica un conector hembra Mini DIN para montaje en chasis, todos son para C.I.
¿Tienes pensado incluir algún tipo de funcionalidad adicional como autorepeat para disparo, emulación de joystick Kempston etc?
No. Tampoco descarto mejoras futuras del programa que controla el PIC, pero por el momento no tengo ningún plan de mejora. Ver fecha 5/7/2002 en la sección historia.
Cuando estoy escribiendo un programa en BASIC, si pulso rápidamente las teclas no obtengo el número de caracteres correspondientes al número de pulsaciones que he realizado.¿Le pasa algo a mi adaptador? ¿Es un fallo de diseño o problemas de velocidad?
No le pasa nada ni al adaptador ni al diseño, es un problema original del Spectrum que debido a la sensación táctil al pulsar teclas de goma no habías notado hasta ahora. El editor del BASIC, a decir verdad, lee el teclado muy de tarde en tarde, para ser exactos realiza un barrido cada 20 milisegundos, y puede suceder que pulses y sueltes la tecla antes de que llegue a intentar leer la semifila en cuestión, es decir, en menos de 20 milisegundos. Esto fue algo que me llamó la atención cuando sustituí la membrana de un Spectrum averiado por pulsadores, (ver sección “ideas para resolver los problemas de la membrana”) si pulsaba y soltaba una tecla diez veces seguidas a toda velocidad obtenía 6 o 7 letras en lugar de las diez que había pulsado. Aquí tienes el oscilograma de la señal que activa la lectura, puedes observar los ocho pulsos correspondientes a las ocho semifilas.
Datos técnicos: La lectura del teclado produce un tren de 8 pulsos de 700 nanosegundos cada uno, con un período de 20 milisegundos entre cada tren, la separación entre los pulsos del mismo tren es de 16 microsegundos. Este es el comportamiento del editor del BASIC, una vez cargado, cada programa efectúa las lecturas de teclado a su propio ritmo, normalmente más rápido, no de forma periódica y no todas las semifilas.
Si pulso más de “X“ teclas simultáneamente parece que las últimas no actúan. ¿Es una avería o un defecto?
Ninguna de las dos, este problema en realidad es causado por el propio teclado. Por la propia arquitectura de los teclados de PC, y dependiendo del fabricante, tienen un número máximo de teclas que pueden mantenerse pulsadas simultáneamente antes de dar error. Normalmente son cinco o seis y también depende de que teclas se trata. Sólo puedes cambiar de teclado y esperar que otro te de una respuesta mejor. De todos modos yo aún no he encontrado ningún programa que requiera tener pulsadas “simultáneamente” más de cinco teclas.
Tengo un teclado muy viejo, con las funciones en la parte izquierda, y quisiera usarlo con el interface ¿Tienes planeado dar soporte a teclados XT?
No, la diferencia entre este tipo de teclados y los del tipo AT o PS/2 a nivel de comunicaciones es muy grande y no me compensa rescribir todas las rutinas de comunicaciones para dar soporte a estos modelos. No gastes tiempo probándolo, si es un XT auténtico seguro que no funciona.
Pero a mi me encanta el Fairlight y no funciona ¿Que puedo hacer?
Aqui tienes el poke que soluciona el problema con el control en este programa.
POKE 62470,24
¿Puedo usar el IMAR-3 con un PLUS 128K, +2 o +3?
No, está diseñado para funcionar sólo en el 48K y 48K+.
¿Por qué dos modos de funcionamiento Normal y Edición?
Lo ideal sería el modo edición permanentemente, pero este modo planteaba problemas con el rendimiento, pues debe realizar más comprobaciones en cada pulsación. Además, se plantean conflictos cuando se pulsan teclas especiales y Caps Shift simultaneamente, como no quería renunciar a tener teclas especiales creé el modo normal para jugar y el modo edicion para disfrutar de estas funciones avanzadas. ( Conmutable con F12 )
¿El software que se ejecuta dentro del PIC es Freeware?
No, en realidad es GreatGuyWare (Traducido:Gran-Tipo-Ware), ésto quiere decir que si lo quieres usar debes escribirme una nota diciéndome “lo maravilloso que soy compartiendo mi trabajo con los demás y lo enrollado que resulto no haciendo negocio de esto”. Ésto me ayuda a saber si realmente la gente usa la información que comparto aquí y promueve el nacimiento de nuevos proyectos como este.
Si tienes alguna pregunta no respondida aquí, por favor, escríbeme a droy@eresmas.com
24/4/2002 Comienzo el diseño del adaptador.
imar3_sch_PDF_D.zip (Nuevo! 5/9/2002) | Esquema del adaptador en formato PDF |
Esquema del adaptador para Eagle 4.0 | |
Librería para Eagle del conector para el Spectrum | |
Diseño de la placa de circuito impreso en PDF | |
Diseño de la placa de circuito impreso en EAGLE | |
imar3_Hex_V2.zip |
Programa de control para teclados PS/2 y AT
|
Programador_PICs.zip | Esquema de un programador de PICS |
Lo siento, no se como titular esto en Castellano, pero ya sabéis lo que quiero decir.
Yo comparto esta información, y la contenida en el resto de ficheros sin garantía ninguna y por supuesto sin responsabilidad de los daños que pueda causar su uso indebido o inadecuado. Lo que te puedo decir es que todo funciona perfectamente y nunca se me ha estropeado ningún Spectrum en los experimentos, pero... tú mismo.