Laboratorio 06. “Diseño e implementación de un sistema digital para la captura de caracteres desde teclado”
Objetivos Específicos:
- Aplicar sentencias específicas del lenguaje ABEL para describir registros de desplazamiento, de manera de utilizar éstos en el problema propuesto.
- Conocer la forma de comunicación que existe entre el teclado y su controlador (PS/2). - Conocer los scan-codes y aplicar técnicas de visualización en el osciloscopio para su captura.
- Interactuar con la tarjeta, diseñando un sistema de control que permita visualizar en el led el scan code correspondiente a una tecla presionada.
- Implementar el diseño en tarjeta de desarrollo.
- Generar vectores de prueba correspondientes y comprobar el correcto funcionamiento del diseño.
Preparación Previa. Recursos.
1.- PS/2.
La interfaz de comunicación PS/2 es un prototipo planteado por la IBM para comunicar dispositivos seriales en forma sincrónica, tanto teclado como mouse. En la actualidad la mayoría de los teclados corresponden a este tipo con las siguientes características:
- Gran número de teclas (101 a 104).
- Conector de 5 o 6 pines (incluyen adaptadores). - Protocolo de comunicación serial bidireccional (PS/2). - Garantizan sólo el conjunto 2 de los scan codes.
- Contestan todos los comandos enviados, sin embargo no actúan en todos ellos. La interfaz física que usualmente se utiliza se muestra a continuación:
Plug Socket 6-pin Mini-DIN (PS/2): 1 - Data 2 - No Implementado 3 - Ground 4 - Vcc (+5V) 5 - Clock 6 - No Implementado
La alimentación del teclado/mouse corresponde a Vcc=+5 [V] y una corriente máxima de 100 [mA]. Se recomienda no conectar el teclado a la tarjeta mientras se encuentre prendida. Las líneas de Data y Clock son ambas de colector abierto, con resistencias de “pull-up” para fijar ambas líneas en alto.
El mouse y teclado PS/2 implementan un protocolo de comunicación serial bidireccional. El bus de comunicación se encuentra en estado “idle” cuando ambas líneas (data y clock) se encuentran en alto. Este es el único estado en que al dispositivo (teclado o mouse) le está permitido enviar información al host (computador o en nuestro caso tarjeta de desarrollo XS95). El host tiene el control último sobre el bus y puede inhibir la comunicación en cualquier instante, colocando la línea de clock en nivel bajo.
El dispositivo siempre genera la señal de clock. Si el host desea enviar datos, debe primero inhibir la comunicación desde el dispositivo, colocando la línea de clock en nivel bajo. Luego debe colocar en nivel bajo la línea de data y subir la línea de clock. Este estado es conocido como “Request to Send”, con lo cual el host señaliza al dispositivo que comience a generar pulsos de reloj a través de la línea clock para enviar los datos.
Por lo tanto el bus puede estar en uno de los siguientes tres estados: - Data: alto Clock: alto = Estado “Idle”.
- Data: alto Clock: bajo = Estado “Comunicación Inhibida”. - Data: bajo Clock alto = Estado “Request to Send”.
Todos los datos son mandados de un byte por vez y cada byte es enviado dentro de un frame de 11 o 12 bits:
- 1 bit de partida: siempre es 0.
- 8 bits de datos: se comienza por el menos significativo. - 1 bit de paridad: se utiliza paridad impar.
- 1 bit de parada: siempre es 1.
- 1 bit de confirmación: sólo para comunicación desde el host al dispositivo.
El bit de paridad es colocado en alto si hay un número par de 1’s en los bits de datos, y colocado en bajo se hay un número impar. La idea es que el número de1’s de los bits de datos más el bit de paridad siempre sean un número impar (paridad impar). Esto se utiliza para la detección de errores en la transmisión. Si el dispositivo detecta un error responde como que se le ha enviado un comando inválido.
En el caso de comunicación del dispositivo al host (caso que será utilizado) el siguiente diagrama ejemplifica la situación:
Cuando el teclado o mouse desean mandar información deben asegurarse que la línea de clock debe estar en alto por lo menos 50 [us] antes de que el dispositivo puede comenzar a enviar datos.
El teclado/mouse escribe un bit en la línea de data cuando el reloj está alto, y es leído en el host cuando el reloj está bajo.
Como se trata de comunicación desde el host hacia el dispositivo, no se envía un bit de confirmación.
2.- ScanCodes.
En los teclados se distinguen distintos conjuntos de scancodes para identificar la tecla o teclas que se presionan. Se utiliza por defecto el conjunto 2 (set 2). Cada tecla tiene asociado un scancode compuesto de dos códigos: un make code, que se emite cada vez que se presiona una tecla, y un break code, que se emite cuando se suelta la tecla. En general estos códigos suelen tener entre 2 y 1 byte, pero existen ciertos scancodes que son más largos debido a que corresponden a una combinación de teclas más elaborada.
Se encuentra disponible en el sitio del curso el archivo scancode.doc que contiene los scancodes del conjunto 2 y otras especificaciones. Además se encuentra disponible la especificación de la norma PS/2 en el archivo ps2norma.pdf, también disponible en su sitio original http://www.genesyslogic.com/pdf/gl310mc4d_r10.pdf y también en el sitio http://panda.cs.ndsu.nodak.edu/~achapwes/PICmicro/PS2/ps2.htm
3.- Serie-paralelo, Paralelo-serie.
El siguiente esquema muestra la conexión lógica de dos registros realizada para la captura de datos en serie. Nótese que se está utilizando un reloj proporcionado por la misma fuente de los datos, tal como ocurre en una comunicación PS/2.
KB_CLOCK
KB_DATA
10 10
En ella tanto el registro que recibe la conexión en serie como el que está copiando su contenido reciben la señal de reloj proporcionada por la contraparte que se está comunicando, pero al recibir el reloj negado, una de ellas se está retrasando con respecto a la otra, de manera de que ambos registros comienzan a desplazar a través de ellos, y mientras le llegue la señal de reloj el contenido de los mismos, siendo el bit más significativo el que recibe los datos seriales.
Actividades Previas.
a) Proponga un esquema similar al descrito anteriormente que permita enviar datos contenidos en un registro (paralelo) en forma serial por una sola línea de comunicación. b) Estudie la manera de manejar el osciloscopio para capturar eventos asincrónicos
utilizando modo single.
c) Estudie el siguiente código Abel que implementa la recepción de datos PS/2 desde el teclado en la tarjeta de desarrollo:
MODULE keyboard TITLE 'keyboard' DECLARATIONS
RSTuC PIN 45; // uC reset control
OE_RAM PIN 62; // RAM output enable
KB_DATA PIN 70; // datos seriales desde el teclado PS/2 KB_CLK PIN 26; // reloj desde el teclado PS/2
RS_6..RS_0 PIN 15,14,18,17,19,23,21 ISTYPE 'COM'; // Pines del display RS_ = [RS_6..RS_0];
[MASTER8..MASTER0] NODE ISTYPE 'REG'; // registro maestro para almacenar MASTER9 PIN 77 ISTYPE 'REG'; // los datos desde el teclado
MASTER = [MASTER9..MASTER0];
[SLAVE8..SLAVE0] NODE ISTYPE 'REG'; //registro esclavo SLAVE9 PIN 76 ISTYPE 'REG';
SLAVE = [SLAVE9..SLAVE0]; // EQUATIONS
RST = 1; // deshabilitar uC
OE_RAM = 1; // deshabilitar RAM MASTER.CLK = !KB_CLK;
SLAVE.CLK = KB_CLK; SLAVE := MASTER;
// Si una de las taclas del '0' al '9' es presionada entonces el display muestra el dígito // correspondiente TRUTH_TABLE ([ SLAVE7..SLAVE0] -> [RS_6..RS_0]) ^H16 -> ^B0010010; ^H1E -> ^B1011101; ^H26-> ^B1011011; ^H25 -> ^B0111010; ^H2E -> ^B1101011; ^H36 -> ^B1101111; ^H3D-> ^B1010010; ^H3E ->^B1111111; ^H46 -> ^B1111011; ^H45 -> ^B1110111; END keyboard
d) Modifique el ejemplo anterior de manera que sea posible visualizar el scancode (make code) de cada tecla a través del led de la tarjeta.
En el Laboratorio.
a) Implemente en el laboratorio el diseño propuesto por Ud. en el trabajo previo parte a). Realice las pruebas que estime convenientes para verificar que se cumple con las especificaciones.
b) Implemente la modificación planteada en el punto d) del trabajo previo. Establezca un mecanismo para poder visualizar las dos cifras hexadecimales (una a la vez) del make code correspondiente a una tecla a través del led.
c) Utilice la característica de disparo single del osciloscopio para visualizar el formato de transmisión de datos del protocolo PS/2. Visualice presionando sólo una vez una determinada tecla y manteniéndola presionada. Muestre estas formas de onda a su ayudante o profesor.