Mouse inalambrico

Hola amigos, los saludo y presento mi idea la cual consiste en hacer un Mouse tipo guante, tome un mouse inalambrico al que le quisiera hacer ingenieria inversa, desarme uno y encontre dos chips, el optico que detecta el movimiento y el segundo es un microcontrolador que se comunica con el chip que detecta movimiento mediante dos lineas: Clock y data, siendo una comunicacion half duplex, el micro puede leer y escribir en registros internos del chip que detecta el movimiento. Usa dos bytes, el primer bit del primer byte indica si quiere leer o escribir y los otros 7 son para indicar la direccion de registro, luego el segundo byte es el valor que tiene el registro. Considerando esto pense en conectar mi arduino nano en lugar del chip sensor de movimiento (MX8630) y emularlo, para que mediante un acelerometro mover el cursor en pantalla, traté de capturar la comunicacion del micro con el arduino y aunque lei, yo solo encontre la instrucción:

byte incoming = shiftIn(dataPin, clockPin, bitOrder)

pense capturar ese byte con el arduino y mostrarlo en la computadora, pero lo unico que me devuelve es el numero: 255, o en binario 11111111 y no cambia en ningun momento. el codigo que use es:

byte registro=0;

void setup() 
{ 
  Serial.begin(9600); 
 
}



void loop() 
{ 
 
 // byte incoming = shiftIn(dataPin, clockPin, bitOrder)
 //bitOrder: which order to shift in the bits; either MSBFIRST or LSBFIRST.
 
  registro = shiftIn(12, 11,MSBFIRST);
  Serial.println(registro,DEC);
  Serial.println(registro,BIN); 
 
}

La verdad no encontre mucha informacion sobre esa instrucción, hay mucha sobre la complementaria que es ShiftOut(); no se si servirá para lo que deseo hacer.

Adjunto el diagrama de tiempos de la comunicacion de los microcontroladores del mouse

Agradecido por la atencion prestada, la verdad no se si sea viable mi idea y por eso la expongo ante ustedes que se que tienen mucha experiencia..
Gracias, saludos desde Guatemala. .

Buscaste la hoja de datos del MX8630. Yo veo una comunicación SPI, no se que quieres hacer con pulseIN?

Alimentación de 2.7 o 1.8V, dime como lo interfaceas. Te metiste en un proyecto algo complicadito.

Gracias por su respuesta surbyte,

Buscaste la hoja de datos del MX8630. Yo veo una comunicación SPI, no se que quieres hacer con pulseIN?

Claro mi amigo, las imagenes que adjunté son capturas del pdf, y si, es una comunicacion SPI, en el pdf dice acerca de la comunicacion lo siguiente:

8.1Transmission Protocol
The transmission protocol is a two-wire link, half duplex protocol between the micro-controller
and the mouse sensor. All data changes on SDIO are initiated by the falling edge on SCLK. The
mouse controller always initiates communication; the mouse sensor never initiates data transfers.
The transmission protocol consists of the two operation modes:

  • Write Operation.
  • Read Operation.

Es por eso que dije que es una comunicacion half duplex, trate de resumir lo que lei en la hoja de datos, pero no he pensado en usasr PulseIn(), no se si es sugerencia de su parte. Yo mencione

shiftIn(dataPin, clockPin, bitOrder)

porque veo que aparentemente lee los estados del pin "data" con cada pulso de clock ingresado al pin de clock, y los va almancenando en la variable tipo byte que se asigne, lo contrario a shiftOut() que envia los bit del byte en secuencia sincronizada con una salida de clock para direccionar registros.

Alimentación de 2.7 o 1.8V, dime como lo interfaceas.

El circuito del mouse lo deje alimentado con pilas, las mismas que usa para su funcionamiento, el arduino alimentadio desde el puerto usb pues pretendo ver el dato en la PC y uní los negativos tanto del arduino con el de las pilas. La conexion entre Data y Clock del Microcontrolador del mouse la hice directa considerando la configuarcion segun la funcion shiftIn(dataPin, clockPin, bitOrder)

Clock mouse -----Pin 11 arduino
Data mouse - - - -Pin 12 arduino

pues use : registro = shiftIn(12, 11,MSBFIRST);
intente cambiando MSBFIRST por LSBFIRST

Te metiste en un proyecto algo complicadito

Si, soy consciente de ello, quiza no sea viable para mi, no tengo ni osciloscopio ni frecuencimetro para poder obserbar las señales o medir la frecuencia. .
Gracias por su respuesta. .

Vamos de nuevo. La comunicación es SPI no uses ningún PULSEIN porque no tiene sentido.
Mira como comunicarse por SPI pero ademas debes hacer interfaces a 2.7V para poder interactuar con el IC.

Gracias nuevamente surbyte he empezado a leeer sobre la comunicación SPI y me nace una duda, segun la documentacion de la libreria

With an SPI connection there is always one master device (usually a microcontroller) which controls the peripheral devices. Typically there are three lines common to all the devices:

MISO (Master In Slave Out) - The Slave line for sending data to the master,
MOSI (Master Out Slave In) - The Master line for sending data to the peripherals,
SCK (Serial Clock) - The clock pulses which synchronize data transmission generated by the master

Habla que tipicamente son 3 lineas, el clock y una linea por donde los perifericos mandan datos al Master y otra por donde el Master manda datos a los periféricos, pero el microcontrolador del mouse se comunica con el microcontrolador optico usando solo una linea, pues entre ellos solo hay un pin de Clock y uno de Data, por la misma linea de Data se envia y se recibe, y siempre el controlador el mouse es master porque solo el puede iniciar la transmision y mediante un bit de control al inicio del byte de dirección del registro indica si quiere leer o escribir en el registro indicado.

Voy a avanzar leyendo sobre las interfaces a 2.7 volts para acoplar las señales entre los micros, pero me queda siempre la dua porque me menciona ud el PULSEIN y dice que no lo use, pues no lo estoy usando, se que el PULSEIN mide la duración de un pulso de entrada, cuando programé PIC en PicBasic use una funcion similar para leer datos de un DHT11 porque ahi el protocolo "ONE WIRE" si usaba ancho de pulso para indicar 1's o 0's .. pero en este caso cada bit se lee con cada pulso de clock. La función que trate de usar es esta.

Seguiré leyendo igual sobre PSI e investigando sobre las interfaces a 2.7

Bueno, me error y esto que diré no lo he verificado.
Ahora que lo miro mejor parece ser I2C.
I2C tiene un Data input/output y un CLOCK.
De nuevo hay que interfacear a 2.7V

Mira este es similar al tuyo pero trabaja a 5V Wireles Optical Motion Sensor

De nuevo gracias por su tiempo surbyte

Ahora que lo miro mejor parece ser I2C.

Tambien lo pensé pero veo que no usa direccionamiento para el dispositivo esclavo, por eso lo descarté

De nuevo hay que interfacear a 2.7V

Me averguenza decirlo pero no encontre nada, quiza porque busque en el trabajo y no he tenido mucho tiempo para leer con detenimiento

Mira este es similar al tuyo pero trabaja a 5V Wireles Optical Motion Sensor

Si, vi algunos proyectos parecidos mientras investigaba sobre esos sensores, pero en ese caso el arduino es el master, estuve a punto de alimentar mi mouse con 5V, pero lei en la hoja de datos que el sensor funciona con un maximo de 3V.

Me preocupa que no se de cuanto es el clock en el mouse, porque no tengo frecuencimetro :frowning: :frowning:

Mi consejo es que tomes los proyectos similares y veas que tanto puedes usar de esas ideas.
Si necesitas leer el clock considera usar arduino para leerlo.
Yo creo que 2.7V no son suficientes para un nivel hIgh asi que habra que armar con un transitor un desplazador de niveles a 5V que permita al arduino contar bien.

Busca : arduino frecuency meter o arduino frecuencimetro

Hay muchos hilos del tema en el foro. Con eso lees la frecuencia de clock y luego a seguir con lo demas.

IMPORTANTE
Mira esta pagina sobre un Mouse Opticio conectado a Arduino

EL autor desarrolló una librería que comunica el arduino con el mouse optico. Asi que puede ser un modelo a seguir usando la hoja de datos. Pero requiere buena programación.
Con paciencia puedes resolverlo.

Gracias Surbyte. .

Mi consejo es que tomes los proyectos similares y veas que tanto puedes usar de esas ideas.

Le comento que anoche estuve leyendo algunos en algunos proyectos que usaron el MCU optico como camara y como leyeron los datos del sensor

Yo creo que 2.7V no son suficientes para un nivel hIgh asi que habra que armar con un transitor un desplazador de niveles a 5V que permita al arduino contar bien.

Si estuve pensando en usar transistores para eso. Voy a atender sus sugerencias y espero volver pronto porque estoy en semana de examenes de la Universidad.

Como punto extra le comento que mi deseo de hacer algo como esto es para participar en una competencia Universitaria pero hacerlo con algo original (o por lo menos solo basado en otros conceptos) y no copiar literalamente un proyecto como ya he visto que lo hacen
Muchisimas gracias nuevamente. .

Ojala y se vea este mensaje. ¿Lograste hacer ese proyecto? Tengo ese mismo proyecto que hacer y realmente soy muy inexperto en este tema de Arduino. Quisiera saber mas detalles y si puede, me ayude a hacer el mio. Un saludo y buen dia

Cuando un mensaje tiene mas de 120 días no debe responderse.
Te sale una advertencia en letras rojas que te advierte que el Tema no tiene movimientos.
Lee las normas del foro y crea un hilo nuevo, pero no lo hagas acá por favor. Usa hardware o software según corresponda.
Este es un foro solo para proyectos.