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?
Hola Boops,
No he usado nunca el I2C, pero si el SPI. Una pregunta antes de soltar nada. ¿Para el I2C es como en el SPI, es decir el registro de escritura y lectura es el mismo? Si es este el caso, puede estar sucediendo que leas un valor que has escrito antes. Averigua cual es el último dato en decimal que has escrito y mira a ver si concuerda con el valor 67 ("C") que dices que lees la mayor parte del tiempo.
Juanjo, si, cuando leo 67 he enviado antes 0x0C
i2c_write(0x0C);
(no el caracter 67 "C")
No me explico que puede ocurrir :S
Ademas cuando trabajo con la brújula envío 0x01 y no me devuelve ningún valor fijo que se pueda identificar como ese "1"
La "C" no lo decia por el valor hexadecimal, si no por que el 67 es la "C" en ASCII, 🙂
Lo que está claro es que el error es sistemático según has comentado, ya que en un número de casos siempre aparece ese valor. Te comento esto por que seguro que puedes descartar otras posibles fuentes e intentar ver de donde proviene dicho error, que lo más probable sea un fallo.
hola compañeros, les comento que estoy tratando de desarrollar un proyecto con la brujula CMPS03, pero tengo problemas con ella, les cuento que la brujula esta haciendo la lectura pero los valores que me esta arroja no son los adecuados,
por favor si alguien me puede echar una manito se lo agradecere.
Yo no trabajo com pic's, pero por si te sirve de algo con los micros de motorola de la serie 68hc908, el código sería el siguiente:
//Enviamos star, byte de direccion y byte de configuracion en modo transmisor
MMADR = DIR_CMPS03R; //Byte de direccion
MMRW = 0; //Maestro en modo transmisor
MMDTR = REG_1B; //Configuracion: registro a leer
while(MMTXBE == 1); //Espera hasta llenar el registro del transmisor
MMAST = 1; //Modo maestro
//Enviamos star, byte de direccion en modo receptor
MMADR = DIR_CMPS03W; //Byte de direccion
MMRW = 1; //Maestro en modo receptor
MMDTR = 0x00; //Configuracion: registro a leer
while(MMTXBE == 1); //Espera hasta llenar el registro del transmisor
MMAST = 1; //Modo maestro
//Leemos el valor enviado por el modulo brujula
angulo = MMDRR;
//Stop I2c
MMNAKIF = 1; //No detectar acuse de recibo (ACK)
MMAST = 0; //Pasa a modo esclavo
//Enviamos por el puerto serie el valor leido mediante i2c de la brujula
while(SCISCTE == 0); //Espera transmisor libre
SCDR = angulo; //Enviamos intensidad canal 1
}
espero te pueda dar una pista de lo que puedes estar haciendo mal.