Interfaz para conectar un teclado PS/2 a un ZX Spectrum 16k/48k -en modo Z80 es también compatible con los modelos 128k,
Toastrack y el +2 (gris)- que dispone de dos métodos de interceptar el teclado seleccionables mediante el conmutador Z80/ULA (SW1). Basado en un diseño de 2016 de AVR-ru para una versión que va dentro del Spectrum conectada a los dos conectores de la membrana.
Puede montarse con un conector de borde (
edge) estandar del ZX Spectrum con lo que no podría conectarse detrás otro periférico o bien con una tira de pines macho doble, como se ve en las imágenes, para utilizarlo con un
ZX Spectrum Edge SX, un
ZX Spectrum Bus Expander o similar que funcionaría igual pero permite utilizar además otros periféricos.
Para su montaje requiere actualizar el firmware en el ATmega8A, bien antes de soldarlo utilizando un programador y un adaptador TQFP-32; o después, utilizando el conector ICSP.
La configuración específica del proyecto para el microcontrolador ATmega8A es la siguiente:
Fuse name | avrdude alias | Value (h) |
Low fuse byte | lfuse | CF |
High fuse byte | hfuse | C7 |
Extended (lock bit) fuse byte | efuse | FF |
Algunas de las teclas en el teclado PS/2 que no tienen función directa en el del ZX Spectrum están asignadas en el firmware a otras funciones. Por ejemplo,
- "Bloq Mayús" se comporta igual que el Caps Lock de un PC,
- "Bloq Num" cambia el conjunto de teclas formado por las flechas y la barra espaciadora al joystick #2 del interface Sinclair.
- "Ctrl" equivale a Symbol Shift,
- "Impr Pant" produce un reinicio,...
Teclados PS/2 compatibles
Genérico AT con adaptador PS/2 K288
HP KB-0316
Perixx KB-1777 (P/N: PERIBOARD-107)
Teclados PS/2 NO compatibles
Microsoft Natural Keyboard Elite (M/N: E06402PS2)
Esquema
THT
SMD
THT
Lista de componentes (16)
Qty | Designator | Value | Package |
1 | LED1 (optional) | PWR [Red] | 0805 |
1 | R2 (optional) | 330Ω 1/8W 1% | 0805 |
1 | J3 | ZX BUS (optional) | Pin header 2x28 𝄩2.54mm (row 5 must be removed before soldering) |
1 | J3 | ZX BUS (optional) | ZX Spectrum Edge Connector 2x28 𝄩2.54mm |
1 | R2 (optional) | 330Ω 1/8W 1% | DIN0204 L3.6mm ⌀1.6mm 𝄩5.08mm |
1 | R1 | 10kΩ 1/8W 1% | DIN0204 L3.6mm ⌀1.6mm 𝄩5.08mm |
1 | Y1 | 20MHz | Quartz crystal 2 pin HC49S |
2 | C4,C5 | 22pF 25V | MLCC Radial 𝄩5.00mm |
3 | C1,C2,C3 | 100nF 25V | MLCC Radial 𝄩5.00mm |
1 | U2 | 74HCT32 | Round pin socket DIP-14 W7.62mm 𝄩2.54mm |
1 | U1 | ATmega8A-PU | Round pin socket DIP-28 W7.62mm 𝄩2.54mm |
1 | LED1 (optional) | PWR [Red] | LED ⌀3.0mm |
1 | SW1 | Z80/ULA | SPDT switch SK-12D07 |
1 | J1 | ICSP (optional) | Pin header 2x03 𝄩2.54mm |
1 | J2 | PS/2 | Mini-DIN 6 pin receptacle fully shielded |
1 | U2 | 74HCT32 | DIP-14 |
1 | U1 | ATmega8A-PU | DIP-28 |
Lista de componentes interactiva
SMD
Lista de componentes (12)
Qty | Designator | Value | Package |
1 | LED1 | PWR [Red] | 0805 |
1 | R2 | 330Ω 1/8W 1% | 0805 |
1 | R1 | 10kΩ 1/8W 1% | 0805 |
3 | C1,C2,C3 | 100nF 25V | 0805 |
1 | Y1 | 20MHz | Ceramic resonator 3 pin 3020/3213 |
1 | U2 | 74HCT32 | SO-14 |
1 | U1 | ATmega8A-AU | TQFP-32 7x7mm 𝄩0.8mm |
1 | SW1 | Z80/ULA | SPDT switch MSK-12C02 |
1 | J3 | ZX BUS (optional) | Pin header 2x28 𝄩2.54mm (row 5 must be removed before soldering) |
1 | J3 | ZX BUS (optional) | ZX Spectrum Edge Connector 2x28 𝄩2.54mm |
1 | J1 | ICSP (optional) | Pin header 2x03 𝄩2.54mm |
1 | J2 | PS/2 | Mini-DIN 6 pin receptacle fully shielded |
Lista de componentes interactiva
PCB
THT
SMD
Fotografías
THT
SMD
Comparación
Demo
THT
(click para ampliar) (es necesario subir el volumen del reproductor para escuchar el audio)
Gerbers
THT
Descargar
SMD
Descargar
Firmware
Descargar (Hex/Bin)
Descargar (Proyecto XGPro para ICSP (puede cambiarse a ZIF socket))
Para programar o actualizar el firmware del ATmega8A se puede usar cualquier programador ICSP (v.g. AVRISP MKII, STK500v2, TL866IIplus, T48, T56,...) y conectar el interface PS/2 desenchufado del Spectrum mediante el conector de cabecera ICSP. No es imprescindible tenerlo soldado, se puede usar uno suelto e inclinarlo como se muestra en las siguientes fotografías.
Si se prefiere hacer desde línea de comandos, solo es necesaria esta línea cambiando PORT por el nombre del puerto (p.e. /dev/ttyACM0 en Linux, COM22 en Windows,...)
Código: Seleccionar todo
avrdude -p m8 -c stk500v2 -P PORT -U flash:w:ZX_Spectrum_PS-2_Keyboard_interface_fw_v5.5.hex:i -U lfuse:w:0xcf:m -U hfuse:w:0xc7:m -U efuse:w:0xff:m
Resolución de problemas
Con el ZX Spectrum apagado, conectar el periférico y a éste el teclado PS/2. Al encender los 3 indicadores Num Lock, Caps Lock y Scroll Lock deberían encenderse y casi de inmediato, apagarse Caps Lock. Si en vez de esto se apagan todos quiere decir que hay un problema con el microcontrolador (ATmega8A). Las posibles causas son un fallo al programar el firmware, problemas en el circuito del reloj del microcontrolador (Y1, C4 y C5) o un microcontrolador (U1) defectuoso.