Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Bueno, hace tiempo que tengo una de estas brujulas y me encuentro con un problema, no consigo que lea nada de forma estable. Si uso la salida PWM funciona estupendamente pero en cuanto uso el bus I2C empiezo a leer valores cambiantes. He probado diferentes valores de pulls ups, delays entre los comandos, cambio de comandos. Incluso leyendo el registro 0x0C (deberia ser siempre 0), me lee 0 solo en el 50% de la veces.
¿Alguna idea?
#use i2c(master, slow, sda=PIN_C1, scl=PIN_C2) //Configuramos el bus I2C
while(1)
{
i2c_start(); //condición de inicio
delay_ms(5);
i2c_write(0xC0); //escribimos la dirección del dispositivo
delay_ms(5);
i2c_write(0x0C); //escribimos la dirección del registro
delay_ms(5);
i2c_start();
delay_ms(5);
i2c_write(0xC1); //escribimos la dirección del dispositivo
delay_ms(5);
x = i2c_read(); //leemos la orientación
delay_ms(5);
i2c_stop();
lcd_gotoxy(1,2);
lcd_putc(convertir(x,2));
lcd_putc(convertir(x,1));
lcd_putc(convertir(x,0));
lcd_putc(" ");
lcd_putc(" ");
lcd_putc(convertir(cuenta,2));
lcd_putc(convertir(cuenta,1));
lcd_putc(convertir(cuenta,0));
cuenta++;
delay_ms(500);
}
Ahora mismo para los valores pares de cuenta obtengo 0 y para los impares... ahora mismo 67.
No me he leido el datasheet, y ahora no recuerdo al 100% del I2c, pero creo, repito, no lo recuerdo del todo que desde julio no toco i2c, que una vez le hacias la peticion al sensor, tenias que hacerle un i2c_stop(), para luego volver hacer un i2c_start(); Mira a ver si es eso.
¿Has podido mirar con el osciloscopio lo que tienes en el bus?
Lorth, Soy de los desafortunados que no tengo osciloscopio en casa así que me toca esperar al 22 de septiembre.
He probado a hacer stop-start pero segun el compilador y el datasheet es solo start para hacer un re-start.
Como yo, a gorronear de la uni, xd
Tonces nose.