HMC5883L 读不出,请大家帮忙看看。
我用的是MPU6050+HMC5883L+BMP085一体传感,板子是mega 2560。其中MPU6050和BMP085使用例子成功读数。
但HMC5883L就是读不出,网上能搜索到的例子都试过了,所有的都不行。
本来以为坏了,刷上MWC2.0,结果发现传感器是好的。郁闷了。。请大家帮帮忙。
第一种是出来都是零
第二种是读数没有变化。
是这个板子。
数据太少。你这样不好分析啊
起码把模块电路。代码发一下 试试这个例子http://www.geek-workshop.com/thread-105-1-1.html 天天向上/tp 发表于 2013-11-3 04:58 static/image/common/back.gif
试试这个例子http://www.geek-workshop.com/thread-105-1-1.html
这个例子试了,结果就是第二张截图那样。 把MPU6050配置成Bypass模式,就相当于把辅助I2C总线直接连到了主I2C总线上,利用I2C协议按地址去操作就可以了。
//配置MPU6000bypass模式
accelgyro.setI2CMasterModeEnabled(0);
accelgyro.setI2CBypassEnabled(1); ent173 发表于 2013-11-4 09:43 static/image/common/back.gif
把MPU6050配置成Bypass模式,就相当于把辅助I2C总线直接连到了主I2C总线上,利用I2C协议按地址去操作就可以 ...
谢谢答复,MPU6050和BMP085都读出来了。
现在就HMC5883没读出来。这个也有Bypass模式吗? huyukuo 发表于 2013-11-4 12:59 static/image/common/back.gif
谢谢答复,MPU6050和BMP085都读出来了。
现在就HMC5883没读出来。这个也有Bypass模式吗?
http://www.geek-workshop.com/thread-1793-1-1.html
看下这个帖子 huyukuo 发表于 2013-11-4 12:59 static/image/common/back.gif
谢谢答复,MPU6050和BMP085都读出来了。
现在就HMC5883没读出来。这个也有Bypass模式吗?
看下面的代码#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"
#include "HMC5883L.h"
#include "BMP085.h"
MPU6050 accelgyro;
HMC5883L mag;
BMP085 barometer;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int16_t mx, my, mz;
float temperature;
float pressure;
float altitude;
int32_t lastMicros;
#define LED_PIN 13
bool blinkState = false;
void setup() {
Wire.begin();
Serial.begin(38400);
Serial.println("Initializing MPU6050 devices...");
accelgyro.initialize();
Serial.println("Testing MPU6050 connections...");
Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
delay(1000);
accelgyro.setIntI2CMasterEnabled(0);
accelgyro.setI2CBypassEnabled(1);
if((!accelgyro.getI2CMasterModeEnabled()) && accelgyro.getI2CBypassEnabled())
Serial.println("Set MPU6050 Bypass Mode success!");
Serial.println("Initializing HMC5883L devices...");
mag.initialize();
Serial.println("Testing HMC5883L connections...");
Serial.println(mag.testConnection() ? "HMC5883L connection successful" : "HMC5883L connection failed");
delay(1000);
// initialize device
Serial.println("Initializing BMP085 ...");
barometer.initialize();
// verify connection
Serial.println("Testing device connections...");
Serial.println(barometer.testConnection() ? "BMP085 connection successful" : "BMP085 connection failed");
delay(1000);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
getMPU6050Arguments();
getHMC5883LArguments();
getBMP085Arguments();
delay(500);
blinkState = !blinkState;
digitalWrite(LED_PIN, blinkState);
}
void getMPU6050Arguments(){
// read raw accel/gyro measurements from device
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// display tab-separated accel/gyro x/y/z values
Serial.print("a/g:\t");
Serial.print(ax);
Serial.print("\t");
Serial.print(ay);
Serial.print("\t");
Serial.print(az);
Serial.print("\t");
Serial.print(gx);
Serial.print("\t");
Serial.print(gy);
Serial.print("\t");
Serial.println(gz);
}
void getHMC5883LArguments(){
mag.getHeading(&mx, &my, &mz);
// display tab-separated gyro x/y/z values
Serial.print("mag:\t");
Serial.print(mx);
Serial.print("\t");
Serial.print(my);
Serial.print("\t");
Serial.print(mz);
Serial.print("\t");
// To calculate heading in degrees. 0 degree indicates North
float heading = atan2(my, mx);
if(heading < 0)
heading += 2 * M_PI;
Serial.print("heading:\t");
Serial.println(heading * 180/M_PI);
}
void getBMP085Arguments(){
// request temperature
barometer.setControl(BMP085_MODE_TEMPERATURE);
// wait appropriate time for conversion (4.5ms delay)
lastMicros = micros();
while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds());
// read calibrated temperature value in degrees Celsius
temperature = barometer.getTemperatureC();
// request pressure (3x oversampling mode, high detail, 23.5ms delay)
barometer.setControl(BMP085_MODE_PRESSURE_3);
while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds());
// read calibrated pressure value in Pascals (Pa)
pressure = barometer.getPressure();
// calculate absolute altitude in meters based on known pressure
// (may pass a second "sea level pressure" parameter here,
// otherwise uses the standard value of 101325 Pa)
altitude = barometer.getAltitude(pressure);
// display measured values if appropriate
Serial.print("T/P/A\t");
Serial.print(temperature);
Serial.print("\t");
Serial.print(pressure);
Serial.print("\t");
Serial.print(altitude);
Serial.println("");
} i2c读不出来 检查可以这样来做。
芯片工作电压是否符合要求,上拉电阻是否有(有的板子有有的板子没有),地址是否正确。
问题也要描述清楚,到底问题出在哪一步,初始化有没有成功。 ent173 发表于 2013-11-4 18:00 static/image/common/back.gif
看下面的代码
十分感谢大神!!使用bypass,都能读出来了。
但是不能理解,为什么要搞个bypass模式,难道不是bypass模式的时候,MPU6050还对HMC5883L过来的数据做处理吗?
页:
[1]