Numeros negativos con pic

#1
Que tal estoy trabajando con un sensor hmc5883l en el cual los valores de salida los da en dos registros para cada eje x,y,z lo qe me dice el datasheet "The value stored in these two registers is a 16-bit value in 2’s complement form, whose range is 0xF800 to 0x07FF" o sea guarda los valores de sallida a complemento a 2, mi duda es tengo que convertirlos a decimal? para poder trabajar con ellos y como es que voy a saber si obtengo valores negativos de los ejes o nomas los convierto a decimal y ya? estoy trabajando con un pic18 en lenguaje c
 
#2
saludos lo que te podría decir es que tienes la escala desde F800h (negativo) hasta 07FFh (positivo)
creo que con eso ya tienes los valores y no es necesario pasarlos a decimal ( a mi punto de vista) a menos
que tengas que mostrar algún dato si es así considera usar alguna librería del C (esos que te ayudan a convertir cosas o realiza tu la conversión con el fundamento "HEX to DEC" )
también considera si te es necesario mostrar decimales osea ( 000.0 )

es todo lo que te puedo aportar mi vasto conocimiento solo se limita al ASSEMBLER :D
te recomiendo proponer algo mas como el código C o el diagrama
para que no termines en moderación por imcuplir una que otra norma

saludos
 
#3
gracias, si efectivamente no tuve que hacer conversiones ni nada solo tuve que utilizar variables tipo long o float para poder trabajar con ellos, ya pueden dejar el tema morir muchas gracias
 
#4
que bueno que hallas solucionado tu problema
si el tema ya no tiene sentido, y consideras cerrarlo, reportarlo a algún moderador ellos sabrán que hacer.
saludos
 
#6
pues asi los tenia en un principio pero nomas me daba valores positivos, segun yo con eso si era suficiente pero creo que no a no ser que yo haya hecho algo mal pero yo guardaba los dos registros por decir del eje x la parte baja en una variable y la parte alta en una variable de 16 bits signed int hacia el corrimiento de 8 bits luego una or para juntar el dato y luego guardaba ese valor en una variable tipo signed int llamada x y ya al momento de mandar los datos por el puerto serie me daba valores de 65000 y tantos utilizando printf(x=%u,x) luego hize el cambio a signed long con printf(x=%ld,x)y ya me dieron en los ejes por decir x=-132 y=50 z=-145 y pues hize la conversion a grados y si me da de 0 a 360 y pues ya asi lo deje mejor para no meterme ya en mas problemas
 

Temas similares

Arriba