|
本帖最后由 xaper 于 2012-7-31 21:33 编辑
初始化:- void Init_HMC5883L(void)
- {
- Single_Write(HMC5883L_Addr,0x00,0x14);
- Single_Write(HMC5883L_Addr,0x02,0x00);
- }
复制代码 读取程序:
void read_hmc5883l(void)
{
Single_Write(HMC5883L_Addr,0x00,0x14);
Single_Write(HMC5883L_Addr,0x02,0x00);
delay5ms();
BUF[0]=Single_Read(HMC5883L_Addr,0x00);//OUT_X_L_A
delay5ms();
BUF[1]=Single_Read(HMC5883L_Addr,0x03);//OUT_X_L_A
delay5ms();
BUF[2]=Single_Read(HMC5883L_Addr,0x04);//OUT_X_H_A
delay5ms();
BUF[3]=Single_Read(HMC5883L_Addr,0x07);//OUT_Y_L_A
delay5ms();
BUF[4]=Single_Read(HMC5883L_Addr,0x08);//OUT_Y_H_A
delay5ms();
for(uint8 i=0;i<5;i++)
{
uart_send1(UART5,BUF);//串口输出寄存器的值
}
x=(BUF[1] << 8) | BUF[2]; //Combine MSB and LSB of X Data output register
y=(BUF[3] << 8) | BUF[4]; //Combine MSB and LSB of Z Data output register
if(x>0x7fff)x-=0xffff;
if(y>0x7fff)y-=0xffff;
angle= atan2(y,x) * (180 / 3.14159265) + 180; // angle in degrees
}
如果把红色部分去掉,无论器件怎么放,数据保持一个值不变;不过,改变位置后再重启就变一次。加上红色部分后,数据有变化了,但是感觉变化很迟钝(就是读取出很多次一样的,然后才变化,我是差不多40ms读一次,设置30ms器件连续测)。这是正常的吗? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|