1 tema 6: pulsadores, teclados, ratones Diseño o Automático tico de Sistemas José Manuel Mendías Cuadros Dpto. Arquitectura de Computadores y Automática tica Universidad Complutense de Madrid 2 interruptores y pulsadores La lectura del estado de un interruptor mecánico por parte de un sistema digital (lo suficientemente rápido) presenta dos problemas: Asincronismo: el cambio de estado del interruptor puede ocurrir en cualquier momento, pudiento llevar al sistema a un estado metaestable. Presencia de rebotes: cuando el estado del interruptor cambia, la señal presenta un vaiven transitorio. 10KΩ pulsadores switches rebote de presión 0.3 ms 100 ms (min) rebote de depresión 0.1 ms 50 ms 0.5 ms ~ µs Synchronizer Debouncer Deb Deb
3 eliminador de rebotes Debouncer Deb rst no no esperafinreboted esperapresion esperadepresion Deb* no esperafinrebotep Deb* puertos: : in : 1 bit : log. negativa : in : 1 bit : lógica positiva Deb : out : 1 bit : log. negativa := 1 : out : 1 bit : log. positiva := 0 estado inicial: esperapresion no CONT 0-N timer keypads Un teclado es una colección de pulsadores cuyo estado puede ser conocido individualmente La configuraciones mas comunes son: teclados lineales: cada pulsador tiene una línea dedicada para conocer su estado teclados matriciales: los pulsadores se disponen en filas y columnas, de manera que los pulsadores de la misma fila compartan la línea que permite conocer su estado pulsador V cc V cc V cc S 0 S 1 S n R 0 R 1 R m poner a 0 todas las columnas esperar a que alguna fila valga 0 esperar fin de rebotes poner a 0 una única columna dejando el resto a 1 vale 0 la fila SI NO Algoritmo de detección de pulsaciones en un teclado matricial teclado maticial generar el código de tecla
5 interfaz de keypad (i) timer S R S scaner Sync 0111 0XXX 0001 0111 10XX 0100 0111 110X 0111 0111 1110 1110 1011 0XXX 0010 1011 10XX 0101 1011 110X 1000 1011 1110 0000 10KΩ 1 2 3 A 5 6 B 7 8 9 C * 0 # D keypad R synchronizer 1101 0XXX 0011 1101 10XX 0110 1101 110X 1001 1101 1110 1111 1110 0XXX 1010 1110 10XX 1011 1110 110X 1100 1110 1110 1101 resto resto XXXX encoder keycode SS R L C codereg keycode keypressed 6 interfaz de keypad (ii) Sync puertos: : in : 1 bit : log. negativa Sync : in : 1 bit : log. negativa : in : 1 bit : lógica positiva : out : 1 bit : log. positiva := 0 ketpressed : out : 1 bit : log. positiva := 0 S : out : bits := 0000 estado inicial: esperapresion esperapresión S 0000 * Sync* * * esperafinreboted S 0000 Sync* Sync esperadepresión S 0000 keypressed * esperafinrebotep S 0000 * scancol1 S 0111 * scancol S 1110 scancol3 S 1101 scancol2 S 1011
7 interfaz de keypad (iii) El interfaz descrito funciona correctamente cuando se pulsa una sola tecla: Si se pulsan varias teclas de la misma fila, reconoce la ubicada más a la izquierda Si se pulsan varias teclas de la misma columna, reconoce la ubicada más arriba. No obstante, puede darse el caso de que dos o más teclas estén pulsadas simultáneamente porque Se pulsen conscientemente (caso de teclas como SHIFT, ALT, etc) Se esté tecleando muy rápidamente La capacidad de detectar más de una pulsación simultánea se llama key roll-over: Por ejempo, un controlador capaz de detectar una segunda tecla pulsada cuando aún no se ha levantado la primera se dice que tiene 2 key roll-over. Requisitos: Una cola de registros de códigos (codereg) Un codificador completo de códigos de scan y retorno. Una máquina de estados que cheque todas las filas. La espera de presiones y depresiones individualizadas 8 teclados y ratones PS/2 (i) Un teclado o ratón tipo AT-PS/2 utiliza para comunicarse con un sistema un protocolo bidireccional serie síncrono de 11 bits usa dos lineas a colector abierto con resitencias de pullup TTL (por defecto en ALTA): CLK, para transmitir el reloj de sincronización DATA, para transmitir los datos serie el reloj siempre debe ser generado por el dispositivo con una frecuencia entre 10 y 30 KHz. aunque puede ser forzado a BAJA por el sistema. los datos pueden ser generados por el dispositivo o por el sistema el formato de datos es: 1 bit de start (0), 8 bits de datos (primero LSB), 1 bit paridad impar, 1 bit de stop (1) 5 Pin DIN 1. KBD Clock 2. KBD Data 3. N/C. GND 5. (VCC) PS/2 1. KBD Clock 2. GND 3. KBD Data. N/C 5. (VCC) 6. N/C
9 teclados y ratones PS/2 (ii( ii) Transmisión de dispositivo a sistema: transmisión de datos El dispositivo inicia una transmisión cuando ha sucedido un evento en el periférico o ha recibido una solicitud del sistema comprueba que CLK y DATA estan en ALTA Una vez iniciada la trensferencia, el sistema debe muestrear la señal de DATA a flancos de bajada de CLK. puede abortarla antes del 10º ciclo fijando CLK a BAJA, típicamente el dispositivo chequea cada 100 ms la señal de CLK la retransmisión de un dato abortado debe ser solicitada por el sistema El sistema puede inhabilitar las transmisiones fijando CLK a BAJA, en cuyo caso los datos se almacenan temporalmente en el dispositivo. Si el sistema además fija DATA a BAJA indica al dispositivo su intención de enviarle información. 10 teclados y ratones PS/2 (iii( iii) Transmisión de dispositivo a sistema: teclado Cada vez que se pulsa una tecla, el dispositivo envía de 3 a n códigos: Scancodes de presión: indicando el momento y la tecla pulsada, si la tecla permanece pulsada el teclado reenvía el código periódicamente (intervalo programable). Código de depresión (F0): indicando el momento en que se ha dejado de pulsar una tecla. Scancodes de depresión: indicando la tecla que se ha dejado de pulsar. Los scancodes compuestos y el código de depresión junto con los scancodes correspondientes se envían en ráfaga. PS2 scancodes
11 teclados y ratones PS/2 (iv( iv) Transmisión de dispositivo a sistema: ratón Cada vez que se mueve el ratón o cambia el estado de los pulsadores, el dispositivo envía una ráfaga de 3 códigos: Información de estado del ratón bit 0, overflow vertical bit 1, overflow horizontal bit 2, sentido vertical (0 positivo, 1 negativo) bit 3, sentido horizontal (0 positivo, 1 negativo) bit, 5, 10 bit 6, estado pulsador derecho (1 pulsado) bit 7, estado pulsador izquierdo (1 pulsado) Información de desplazamiento horizontal 8 bits indicando su magnitud (primero el MSB) Información de desplazamiento vertical 8 bits indicando su magnitud (primero el MSB) 12 teclados y ratones PS/2 (v) Transmisión de sistema a dispositivo: transmisión de comandos El sistema puede iniciar una transmisión hacia el dispositivo fijando DATA a baja sin embargo para evitar evitar colisiones con los posibles datos en transmisión es conveniente fijar primero CLK a BAJA durante al menos 60 μs y no después del 10º ciclo. estando DATA a BAJA y tras poner CLK a ALTA, el dispositivo comienzará a generar la señal de reloj antes de 10 ms, provocando el primer flanco de bajada El dispositivo muestrea la señal DATA a cada flanco de bajada, por lo que el sistema debe poner un nuevo bit cuando CLK está en ALTA, que debe estar estable 1μs después del flanco de subida. tras mandar el bit de paridad, el sistema debe liberar la línea de datos, (que subirá a ALTA, bit de stop), si no lo hace el interfaz sigue mandando pulsos por CLK El interfaz reconoce la recepción de datos poniendo la línea de DATA a BAJA durante el 11º ciclo
13 Transmisión de sistema a dispositivo: códigos teclados y ratones PS/2 (vi( vi) Comandos más interesantes: Set/reset indicadores de estado (ED), controla los LEDs de estado del teclado, responde con ACK y espera el byte de estado: (b0,b1,b2,0,0,0,0,0) donde b0 scrolllock, b1, NumLock, b2 CapsLock, mandando un 1 cambia el indicador. Disable (F5), resetea teclado, suspende escaneado, devuelve ACK Echo (EE), solicita que el dispositivo reponda con ECHO Enable (F), borra buffer, devuelve ACK Resend (FE), solicita la retransmisión del último scancode Reset (FF), resetea el dispositivo, inicia power-on test, responde con el power-on byte Intervalo/retardo de autorepetición (F3), responde con ACK y espera con un byte de b6- b7 (00=250 ms, 11=1000ms), b..b0 (00000=30/s, 11111=2/s), vuelve a responder con ACK. Códigos de respuesta del dispositivo: ACK (FA), respuesta a algunos comandos power-on satisfactorio (AA) ECHO (EE) Resend (FE), el dispositivo solicita el reenvío del comando Error (00 ó FF), error o desbordamiento del buffer 1 interfaz de teclado PS2 (i) 80 µs 10-20 KHz start paridad data 0 data 1 data 2 data 3 data data 5 data 6 data 7 stop impar 20 µs presión 15 µs depresión scancode scancode F0 100 ms 100 ms scancode ps2clk ps2data Interfaz de PS2 8 data newdata newdataack coste para XC010XL 10 CLBs 2 FF (9 en IOBs) 17 LUTs de entradas 2 LUTs de 3 entradas rst
15 interfaz de teclado PS2 (ii( ii) ps2clk synchronizer edgedetector sampleps2data goodparity ps2data L C SHIFTER ps2datareg 11 shtps2data clearps2data lastbitrcv 8 validdata lddata DataReg data 16 interfaz de teclado PS2 (iii( iii) FallingEdge tipo Moore (2 biestables) RisingEdge Det. flancos FallingEdge RisingEdge tipo Mealy (1 biestable) FallingEdge rst rst D Q D Q tipo Moore RisingEdge
17 interfaz de teclado PS2 (iv( iv) no datavalid retrasan el flanco ciclos = 320 ns << 20 µs esperandodatos ps2clk synchronizer edgedetector SHIFTER ps2data ps2datareg 11 L C validdata newdataack lddata esperandoack newdata no newdataack validdata 8 lddata datareg data