Autor Tema: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo  (Leído 11888 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Alcaparrones

  • PIC10
  • *
  • Mensajes: 17
Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« en: 15 de Mayo de 2010, 08:34:02 »
Buenas. Hace tiempo que no posteaba (muuuucho), tanto que el correo con el que me registré ya ni existe, y olvidé mi contraseña. En fin, vamos al ajo.
Hace un tiempo me agencié un wiimote con su wii motion plus, una auténtica mina de hardware interesante y barato. Más aún, como ya sabreis el wii motion plus es un añadido que se conecta al wiimote por i2c, por lo que se podría conectar fácilmente a un pic. ¡Por fin un giroscopio de 3 ejes a un precio increible!
Esa es la teoría. Por mucho que he buscado ejemplos por internet lo único que encuentro es gente conectándola a Arduino, pero a pic's nada de nada. Usando de ejemplo códigos para arduino y documentándome un poco en la wii brew he programado un 16f886 (es un 16f876a, pero más moderno) usando ccs, pero no hay manera de hacerlo funcionar. Básicamente lo que hago es intentar leer el wiimotion y mandar el resultado por rs232 al pc. Aparentemente todo está bien, el pic funciona pero no recibo nada del wiimotion. Además, cuando intento verificar el bit ack ( es lo que devuelve el comando i2c_write() ) nunca es 0, que significaría que el comando resultó exitoso, no?

En fin, aquí os dejo el código que he escrito, a ver si veis al menos algún error de bulto, que no soy precisamente un genio programando. Por cierto, me basé en este ejemplo: Ejemplo código Arduino
Maldito Arduino!, guerra con él!  :5]

CÓDIGO ACTUALIZADO¡Ya funciona!

A tener en cuenta ¡:
- No se necesitan pullups en la conexión i2c, ya los llevan los accesorios (WM+, nunchuk...)
- El pic va a 5v pero los accesorios del wiimote a 3.3v. Puedes usar 5v para probar en la protoboard, pero no en un proyecto "formal".

Código: [Seleccionar]
#include <16F886.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT                    //No Power Up Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES BROWNOUT               //No brownout reset
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOWRT                    //Program memory not write protected
#FUSES BORV40                   //Brownout reset at 4.0V
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=20000000)
#use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(Master,sda=PIN_B5,scl=PIN_B4,fast)
//La conexión i2c en teoría solo funciona en el puerto B del pic
//El puerto C solo admite conexión TTL, los accesorios del wiimote
//funcionan a 3.3v


int16 yaw=0,yaw0=0;
int16 pitch=0,pitch0=0;
int16 roll=0,roll0=0;



void inicio_nunchuk()       //conexión desencriptada!
{
   i2c_start();
   i2c_write(0xA4);
   i2c_write(0xF0);
   i2c_write(0x55);
   i2c_stop();
   delay_ms(1);
   i2c_start();
   i2c_write(0xA4);
   i2c_write(0xFB);
   i2c_write(0x00);
   i2c_stop();
}

void inicio_wm()
{
   i2c_start();
   i2c_write(0xA6);
   i2c_write(0xFE);  
   i2c_write(0x04);
   i2c_stop();
}  

void pedir_datos()
{  
   i2c_start();
   i2c_write(0xA4);
   i2c_write(0x00); //Se manda 0 antes de cada petición de datos
}

void calibrar_ceros()
{
int i,p;
int datos[6];

for (i=0;i<10;i++){
 pedir_datos();
 delay_ms(1);
 i2c_start();
 i2c_write(0xA5);
 for (p=0;p<5;p++){
  datos[i]=i2c_read();
 }
 datos[5]=i2c_read(0);
 i2c_stop();
  
  //FALTA ORDENAR ADECUADAMENTE LOS BYTES!
  
  yaw0+=(((datos[3]>>2)<<2)+datos[0])/10;  //La media de 10 mediciones
  roll0+=(((datos[4]>>2)<<2)+datos[1])/10;
  pitch0+=(((datos[5]>>2)<<2)+datos[2])/10;
  
}
}



void main()
{
 int buffer_232,t;
 int datos[6] = {0};
 int joy_x_axis,joy_y_axis;
 int16 accel_x_axis,accel_y_axis,accel_z_axis;
 int z_button,c_button;

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard


 printf("\r\nDebug Wii Motion Plus");
 printf("\r\n l=lectura_datos nunchuk");
 printf("\r\n k=lectura datos WM+");
 printf("\r\n\n");

 while(1) {
 buffer_232=getc();

 if (buffer_232=='l') {
 inicio_nunchuk();
 delay_ms(100);
 while(1) {
  pedir_datos();
  delay_ms(1);
  i2c_start();
  i2c_write(0xA5);
  
 for (t=0;t<5;t++)  
  datos[t] = i2c_read();
 datos[5] = i2c_read(0);  //último read no devuelve bit ack

 i2c_stop();

// Ahora preparo los datos
// la lectura del acelerómetro ocupa 10 bits
// así que leo 8 bits y le añado los 2 restantes.
// Por eso voy a multiplicarlos *2*2 (10 bits = 2^10)

  joy_x_axis = datos[0];
  joy_y_axis = datos[1];
  accel_x_axis = datos[2] * 2 * 2;
  accel_y_axis = datos[3] * 2 * 2;
  accel_z_axis = datos[4] * 2 * 2;

  z_button = 0;
  c_button = 0;

 // El byte datos[5] contiene bits para los botones z y c
 // también contine los bits menos significativos del acelerómetro
 // así que comprobamos cada bit de datos[5]
  if ((datos[5] >> 0) & 1) z_button = 1;
  if ((datos[5] >> 1) & 1) c_button = 1;
  if ((datos[5] >> 2) & 1) accel_x_axis += 2;
  if ((datos[5] >> 3) & 1) accel_x_axis += 1;
  if ((datos[5] >> 4) & 1) accel_y_axis += 2;
  if ((datos[5] >> 5) & 1) accel_y_axis += 1;
  if ((datos[5] >> 6) & 1) accel_z_axis += 2;
  if ((datos[5] >> 7) & 1) accel_z_axis += 1;
    

  printf("\rJoy_x=%d",joy_x_axis);
  printf (" Joy_y=%d",joy_y_axis);
  printf(" Ace_x=%Ld",accel_x_axis);
  printf(" Ace_y=%Ld",accel_y_axis);
  printf(" Ace_z=%Ld",accel_z_axis);
  printf(" Botón_z=%d",z_button);
  printf(" Botón_zc=%d    ",c_button);
}
}
 

 if (buffer_232=='k') {
 inicio_wm();
 delay_ms(100);
// calibrar_ceros();  Puesta a cero desactivada hasta ordenar los bytes bien
 while(1) {
   pedir_datos();
  delay_ms(1);
  i2c_start();
  i2c_write(0xA5);
  
 for (t=0;t<5;t++)  
  datos[t] = i2c_read();
 datos[5] = i2c_read(0);

 i2c_stop();
 

  //FALTA ORDENAR ADECUADAMENTE LOS BYTES!
  
  yaw=((datos[3]>>2)<<2)+datos[0]-yaw0;
  roll=((datos[4]>>2)<<2)+datos[1]-roll0;
  pitch=((datos[5]>>2)<<2)+datos[2]-pitch0;
  printf("\r%Ld %Ld %Ld  ",yaw,roll,pitch);

  }
}
 }
 }
« Última modificación: 20 de Mayo de 2010, 18:24:06 por Alcaparrones »

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Wii motion plus y 16f886
« Respuesta #1 en: 15 de Mayo de 2010, 09:29:33 »

 He echado un vistazo al codigo, a ver si es útil esto...

 - ¿Has probado i2c a 100Khz como recomiendan usar?

 - En el código para leer pones

Código: [Seleccionar]
while(1) {
  pedir_datos();
  i2c_start();
  i2c_write(0x52);
  delay_us(100);
for (t=0;t<6;t++)
   datos[t]=i2c_read();

 El último i2c_write(0x52) creo que debería ser i2c_write(0x53) es decir con el bit de lectura/escritura a 1 porque ahora quieres leer.


 Un saludo y ya nos cuentas...

Desconectado Alcaparrones

  • PIC10
  • *
  • Mensajes: 17
Re: Wii motion plus y 16f886
« Respuesta #2 en: 16 de Mayo de 2010, 05:57:00 »
Buenas, gracias por responder.
Ya probé a 100khz y nada. Aunque varias fuentes afirman que es mejor primero probar a 100khz por si acaso, en el wiibrew afirman que la conexión va en fast, o sea, 400Khz.
Sobre el tema de las direcciones del esclavo (pic maestro, WM+ esclavo), según tengo entendido el tema va así: al conectar el WM+ éste está desactivado, permitiendo que cualquier otro dispositivo, un nunchuk por ejemplo (recordad que el WM+ tiene otra ranura que es por donde se conectan las cosas, ya que el WM+ ocupa la del wiimote), sea el que ocupe la dirección 0x52 que es la dirección del esclavo i2c en ese momento activo. Pues bien, el WM+ permanece inactivo en la dirección 0x53 hasta que se le manda el dato 0x04 a la posición de memoria 0xFE, momento en el que el WM+ se activa pasando a ocupar la posición 0x52. Ahora el WM+ está preparado para dejar 6 bytes de informacion ( formato de los bytes ), pero primero hay que pedirle que se prepare para mandarlos, enviando 0x00 a 0x52. Después sólo queda leer los 6 bytes. Yo además los mando por rs232 para ver los cambios.
Por cierto, pongo de pullup en las lineas datos y clock del i2c dos resistencias de 10k, esto va bien no?.  La verdad es que mi experiencia con el i2c es más bien escasa. He intentado monitorizar con un osciloscopio el bus i2c, pero lo cierto es que no sé ni qué es lo que tengo que observar, ni si va bien o mal.
En fin, perdón por el rollo. La verdad es que no entiendo como nadie en este foro ha intentado esto antes. ¿Tan ocupados estais? ¿o soy yo el ocioso sin remedio  :-/?

Un saludo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Wii motion plus y 16f886
« Respuesta #3 en: 16 de Mayo de 2010, 10:28:07 »
En fin, perdón por el rollo. La verdad es que no entiendo como nadie en este foro ha intentado esto antes. ¿Tan ocupados estais? ¿o soy yo el ocioso sin remedio  :-/?

Un saludo.

Yo tengo el wiimote con el motion plus pero sólo los he probado a nivel bluetooth y no I2C.

Si logras hacerlo funcionar serás el primero en publicar el código en Todopic.

Desconectado Alcaparrones

  • PIC10
  • *
  • Mensajes: 17
Re: Wii motion plus y 16f886
« Respuesta #4 en: 20 de Mayo de 2010, 18:12:05 »
Buenassss  :-/
Se me ve contento, ¿no? ¿me ha tocado una cena con Scarlet Johanson? ¡qúe más quisiera ella! ¡ya leo el WM+, y como extra el Nunchuk!!!
Pues sí amigos, de no saber que en una conexión i2c la dirección para leer es la siguiente a la de escritura (ya me vale...) a leer los accesorios del wiimote. Ha resultado ser un desafio bastante gordo para mí, pero no hay nada que no se solucione leyendo y leyendo, y usando el típico "ensayo-error" en la protoboard, claro. Me ha costado la vida averiguar la forma de activación de los accesorios, luego me entero de que los datos están encriptados (solo me salía FF por todos lados) y para finalizar algunos bytes (de 8 bits) tienen bits que completan otros bytes de diferente longitud... Una odisea, vamos.
Por cierto, la lectura para el nunchuk está correcta, pero la del WM+ no puesto que no he introducido una rutina para ordenar los bytes. Tengo dudas de como coger bits de diferentes bytes e introducirlos en otro byte diferente de diferente longitud. ¿Alguna idea? (orden de los datos en los bytes AQUÍ). Y ya que nos ponemos, sería interesante introducir rutinas que tengan en cuenta cuando se desenchufa y se vuelve a enchufar un accesorio, que el pic busque, identifique e inicie el dispositivo de forma automática (esto creo que es fácil, a lo mejor me animo  ;-)) o el poder usar el Nuchuk a través del WM+ (quizás esto no es tan interesante para nosotros).

He actualizado el primer post para no confundir a la gente con el primer código que publiqué, introduciendo el nuevo y mejorado. Un saludo.
« Última modificación: 20 de Mayo de 2010, 18:30:41 por Alcaparrones »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #5 en: 20 de Mayo de 2010, 21:45:28 »
Enhorabuena por el logro  :mrgreen:

Desconectado alcubo01

  • PIC12
  • **
  • Mensajes: 69
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #6 en: 11 de Junio de 2010, 05:48:13 »

 Enhorabuena por el gran avance, como tu dices puede ser una manera muy buena de obtener un giroscopo a bajo coste!!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #7 en: 11 de Junio de 2010, 06:04:56 »
¡Qué interesante!, muchas gracias por la aportación.
A ver si nos enseñas algunas imágenes del invento.

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #8 en: 06 de Junio de 2011, 19:05:32 »
Hola!!!!

Aunq el post es de hace tiempo, no veo nada igual publicado en ningun otro.

En primer lugar Alcaparrones, felicidades por el proyecto, yo llevo un par de semanas intentando hacer lo mismo que tu y por casualidad di con tu codigo, menuda suerte!!!! :-/ Yo lo quiero para el control autoestable de un quadricoptero.

El problema es que tras adaptarlo al PIC que tengo, un 16f88 (y sin NUNCHUK pues aun no me ha llegado), no me funciona. En vez de sacar los datos por el PC, los saco directamente a un LCD.

Si no hago llamadas a traves del I2C, el programa y el LCD funcionan, pero en cuanto llamo alguna funcion del WMP, se queda el display superior todo en negro.

No pongo resistencias pull-up pues ya las trae y lo alimento a 5V pues trae un conversor el propio WMP a 3,3V. No que cuadra mucho que si lees en otros programas para arduino, dicen que la direccion del WMP para I2C es 0x52, y tu esa direccion no la usas.

Este es el codigo por si alguno puede ayudarme y ve algun fallo:

Código: [Seleccionar]
#include <16F88.h>

#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES BROWNOUT //No brownout reset
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES RESERVED //Used to set the reserved FUSE bits

#use delay(clock=8000000)
#use i2c(Master,sda=PIN_B1,scl=PIN_B4,fast)
#include <LCD_PORT_A.c>                   //libreria manejo lcd

int t;
int datos[6] = {0};

void inicio_wm() {
   i2c_start();
   i2c_write(0xA6);
   i2c_write(0xFE);  
   i2c_write(0x04);
   i2c_stop();
}  

void pedir_datos() {  
   i2c_start();
   i2c_write(0xA4);
   i2c_write(0x00); //Se manda 0 antes de cada petición de datos
}

void LCD(){
lcd_gotoxy(1,1);
printf(lcd_putc,"Yaw- Roll -Pitch");
//lcd_gotoxy(1,2);
//printf(lcd_putc,"03%u - 03%u - 03%u",datos[1],datos[2],datos[3]);  //Yaw,Roll,Pitch);
delay_ms(30);
}

void main() {

lcd_init();

setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard

inicio_wm();
delay_ms(10);

while(1) {
pedir_datos();
delay_ms(1);
i2c_start();
i2c_write(0xA5);
 
for (t=0;t<5;t++)  
datos[t] = i2c_read();

datos[5] = i2c_read(0);
i2c_stop();

LCD();
}
}

« Última modificación: 06 de Junio de 2011, 19:10:55 por sokoloko »

Desconectado Alcaparrones

  • PIC10
  • *
  • Mensajes: 17
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #9 en: 07 de Junio de 2011, 13:05:43 »
Buenas Sokoloko

La verdad es que este proyecto lo dejé hace un tiempo precisamente por tener problemas con la conexión con el WMP. Sin embargo y para felicidad mia hace unos dias lo retomé y conseguí finalmente la conexión, qué casualidad no?  :-/

Para empezar un pequeño error mio que mejor que soluciones:
Código: [Seleccionar]
void pedir_datos()

   i2c_start();
   i2c_write(0xA4);
   i2c_write(0x00); //Se manda 0 antes de cada petición de datos
}
Aquí se me olvidó cerrar la conexión con i2c_stop(). De todas formas, en el siguiente i2c_start() la conexión se reinicia y no hay más problema, a mí me funcionó bien con el nunchuk hasta que me di cuenta pero, por si acaso, añádele este comando.

Bueno, supondré que el LCD lo tienes bien conexionado y que te has asegurado de que representa bien los datos que le mandas. También de que has conexionado bien el WMP. Preguntas por qué no uso la dirección 0x52 para comunicarme con el WMP. Bien, si usas una calculadora científica capaz de pasar de hexadecimal a decimal y etc (como la que trae win7) observarás que 52 de hexadecimal pasado a binario es 1010010. Esto son 7 bits y el compilador de CCS requiere direcciones de 8 bits siempre. Por lo tanto para rellenar añadimos un 0 al final, osea, 10100100 que en hexadecimal es A4, precisamente la dirección que uso en mi ejemplo, lo pillaste?. Lo mismo para la dirección A6 (53).

Por otro lado, la función inicio_wm() la he cambiado recientemente por otra ya que a veces me ha fallado y no ha iniciado el WMP. Esta es la que uso actualmente con buenos resultados:

Código: [Seleccionar]
void inicio_wm()
{
   i2c_start();
   i2c_write(0xA6);
   i2c_write(0xF0);
   i2c_write(0x55);
   i2c_stop();
   delay_ms(1);
   i2c_start();
   i2c_write(0xA6);
   i2c_write(0xFE); 
   i2c_write(0x04);
   i2c_stop();   
   delay_ms(1);
   i2c_start();
   i2c_write(0xA4);
   i2c_write(0xFB);
   i2c_write(0x00);
   i2c_stop();
}


También he ordenado adecuadamente los datos que obtengo con el WPM, al menos eso creo por lo que he podido observar. Te muestro dos códigos que difieren ligeramente, prueba ambos a ver cual te convence más, yo a ver si los comparo suficientemente y averiguo cuál es mejor aunque seguramente sean iguales. Estas son las variables que tienes que enviar al lcd, puedes definirlas como int. Inserta esto después de obtener los datos por i2c:

Código: [Seleccionar]
   
    roll = (((datos[4]&0xFC)<<6) + datos[1]);
    pitch = (((datos[5]&0xFC)<<6) + datos[2]);
    yaw = (((datos[3]&0xFC)<<6) + datos[0]);
 
Código: [Seleccionar]
   yaw=((datos[3]>>2)<<8)+datos[0];
   pitch=((datos[4]>>2)<<8)+datos[1];
   roll=((datos[5]>>2)<<8)+datos[2];

Después de cualquiera de los dos párrafos anteriores te invito a que insertes otro más, esta vez para mostrar los bits que el WMP envía para saber el "modo de velocidad" del giroscopio. Para saber más mira en internet. Los valores posibles son 0 o 1, así que puedes definir estas nuevas variables como int1.

Código: [Seleccionar]
    roll_fs = (datos[4]&0x02)>>1;
    pitch_fs = (datos[3]&0x01);
    yaw_fs = (datos[3]&0x02)>>1;

Con el WMP parado mostrarán 0, pero en cuanto lo agites un poco mostrarán 1.

Con respecto al nunchuk el primer código que posteé siempre me ha ido bien y está correctamente ordenado, no deberías tener problemas con él. Si después de estos cambios el pic sigue como "colgado" vuelve a revisar las conexiones, los fallos de conexiones sobretodo con protoplacas son muy puñeteros  :D


Espero que te haya servido de algo. Si tienes más dudas que humildemente pueda ayudarte a solucionar, aquí estaré  8)


Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #10 en: 07 de Junio de 2011, 15:23:34 »
HOla.


Pues menuda buena suerte la mia, jejejjeeje!!!! :-/ :-/ :-/

Por fin funciona!!!!!!!! Ya lo tengo operativo, gracias a tus comentarios.

Ahora que se que saco valores, toca empezar a trastear un poco. Lo que si noto es que estando el WMP quieto sobre una mesa fija, las lecturas tiene muchisima variacion, pero sera tema de ajustar el filtrado de los datos.

Te aconsejo por si puede ayudarte este hilo del foro Aeromodelismo Virtual, en el hacen un proyecto similar pero implementando el I2C a pelo....todo un logro de Ariel.

Post Aeromodelismo Virtual

Muchas gracias y ire contando los logros.

Saludos.


Desconectado Alcaparrones

  • PIC10
  • *
  • Mensajes: 17
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #11 en: 08 de Junio de 2011, 14:11:12 »
Está muy bien el proyecto del headtracker, gracias por el link. Al código que posteé le falta el tema de calibrar cada cierto tiempo el WMP, algo simple por otra parte sacando la media de x lecturas. Sobre lo de que los valores varían aún estando quieto el WMP creo que se debe simplemente a que la precisión de los giroscopios no es perfecta.

Y nada más, un saludo y hasta el próximo proyecto  ;-)

Desconectado droky

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 628
    • Diseños radikales libres
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #12 en: 08 de Junio de 2011, 19:47:07 »
El compañero villamany tiene un post hace tiempo en su blog con un nunchuck conectado por bluetooth y usa un PIC:
http://villamany.blogspot.com/2010/11/nunchuck-bluehack-r1-utilizar-el-mando.html
Salu2
Yo... he visto cosas que vosotros no creeríais... atacar naves en llamas más allá de Orión, he visto rayos C brillar en la oscuridad cerca de la puerta Tannhäuser.
Todos esos momentos se perderán en el tiempo como lágrimas en la lluvia.
Es hora de morir.

Si me buscas en twitter, me tienes por @radikaldesig

Desconectado sokoloko

  • PIC12
  • **
  • Mensajes: 77
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #13 en: 09 de Junio de 2011, 03:40:59 »
Gracias por la información Droky.

Si es que esta todo inventado, jejeee :D

Aun asi es interesante el proyecto.

Saludos!!

Desconectado rabanisa

  • PIC10
  • *
  • Mensajes: 12
Re: Wii motion plus, Nunchuk y 16f886. Ménage á trois de lujo
« Respuesta #14 en: 28 de Julio de 2011, 17:50:08 »
Buenas noches:

No suelo postear mucho porque habitualmente mis dudas con utilizar el buscador estan resueltas. Bueno el asunto es que estoy intentando hacer funcionar el wii motion y de momento solo quiero sacar los datos por el lcd como el compañero sokoloko, pero lo unico que saco son unos datos que oscilan demasiado , tanto que no me son utiles. El codigo que utilizo es el de sokoloko que hay publicado aqui pero nada de nada. Tambien he probado las distintas formas de ordenar los bytes que devuelve el WII motion pero siempre con el mismo resultado. La unica diferencia es que utilizo un 18f2550 y configuro el i2c con rc6 y rc7.  Amigo sokoloko podrias postear el codigo que te funciona para ver donde tengo el fallo?

muchas gracias por adelantado.

pd: este sensor es parte de un bot que estoy montando pero necesito manejar bien su funcionamiento.