Sparkfun BNO080 - Teensy 3.6 >> 4.0

Status
Not open for further replies.
Hi. I mean for the resistors. We were talking about the statement that sparkfun wrote about having multiple sensors on 1 bus and the need to remove resistors from the bno080


So the question i raised is how then we can remove the resistor from the bno055?

I am asking on sparkfun forum about the statement about the pull up resistor
 
Again my guess is this is not your problem, but maybe...

Again their documents show the information, about the jumpers to enable the PU resistors. You need to unsolder that area.

I2C.png
 
As Paul said, you might want to ask Sparkfun... But yes if you wish to use two of them on the same buss you need to update the I2C address of one of them.
If you set their jumper that one should have the address 4A.

But again Maybe you fed it 5v instead of 3.3v... Or maybe some of the other jumpers appear are some how shorted (did not see it in your earlier pictures). But if PS0 and PS1 are both set high, than the BNO080 will run using SPI instead of Wire... With the one that is currently not working you might try connecting it up as an SPI device and use one of their SPI examples and see if it works that way or not...

Another option for multiple devices on the same address is to use some form of I2C MUX, like: https://www.sparkfun.com/products/16784

Ok. Thanks ! I will try your suggestion for the broken bno080

For multiple accelerometers, i am using only 1 bno080 and 2 bno050.

Teemsy 4.0 has 2 bus. At that point i can use 2 bus rather than an i2c mux?
 
Yes that way theres no address conflicts if you have 2 devices with same address. Although make sure library supports multiple busses as well, not all do
 
Again my guess is this is not your problem, but maybe...

Again their documents show the information, about the jumpers to enable the PU resistors. You need to unsolder that area.

I2C.png

Then how about for the bno055?
Of the 3 accelerometers only 1 should have pull up resistors if what they claim needs to be met
 
Again I don't think this is your problem.... The Adafruit board has pretty weak 10K PU resistors if my quick check was correct...

My impression from yesterday is one of your BNO080 works and the other does not. Or is it, they both work alone but not together?

And of course seeing a whole picture with your whole configuration might be helpful. The last I saw was just a photo of T4 with pins below and jumpers going out... How is it that you have all of these sensors connected?
 
This conversation has so many messages (now 36 since your first question back at msg #73), but I *still* can't get a clear idea if all of your boards even work when not connected to any others, and what I2C address each of them uses when tested alone, or how each 's I2C address configured.

Have you tested each device alone with Teensy? Even that isn't clear, after all these messages!

Maybe I missed it, but I also don't see whether you took our advice to reconfigure the I2C address on your 2nd BNO080 board.

You also mentioned asking on another forum, but where is the link to that other conversation?

We have repeatedly asked you to show photos of what you're really doing. So far I see only 1 picture on msg #90 (did I miss any others?) and that 1 picture shows only the Teensy and wires with labels, but doesn't show any of the sensors, so we can't see how you've actually wired everything up.

My point is, we're trying hard to help you, but you're not making it much more difficult than necessary. You've asking a lot of questions, which is fine, but you're also withholding so much info about what you're really doing. Keeping us in the dark is not okay. We're trying to help!

And I can't escape the feeling that you're actively resisting our advice, like the need to assign a unique I2C address. Though I will admit, that feeling is based only on your lack of photos and clear description of what you're really doing.

Please, let us better help you by putting a little more work into saying clearly what you've actually tried and what the actual observed result was (not just your interpretation, but what you actually saw). Please also start using photos to show us what's actually going on. We're often pretty good a blind guessing problems, but now that we're at 35 messages added to this thread, it's time to stop going aimlessly in circles. You need to do more than just ask short questions. You really need to communicate what you're really doing (with photos) and clearly say what actually happens. More questions are fine, but don't forget to give clear info, so we can give you useful help!

I know you just want to solve your problem. We want to help you do that. But please, understand we're real humans here. You can do so much better to actively communicate with us and better involve us in this process, which is ultimately going to benefit you.
 
This is my project

https://forum.pjrc.com/threads/6291...o-teensy-4-0-because-of-dual-i2c-channel-need

It is game locomotion system. It uses 2 bno055 at the feet (along with some pressing sensors) and 1 bno080 at the chest.

Lately i had to move from the system mega-uno, to only mega or only teensy, to have the chest accelerometer work with the other 2 accelerometers.

The reason why i mentioned 2 bno080 here asking for help, is becasue i 1st tried to run this setup on the mega, but i got the 1 bno080 (that i wear at the chest) working and then randomly stop working. Then i thought to try the teensy (maybe the 5v of the mega is an issue for the bno080) .
I have 2 bno080 (1 is for a spare).

1st I thiught to test both bno080 accelerometers for basic connections on teensy. It seems that the 1 of tgge 2 bno080 that I have is dead or has issues somehow. 1st i was doing something wrong since none of them were working on the teensy tested singularly. It seems the i2c scanner code i was using was not correct. Now 1 of the bno080 work. The other is dead/not recognized. I do not have to use 2 bno080 at the same time. I am just testing them alone.
My system is based on 2 bno055 and 1 bno080.
So i tested then that on the teensy using 1 bus only, which ia the same hardware connections i had on the mega though the bno080 stopped being recognized on tge mega i2c somehow. So i hope that with the teensy the issue is gone for good qnd i can run on the teensy my locomotion system despite the developer i have asked hekp for coding this system, is reluctant using teensy and i have no clue why since makes aense using teensy vs an arduino mega or else
 
This conversation has so many messages (now 36 since your first question back at msg #73), but I *still* can't get a clear idea if all of your boards even work when not connected to any others, and what I2C address each of them uses when tested alone, or how each 's I2C address configured.

Have you tested each device alone with Teensy? Even that isn't clear, after all these messages!

Maybe I missed it, but I also don't see whether you took our advice to reconfigure the I2C address on your 2nd BNO080 board.

You also mentioned asking on another forum, but where is the link to that other conversation?

We have repeatedly asked you to show photos of what you're really doing. So far I see only 1 picture on msg #90 (did I miss any others?) and that 1 picture shows only the Teensy and wires with labels, but doesn't show any of the sensors, so we can't see how you've actually wired everything up.

My point is, we're trying hard to help you, but you're not making it much more difficult than necessary. You've asking a lot of questions, which is fine, but you're also withholding so much info about what you're really doing. Keeping us in the dark is not okay. We're trying to help!

And I can't escape the feeling that you're actively resisting our advice, like the need to assign a unique I2C address. Though I will admit, that feeling is based only on your lack of photos and clear description of what you're really doing.

Please, let us better help you by putting a little more work into saying clearly what you've actually tried and what the actual observed result was (not just your interpretation, but what you actually saw). Please also start using photos to show us what's actually going on. We're often pretty good a blind guessing problems, but now that we're at 35 messages added to this thread, it's time to stop going aimlessly in circles. You need to do more than just ask short questions. You really need to communicate what you're really doing (with photos) and clearly say what actually happens. More questions are fine, but don't forget to give clear info, so we can give you useful help!

I know you just want to solve your problem. We want to help you do that. But please, understand we're real humans here. You can do so much better to actively communicate with us and better involve us in this process, which is ultimately going to benefit you.

My simple question on this post was about asking help to test the 2 bno080 i have and that somehow i was not able to check on the teensy.
I think i mentioned i was testing them alone on the teensy. I am going per grade

1) can i connect bno080 to the teensy?

2) do my 2 bno080 work singularly on the teensy

3) do my 1 bno080 and 2 bno055 work together on 1 bus on the teensy

4) do my 2 bno55 work on 1 bus while bno080 work on the 2nd bus of the teensy?

As for the sparkfun post.

I posted this here

https://forum.sparkfun.com/viewtopic.php?f=83&t=53944&p=219356#p219356

For cronology, i tested the 2 bno080 singularly (not together) on mega, then uno and then on teensy.

None of the 2 bno080 were working at some point, after originally both bn080 were (singularly) working on the mega.
 
Ok jumping in here a bit late but if you have 1 BNO080 and 1 BNO55 there should be no address conflicts. If you add a second BNO055 you will have to connect the ADDR pin on the BNO055 to 3.3v and it will give you a different I2C address for the second BNO055. See image below:
Picture1.jpg

If you attached the 3.3v pin on the BNO080 to the Vin by accident you might had damaged the one you said no no longer works. If you want to use 2 BNO080s you will have to change its address by solder jumping the pads as @KurtE described in his earlier post. Note: I am using Sparkfun's BNO080 QWIC version for the connections

The schematic that you linked to was rather confusing to trace all the lines.

From all your posts and the responses I think this is what you want to do?
 
Ok jumping in here a bit late but if you have 1 BNO080 and 1 BNO55 there should be no address conflicts. If you add a second BNO055 you will have to connect the ADDR pin on the BNO055 to 3.3v and it will give you a different I2C address for the second BNO055. See image below:
View attachment 21939

If you attached the 3.3v pin on the BNO080 to the Vin by accident you might had damaged the one you said no no longer works. If you want to use 2 BNO080s you will have to change its address by solder jumping the pads as @KurtE described in his earlier post.

The schematic that you linked to was rather confusing to trace all the lines.

From all your posts and the responses I think this is what you want to do?

What i want to mount is

One bno080

And

Two bno055

I tried to mount them together on 1 bus on teensy.

I was able to do so and seems i2c scanner works

Scanning...

Device found at address 0x28 (BNO055,EM7180,CAP1188)

Device found at address 0x29 (TSL2561,VL6180,TSL2561,TSL2591,BNO055,CAP1188)

Device found at address 0x4B (ADS1115,TMP102,BNO080,Qwiic Keypad)

done

The question now i am facing is is using 1 bus would need remove pull up resistors from 2 of the 3 accelerometers and if that was the issue why on mega the bno080 was stopping working and not working anymore
 
Again Maybe barking up wrong tree!

We found the BNO080 to be temperamental...

Paul put in some fixes (kludges) to Wire library awhile ago to take care of some error conditions that were happening with the BNO080 object: Workaround for BNO080 errors on Teensy 4.0
My guess is it is very likely you may have run into similar issues with the Mega with this board... Again I don't think it has to do with the PU resistors... Could be wrong.

So question is, now that Scanner sees your objects... Does the BNO080 example programs work? ...
 
The question now i am facing is is using 1 bus would need remove pull up resistors from 2 of the 3 accelerometers and if that was the issue why on mega the bno080 was stopping working and not working anymore

I will second what @KurtE has stated. Have you tried to run any of the example sketches for the BNO080 to see if they work. If the scanner is seeing the 2 BNO055's and the BNO080 then the next logical step is to see if you can read data from the IMU's each individually.

Believe this is a related post: https://forum.pjrc.com/threads/63474-Porting-arduino-mega-code-to-teensy
 
For the sporadic times the bno080 was working on the mega on single bus along with the two bno055, the game controller code i have, was perfectly using the data we were getting from all the 3 accelerometers . So all the data looked fine on all 3 accelerometers and all worked well, until the bno080 was deciding to give i2c errors issues.
Pratically the night before all 3 accelerometers were detected on the single mega bus, the day after the bno080 was not detected while the 2 bno055 were detected and transmitting data fine.
I was spending hours to figure out what was going on with the bno080 and not detected error on i2c and at times i have had the bno088 magically getting detected again.....until 1 day ago, it stopped completely being detected...even if run the bno080 alone on 1 bus and using i2c scanner. So puzzling....

For testing the single bno080 on 1 bus, and also the 2 bno055 with one bno080 on the same bus, i have been using the code was suggested before in this post and that is here.

https://github.com/PaulStoffregen/Wi...er/Scanner.ino

Would you guys be able to suggest me a different accelerometer that is not the bno080 and not the bno055?
 
As you have shown the 2 bno055 and and bno080 are detected on teensy. So not sure what else to help with you with the teensy until you try running some of the example sketches fro the Adafruit and spark fun libraries. As for the issues with the mega I can’t adress that. If you want to talk about the mega you might want to post on the Arduino forum.

We really are trying to help here.
 
As you have shown the 2 bno055 and and bno080 are detected on teensy. So not sure what else to help with you with the teensy until you try running some of the example sketches fro the Adafruit and spark fun libraries. As for the issues with the mega I can’t adress that. If you want to talk about the mega you might want to post on the Arduino forum.

We really are trying to help here.

You already heped.

What i needed was to see if the bno080 was workimg, then was detected and then if the 3 accelerometers were detected together on 1 bus on teensy. I thought that was clear.

The mention of the mega is because I have been asked what is the project about and what i am after achieving. So i gave the whole explanation. Make sense?

As for running these 3 accelerometers on 1 bus on teensy, i will test with my code and hopefully on teensy i will not have the same issue as for the mega.

As was mentioned, there might be an issue with pull up resistors. Would that be connected to the issue of randomly not detected and not workimg bno080?
Not sure.

If anyone is curious to know the results on teensy vs mega, with my system, i will post. Otherwise I don't.

I think we are clear that sparkfun has some questions to answer about pull up resistors in general and in this specific case.

I don't see the issue here.

I am moving forward with the next steps. I am already past the detection problem 5 or more replies ago :)
 
What we were saying is that you can test to see if it matters with the PU's just by testing with the example sketches as a first step. By the way - Sparkfun had responded some time ago:

Since you bought from Amazon, you'll have to follow their returns policies if one of the modules doesn't respond at all.

You should be able to have a few devices with pull ups attached but it does run the risk of odd behavior. You should only need one device to have pull-ups and the others disconnected. It could be worth a try before returning
 
Is this a same sort of issue some of you faced?

Practically, the i2c scanned detects the 3 accelerometers on 1 bus (2 bno055 and 1 bno080) but the data from the bno080 is not always working.



1.jpg

2.jpg

3.jpg

Is it what some of you have been experiencing with the bno080 ?
 
If you look at the details of the code it seems to be failing on the BNO080 update function:
Code:
  void update()
  {
    // Serial.print(String(myIMU->dataAvailable()) + "\t");
    // Serial.println(String(myIMU->receivePacket()) + "\t");

    if (!myIMU->dataAvailable()) {
      Serial.println("dead");
      //begin();
    }

    // Serial.println(myIMU->dataAvailable());
    // myIMU->receivePacket();
  }

which is telling me that data from the sensor is not available yet from the sensor so it is failing. However, it looks like it is finding the sensor and initializing it. If you look at the BNO080's begin function:
Code:
    myIMU->enableRotationVector(9);
    myIMU->enableLinearAccelerometer(3); //Send data update every 50ms
you see that the RotationVector should be updated every 9 milliseconds while the linear accelerometer should be updated every 3 milliseconds. I never personally tested the BNO080 at 3 or 9 ms. So can't say for sure that is an issue.

You could try to just test the BNO080 with those settings to see if it works:
Code:
Deleted --- see code posted below;;;;;;
}
Please note I haven't tested this yet so no guarantees it will work out of the box.
 
Last edited:
I modified the previous test sketch so that it works plus added a BNO055 into the mix at I2c Addr of 0x29:
Code:
#include <Wire.h>

#include "SparkFun_BNO080_Arduino_Library.h"
BNO080 myIMU;

#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>

/* Set the delay between fresh samples */
#define BNO055_SAMPLERATE_DELAY_MS (100)

// Check I2C device address and correct line below (by default address is 0x29 or 0x28)
//                                   id, address
Adafruit_BNO055 bno = Adafruit_BNO055(-1, 0x29);

void setup()
{
  Serial.begin(115200);
  Serial.println();
  Serial.println("BNO080 Read Example");

  Wire.begin();

  myIMU.begin();

  Wire.setClock(400000); //Increase I2C data rate to 400kHz

  myIMU.enableLinearAccelerometer(3); //Send data update every 50ms

  Serial.println(F("Linear Accelerometer enabled"));
  Serial.println(F("Output in form x, y, z, in m/s^2"));
  
  myIMU.enableRotationVector(9); //Send data update every 50ms

  Serial.println(F("Accelerometer enabled"));
  Serial.println(F("Output in form x, y, z, in m/s^2"));

  Serial.begin(115200);
  Serial.println("Orientation Sensor Raw Data Test"); Serial.println("");

  /* Initialise the sensor */
  if(!bno.begin())
  {
    /* There was a problem detecting the BNO055 ... check your connections */
    Serial.print("Ooops, no BNO055 detected ... Check your wiring or I2C ADDR!");
    while(1);
  }

  delay(1000);

  /* Display the current temperature */
  int8_t temp = bno.getTemp();
  Serial.print("Current Temperature: ");
  Serial.print(temp);
  Serial.println(" C");
  Serial.println("");

  bno.setExtCrystalUse(true);

  Serial.println("Calibration status values: 0=uncalibrated, 3=fully calibrated");


  delay(100);
}

void loop()
{
  //Look for reports from the IMU
  if (myIMU.dataAvailable() == true)
  {
    float roll = (myIMU.getRoll()) * 180.0 / PI; // Convert roll to degrees
    float pitch = (myIMU.getPitch()) * 180.0 / PI; // Convert pitch to degrees
    float yaw = (myIMU.getYaw()) * 180.0 / PI; // Convert yaw / heading to degrees

    Serial.print("Euler Angles: ");
    Serial.print(roll, 1);
    Serial.print(F(","));
    Serial.print(pitch, 1);
    Serial.print(F(","));
    Serial.print(yaw, 1);
    Serial.println();
    Serial.print("Linear Accel: ");
    float x = myIMU.getLinAccelX();
    float y = myIMU.getLinAccelY();
    float z = myIMU.getLinAccelZ();
    byte linAccuracy = myIMU.getLinAccelAccuracy();

    Serial.print(x, 2);
    Serial.print(F(","));
    Serial.print(y, 2);
    Serial.print(F(","));
    Serial.print(z, 2);
    Serial.print(F(","));
    Serial.print(linAccuracy);
    Serial.println();

  // Possible vector values can be:
  // - VECTOR_ACCELEROMETER - m/s^2
  // - VECTOR_MAGNETOMETER  - uT
  // - VECTOR_GYROSCOPE     - rad/s
  // - VECTOR_EULER         - degrees
  // - VECTOR_LINEARACCEL   - m/s^2
  // - VECTOR_GRAVITY       - m/s^2
  imu::Vector<3> euler = bno.getVector(Adafruit_BNO055::VECTOR_EULER);

  /* Display the floating point data */
  Serial.print("Euler BNO055: ");
  Serial.print("X: ");
  Serial.print(euler.x());
  Serial.print(" Y: ");
  Serial.print(euler.y());
  Serial.print(" Z: ");
  Serial.print(euler.z());
  Serial.println();
  }
  Serial.println();
  
}

I got this sample output:
Code:
Euler Angles: -0.1,-4.0,143.5
Linear Accel: 0.02,-0.03,-0.00,3
Euler BNO055: X: 359.94 Y: -2.69 Z: -0.19

Euler Angles: -0.1,-4.0,143.5
Linear Accel: -0.02,0.01,-0.00,3
Euler BNO055: X: 359.94 Y: -2.69 Z: -0.19

Euler Angles: -0.1,-4.0,143.5
Linear Accel: -0.02,0.05,-0.00,3
Euler BNO055: X: 359.94 Y: -2.69 Z: -0.19

Euler Angles: -0.1,-4.0,143.5
Linear Accel: -0.02,0.01,0.04,3
Euler BNO055: X: 359.94 Y: -2.69 Z: -0.19

Euler Angles: -0.0,-4.0,143.5
Linear Accel: -0.02,0.01,0.04,3
Euler BNO055: X: 359.94 Y: -2.69 Z: -0.19

This is using the test board that @KurtE posted earlier.
 
If you look at the details of the code it seems to be failing on the BNO080 update function:
Code:
  void update()
  {
    // Serial.print(String(myIMU->dataAvailable()) + "\t");
    // Serial.println(String(myIMU->receivePacket()) + "\t");

    if (!myIMU->dataAvailable()) {
      Serial.println("dead");
      //begin();
    }

    // Serial.println(myIMU->dataAvailable());
    // myIMU->receivePacket();
  }

which is telling me that data from the sensor is not available yet from the sensor so it is failing. However, it looks like it is finding the sensor and initializing it. If you look at the BNO080's begin function:
Code:
    myIMU->enableRotationVector(9);
    myIMU->enableLinearAccelerometer(3); //Send data update every 50ms
you see that the RotationVector should be updated every 9 milliseconds while the linear accelerometer should be updated every 3 milliseconds. I never personally tested the BNO080 at 3 or 9 ms. So can't say for sure that is an issue.

You could try to just test the BNO080 with those settings to see if it works:
Code:
Deleted --- see code posted below;;;;;;
}
Please note I haven't tested this yet so no guarantees it will work out of the box.

Thank you so so much!
Going to test later this afternoon and let you know!
I hope what you pointed out is the issue and hence a solution can be sorted out!
 
Do i need to run the sketch with just 1 bno080 and 1 bno055 mounted on the teensy?

You should be able to run it with your setup - leave both BNO055's connected. You modify the sketch to use both BNO055's as well by creating another instance of it with the second BNO055 address.
 
Status
Not open for further replies.
Back
Top