我写使用一些简单的代码MicroPython上Digistump橡树,这基本上是一个ESP8266接口板运行.我试图了解通过i2c定期读取传感器时看到的行为.
下面的代码(读取ACCEL_XOUT_H和ACCEL_XOUT_L寄存器的值)工作得很好:
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
Run Code Online (Sandbox Code Playgroud)
(该print语句只是从两个补码执行转换.)
正如预期的那样,当我移动imu时,打印出的加速度计值大致实时变化.
但如果我在循环中引入延迟,例如...
>>> import time
>>> from machine import Pin, I2C
>>> bus = I2C(scl=Pin(2), sda=Pin(0))
>>> while True:
... h, l = bus.readfrom_mem(0x68, 0x3b, 2)
... print (-((((h<<8)+l)^0xFFFF) + 1) if (h & (1<<7)) else (h<<8)+l)
... time.sleep(1) …Run Code Online (Sandbox Code Playgroud) 我一直在研究一些 i2c 示例。把它全部插在一起,我发现我需要安装 i2c-tools 包,然后使用 raspi-config 启用 I2C 系统。
WiringPi gpio 命令有一个 i2cdetect 命令的快捷方式,运行它会给出
前 3 周一切正常,检测到 68。我不明白是什么问题!!!谁能帮我解决这个问题。
MPU-6050 是一种流行的模块,包含温度传感器、加速度计和陀螺仪。用户可以通过 I2C 或 SPI 读取传感器信息。有两个文件可公开用于从 IC 寄存器中读取数据。这些是:
由于总线通信延迟,通过 I2C 读取 IMU 的各个寄存器会使样本随时间偏移。因此,传感器的 X、Y 和 Z 轴寄存器的顺序读取不同步。为了解决这个问题,该器件提供了一个 1024 字节的内部 FIFO 队列。配置为推送到队列的数据以采样率推送到一起。因此读取 FIFO 会产生同步数据。
见(2),第 7.17 节:
MPU-60X0 包含一个 1024 字节的 FIFO 寄存器,可通过串行接口访问。FIFO 配置寄存器决定将哪些数据写入 FIFO。可能的选择包括陀螺仪数据、加速度计数据、温度读数、辅助传感器读数和 FSYNC 输入。FIFO 计数器会跟踪 FIFO 中包含多少字节的有效数据。FIFO 寄存器支持突发读取。中断函数可用于确定新数据何时可用
数据表指定为了从 FIFO 读取,您必须执行以下操作:
0x6A,文档 (1),第 4.29 节)0x23,文档 (1),第 4.7 节)。我通过分别设置第 6、5、4 和 3 位来启用XG_FIFO_EN、YG_FIFO_EN、ZG_FIFO_EN和 …