RATÓN PS2

Anuncio
RATÓN PS2
Funciona con el protocolo I2C.
•
Frecuencia 100 muestras/segundo.
•
Resolución de 4 pasos por mm.
•
Sin escalado.
Nota.- Se puede cambiar por envió de comandos al ratón
El ratón nos informa de:
1) Desplazamiento X  codificado con 9 bits en complemento 2. Rango [-256, 255].
2) Desplazamiento Y  codificado con 9 bits en complemento 2. Rango [-256, 255].
3) Estado de los botones (pulsado o no).
Esta información la envía en 3 bytes:
MSB
LSB
Bit
7
6
5
4
3
2
1
0
Byte 1
YV
XV
YS
YS
1
B. Medio
B. Der
B. Izq
Byte 2
X7
X6
X5
X4
X3
X2
X1
X0
Byte 3
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y7
YV  Desbordamiento de datos en Y
XV  Desbordamiento de datos en X
YS Signo de Y
XS Signo de X
X7 - X0 Movimiento eje X en complemento a 2.
Y7 -YX0 Movimiento eje X en complemento a 2.
B. Medio, B. Derecho y B. Izquierdo = 1  Indica que está pulsado
Ejemplo Byte 1 = 0011 1100  Desplazamiento abajo e izquierda. Botón Medio pulsado.
Cada paquete (trama) está formado por 11 bits  1 inicio + 8 bits datos + 1 paridad + 1 parada.
DOS MODOS DE TRABAJO DEL RATÓN
•
Stream  envía los datos a intervalos regulares.
•
Remoto  envía los datos cuando recibe la orden del controlador.
COMANDOS que envía el controlador para manejar el ratón.
0xFF
0xF6
0xF5
0xF3
0xF2
0xF0
0xEA
0xEB
0xE9
Reset
Valores por defecto
Desactivar envío de información (stream)
Establecer un nuevo periodo de muestreo.
Solicitar el ID al dispositivo (su dirección interna). El ratón estándar dará 0
Entrar en modo remoto
Entrar en modo stream
Pide el paquete de datos en modo remoto
Pide el paquete de estrado del ratón
ACK del ratón  0xFA El ratón responde con este comando cuando recibe y acepta un comando.
INICIALIZACIÓN DE UN RATÓN
Write (escribir)
Read (leer)
Read (leer)
Read (leer)
Write (escribir)
Read (leer)
delayMicroseconds
Reset
ACK
Modo Remoto
ACK
100 microsegundos
Escribir 0xFF; El ratón reponde con 0xFA, 0xAA y 0x00
Leer  0xFA; ACK = Bit de reconocimiento
Leer  0xAA
Leer  0x00 // dirección del dispositivo
Escribir  0xF0;
Leer  0xFA; ACK
Retardamos unos 100 microsegundos.
Después de inicializar, pedimos los datos al ratón:
PEDIR DATOS
Write (escribir)
Read (leer)
Read (leer)
Pide datos de movimiento y botones pulsados
ACK
Byte 1 (desbordamiento, signo, botón pulsados)
Read (leer)
Read (leer)
Byte 2 (desplazamiento eje X)
Byte 3 (desplazamiento eje Y)
Escribir  0xBE
Leer  0xFA
Leer  0x08 // Ej. Ratón parado. Sin
botones pulsados
Leer  0x00 // No hay desplazamiento X
Leer  0x00 // No hay desplazamiento Y
Bytes a leer según el comando que se envié:
0xFF
0xF6
0xF2
0xF0
0xEA
0xEB
0xE9
COMANDO (escribir)
Reset
Valores por defecto
Solicitar ID
Modo Remoto
Modo Stream
Pedir datos
Pedir paquete de estado
0xFA
0xFA
0xFA
0xFA
0xFA
0xFA
0xFA
RESPUESTA (leer)
0xAA
0x00
0x00
0xZZ
0x40
0xXX
0x02
0xYY
0x64
Comunicación esclavo al maestro
Comunicación maestro a esclavo
Comunicación maestro a esclavo detallada
(a) Es el tiempo que tarda el dispositivo en comenzar a generar pulsos de reloj. Menor de 15 ms
(b) Es el tiempo que tarda en enviar el paquete. Menor de 2 ms.
Si alguno de estos tiempos no se cumple el maestro genera un error.
La frecuencia de reloj está entre los 10KHz y 16,7KHz (entre 30 y 50 µs).
En mi programación en el Arduino medí una transmisión de 12 ciclos de reloj en 1000 µs  83 µs/ciclo  12 KHz.
Los 12 ciclos son: 1 inicio, 8 dato, 1 paridad, 1 parada y 1 espera ACK.
Medí la transmisión de 8bits en 664 µs 664/8 = 83 µs/ciclo
Por lo que deduzco ambas líneas están en alto, como hemos pedido los datos al PS2 esté está disponible para
contestar, por lo que envía el bit de inicio a ‘0’ y al poco el reloj comienza a funcionar: bajo-alto-bajo-alto…
El dato lo leo en el flanco de bajada, pero el dato que recibo va conmutando en el flanco de subida.
Descargar