/**************************实现函数******************************************** *函数原型: void HMC58X3_init(u8 setmode) *功 能: 设置 5883L的工作模式 输入参数: 模式 输出参数: 无 *******************************************************************************/ void HMC58X3_init(u8 setmode) { if (setmode) { HMC58X3_setMode(0); } HMC58X3_writeReg(HMC58X3_R_CONFA, 0x70); // 8 samples averaged, 75Hz frequency, no artificial bias. HMC58X3_writeReg(HMC58X3_R_CONFB, 0xA0); HMC58X3_writeReg(HMC58X3_R_MODE, 0x00); }
/**************************实现函数******************************************** *函数原型: void HMC58X3_setMode(unsigned char mode) *功 能: 设置 5883L的工作模式 输入参数: 模式 输出参数: 无 *******************************************************************************/ void HMC58X3_setMode(unsigned char mode) { if (mode > 2) { return; } HMC58X3_writeReg(HMC58X3_R_MODE, mode); delay_us(100); }
void HMC58X3_setDOR(unsigned char DOR) { if (DOR>6) { return; } HMC58X3_writeReg(HMC58X3_R_CONFA,DOR<<2); }
void HMC58X3_setMode(U8 mode) { if (mode > 2) { return; } HMC58X3_writeReg(HMC58X3_R_MODE, mode); }
U8 hmc5883_Init(U8 setmode) { U8 ok1=0,ok2=0,ok3=0; if(setmode) { HMC58X3_setMode(0); } ok1=HMC58X3_writeReg(HMC58X3_R_CONFA, 0x70); // 8 samples averaged, 75Hz frequency, no artificial bias. ok2=HMC58X3_writeReg(HMC58X3_R_CONFB, 0xA0); ok3=HMC58X3_writeReg(HMC58X3_R_MODE, 0x00); if(ok1&&ok2&&ok3) { return OK; } else return ERROR; }
/**************************实现函数******************************************** *函数原型: void HMC58X3_setGain(unsigned char gain) *功 能: 设置 5883L的增益 输入参数: 目标增益 0-7 输出参数: 无 *******************************************************************************/ void HMC58X3_setGain(unsigned char gain) { // 0-7, 1 default if (gain > 7) return; HMC58X3_writeReg(HMC58X3_R_CONFB, gain << 5); }