米尔MYD-JX8MMA7 开发板引出了J13外部GPIO排针,设计参考树莓派的40pinGPIO排针,排针上集成了两组I2C接口,分别是I2C3和I2C4,详情看原理图:
这两组I2C接口分别对应了/dev设备目录下的i2c-2和i2c-3:
那么,我们就可以通过i2cdetect软件和ioctl()系统接口函数进行对I2C设备的读写了,我这边直接接入了一个MPU6050的模块:
可以使用i2cdetect看到接入到i2c-2设备中的MPU6050,设备地址为0x68:
编写MPU6050的初始化相关代码:
- #define I2C_INTER_DEVICE "/dev/i2c-2"
- #define PWR_MGMT_1 0x6B
- #define SMPLRT_DIV 0x19
- #define CONFIG 0x1A
- #define GYRO_CONFIG 0x1B
- #define INT_ENABLE 0x38
- void MPU6050_Init()
- {
- uint8_t write_data[1];
- write_data[0] = 0x07;
- I2C_Device_Write (0x68 , write_data , 1 , SMPLRT_DIV);
- //Write to sample rate register
- write_data[0] = 0x01;
- I2C_Device_Write (0x68 , write_data , 1 , PWR_MGMT_1);
- // Write to power management register
- write_data[0] = 0;
- I2C_Device_Write (0x68 , write_data , 1 , CONFIG);
- // Write to Configuration register
- write_data[0] = 24;
- I2C_Device_Write (0x68 , write_data , 1 , GYRO_CONFIG);
- // Write to Gyro Configuration register
- write_data[0] = 0x01;
- I2C_Device_Write (0x68 , write_data , 1 , INT_ENABLE);
- //Write to interrupt enable register
- }
复制代码
初始化完毕之后便可在程序中循环读取MPU6050的加速度和陀螺仪数据:
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , ACCEL_XOUT_H);
- accx = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , ACCEL_YOUT_H);
- accy = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , ACCEL_ZOUT_H);
- accz = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , GYRO_XOUT_H);
- gyrox = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , GYRO_YOUT_H);
- gyroy = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
- I2C_Device_Read(0x68 , mpu6050_read_data , 2 , GYRO_ZOUT_H);
- gyroz = mpu6050_read_data[0] << 8 | mpu6050_read_data[1];
复制代码
再通过图像显示引擎将结果以3D模型形式展现出来:
0
|
2023-1-22 15:10:12
评论
淘帖0
|
|
|