问题标签 [i2c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
arduino - Arduino中断处理
背景
我需要一个在“Arduino 兼容”chipKit UNO32 板上运行的数据记录应用程序,并带有连接的传感器。数据应记录到“Arduino Wireless SD shield”上的 SD 卡中。传感器通过 I2C 连接。
我的问题是,当我使用 Arduino SD 库时,写入速度很慢:每次 print() 操作需要 25 毫秒,这给了我最多 40 赫兹的频率,这与我传感器的 100-800 赫兹数据速率相比是可笑的。
我的错误解决方案
幸运的是,传感器配备了可存储 32 个传感器值的片上 FIFO。这意味着我可以毫无问题地达到至少 200Hz,因为填充 FIFO 的时间远大于写入卡的时间。但我仍然很想达到至少 400Hz,所以我想我应该有以下设置:
- 告诉传感器将数据放入 FIFO
- 当 FIFO 快满时,传感器会触发中断(传感器会这样做,并且有效,我可以捕获中断)
- 当 Arduino 接收到中断时,它会轮询传感器的数据(通过 I2C)并将数据存储在 SRAM 的缓冲区中。
- 当 SRAM 缓冲区已满时,将其内容写入 SD 卡。
不幸的是,这似乎不起作用,因为处理 I2C 的 Arduino Wire 库使用中断,并且不能从中断处理程序中调用。我试过了,它冻结了微控制器。
我的问题
似乎还有其他不依赖中断的 Arduino I2C 库。我应该尝试这条路线吗?
还是我的思维方式(在 ISR 中获取大量数据)从一开始就不好?我应该采取另一种方法吗?
android - Android I2C 读/写速度
我一直在对通过 I2C 接口与设备通信的应用程序执行时序测量。我发现单个 I2C 读取和写入需要大约 450us 才能执行。我已验证 I2C 接口以 400KHz 运行,因此我预计单个字节上的 I2C 操作大约需要 170us。在 android 中使用 I2C 驱动程序是否会产生超过 250us 的开销?有谁知道提高这个速度的方法。
提前致谢。
马克。
c - 从 i2c 地址访问值
你可以看看这个网站:http ://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NSK1042来更好地理解我在说什么。例如,该网站显示:传感器的 i2c 地址为 0x10,其中的值表显示为:
如何在 C 中访问这些值?谢谢。
linux - Linux 内核驱动程序异步 I2C(在 Raspberry PI 上)
我想为传感器设备编写 I2C 驱动程序。有一个非零转换时间,我不想浪费内核时间等待和轮询忙状态,直到设备忙。
我以为我设置了一个计时器并不时调用更新。
然而,当执行到任何 I2C 函数时,整个系统都会冻结。
我准备了一个非常简化的示例,但它不起作用。一切都很好,直到 I2C 访问。
没有 I2C 的东西,代码就可以工作。没有定时器的东西,I2C 就可以工作。
我没有找到如何以异步(非阻塞)方式使用 I2C。
c - 此行有多个标记 - 语法错误(日食)
我为 i2c 创建了一个头文件,来自 Peter Fleury。我在 Eclipse 中重写并在下面的列表程序的第二行中收到错误警告“此行有多个标记 - 语法错误 - 预期标识符或 '(' 在 'unsigned' 之前”
有人可以帮助我吗?
c++ - C i2c芯片读取MCP9800突然开始失败
我有一些代码:
它是通过 i2c 从 MCP9800 读取信息的代码。很抱歉包含它,但也许它与它有关。
该函数在大约十几个周期内运行良好,直到它突然开始出现不正确的值。但有一些奇怪的差异。
1.如果计算如下
我得到这个输出:
在职的
失败
所以一旦它开始失败,我可以看到过滤值的输出不正确。
2.如果计算是:
所以根本不使用过滤,输出是这样的:
在职的
失败
有关不正确的输出,请参见带星号的数字。由于某种原因,当您不使用过滤值时,其他数字也开始不正确!一直回到我从 i2c 芯片中取出的字节。
所以起初我看到过滤可能无法正常工作。但是删除它似乎也会使原始未过滤值不正确。execFilter() 所做的只是一些平均,以防止大的随机变化。
此外,我还通过使用 i2cget 的 CLI 编写了一个脚本,它的返回值非常一致。没有崩溃或意外的值。
为什么会发生这种情况?
c++ - 这段代码是如何工作的,它叫什么
有问题的代码是“?某事:something_else”。通常在下面的代码中,您可以输入 I2C_SLAVE 或 I2C_SLAVE_FORCE。但是这段代码做了别的事情。它是如何工作的,它究竟是做什么的?
c++ - i2c smbus 过滤器函数破坏变量
我有一个简单的功能
它接受一个从smbus读取的值,并返回一个用它收到的最后一个值过滤的值。这是 printf 语句的输出
那么发生了什么?为什么它仍然收到相同的输入,但突然变得疯狂?除了这个函数,我没有在任何地方设置 fValue。
我使这些变量(y 和 yy)非常内化到函数中,因为我担心它们会以某种方式被修改或与其他东西发生冲突。但现在他们完全是本地的,我不知道发生了什么。我正在使用 C++ 类,所以无论如何这都应该在它自己的空间中。
EDIT: In fact if I let it run a little longer the variables I keep for the different i2c Chip addresses also become corrupted to -1075766188. What the hell?
embedded - I2C 驱动程序移植问题
我正在将 I2C 驱动程序从 Atmel AVR32 U3 移植到 Energy Micro EFM32GG Cortex-M3 设备。驱动程序使用 Atmel BSP 与 I2C 总线通信,为它提供从设备的地址、寄存器地址和数据。
Energy Micro BSP 没有实现寄存器地址。我的问题是,根据标准的I2C协议,我可以只添加寄存器地址作为发送数据的第一个字节吗?
arduino - 飞思卡尔压力传感器 MPL3115A2 I2C 与 Arduino 通信
有人使用过 MPL3115A2 飞思卡尔 I2C 压力传感器吗?我需要在有关 Arduino UNO r3 的项目中使用它,但我无法正确地在它们之间进行通信。这是我的代码:
我收到的数据是:05FB9(例如)。当我更改寄存器地址(参见 参考资料Wire.write((byte)0x01); // Data_PMSB_reg address
)时,我希望数据会发生变化,但事实并非如此!你能给我解释一下吗?您可以在 NXP 网站上找到文档和数据表。
我无法正确理解他们如何相互交流。我在 Arduino 和其他一些具有相同通信协议的 I2C 传感器之间进行了通信,没有任何问题。