В чем разница между двумя способами доступа к шине I2 C? - PullRequest
0 голосов
/ 26 января 2020

Я видел два разных метода запроса данных с шины I2 C:

Метод 1:

  Wire.beginTransmission(MPU);
  Wire.write(0x43); // Gyro data first register address 0x43
  Wire.endTransmission(false);
  //https://www.arduino.cc/en/Reference/WireEndTransmission
  //false will send a restart, keeping the connection active. 

  Wire.requestFrom(MPU, 6, true); // Read 4 registers total, each axis value is stored in 2 registers
  GyroX = (Wire.read() << 8 | Wire.read()) / 131.0; // For a 250deg/s range we have to divide first the raw value by 131.0, according to the datasheet
  GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
  GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;

Метод 2:

Wire.beginTransmission(0b1101000); //I2C address of the MPU //Accelerometer and Temperature reading (check 3.register map) 
Wire.write(0x3B); //Starting register for Accel Readings
Wire.endTransmission();
Wire.requestFrom(0b1101000,8); //Request Accel Registers (3B - 42)
while(Wire.available() < 8);
accelX = Wire.read()<<8|Wire.read(); //Store first two bytes into accelX
accelY = Wire.read()<<8|Wire.read(); //Store middle two bytes into accelY
accelZ = Wire.read()<<8|Wire.read(); //Store last two bytes into accelZ
temp = Wire.read()<<8| Wire.read();

Это оказалось, что первый метод не прерывал передачу, т.е. Wire.endTransmission (false), а второй не был указан. Какая разница между ними? и какой из них лучше, т.е. время отклика / l oop время.

Кроме того,

0b1101000 and 0x3B(the register address for Accel in Method 2)

равно друг другу?

1 Ответ

1 голос
/ 26 января 2020

Один запрашивает показания гироскопа, другие показания акселерометра, это разные вещи. То же самое касается вашего другого вопроса: 0b1101000 - это адрес MPU, а 0x3B - это адрес регистра акселерометра (поэтому не тот же самый), вам, вероятно, следует прочитать о библиотеке, которую вы используете для этого, или, если вы не используете какую-либо библиотеку, вы можете найти немногие в опции библиотеки Arduino (как бы она ни называлась, не использовали ее некоторое время).

Если вы не хотите использовать библиотеку, прочитайте таблицу данных вашего MPU для лучшего понимания.

В зависимости от того, будет ли это серия MPU6, серия MPU9 или, возможно, от другого производителя, все изменится, но большинство из них уже создали библиотеки, я бы посоветовал вам использовать их, если вы не заинтересованы в этом работа с нуля, которая может быть довольно сложной очень быстро.

...