První příklad s knihovnou wire.h, bez přerušení, funguje úplně v pohodě. Na sériovém monitoru vidím data z MPU6050 a pomocí Processing mohu virtuálně otáčet objektem v prostoru.
Když zkusím druhý příklad, knihovna I2Cdev.h a propojím INT pin MPU6050 s D2 pinem Arduina, sériový monitor vypíše:
Initializing I2C devices...
Testing device connections...
MPU6050 connection failed
Send any character to begin DMP programming and demo:
Initializing DMP...
Checking hardware revision...
Revision @ user[16] [6] = 0
Resetting memory bank selection to 0...
>*********** atd
Podle doporučení v programu jsem pro Arduino Pro Mini snížil rychlost terminálu na 19200 bit/s (doporučeno max. 38400 bit/s) a odkomentoval jsem řádek #define OUTPUT_TEAPOT
Nemůže být problém v rychlosti I2C pro Arduino Mini Pro 8Mhz 3.3V viz:
Kód: Vybrat vše
// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
Všechny knihovny mám správně naistalovány v adresáři C:\Users\Honza\Documents\Arduino\libraries\MPU6050\src, překlad a nahrání programu funguje bez chyb.
Zkoušel jsem také snížit rychlost I2C na 100 kHz, to ale nepomohlo:
Kód: Vybrat vše
void setup() {
// join I2C bus (I2Cdev library doesn't do this automatically)
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
Wire.begin();
Wire.setClock(100000); // 400kHz I2C clock. Comment this line if having compilation difficulties
#elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE
Fastwire::setup(100, true);
#endif
looks like 'Connection Failed' simply queries the device_id (from the WHO AM I Register 0x75. My chip answers with 0x72 not the expected 0x34. Just ignore the 'issue' (or comment it out) and it should work
Bez analyzátoru I2C to ale nemám šanci zjistit.