gpt4 book ai didi

c++ - Raspberry Pi 和 I2C in c++ with wiringPi for PCF8591

转载 作者:太空宇宙 更新时间:2023-11-04 13:38:23 24 4
gpt4 key购买 nike

我正在尝试了解 I2C 总线,以便在我的 Raspberry Pi B+ 上使用 wiringPi C 库控制 PCF8591 D/A 转换器。

我写了一个测试代码(用 C++ 编写),它运行良好,但我不知道我是否以正确的方式进行。该程序每 0.5 秒读取并显示 4 个模拟输入值,并将输出相应地设置为 4 个输入引脚的平均值。

#include <iostream>
#include <wiringPi.h>
#include <wiringPiI2C.h>

using namespace std;

int readInput(int fd, int reg)
{
wiringPiI2CReadReg8(fd, reg);
return wiringPiI2CReadReg8(fd, reg);
}

int main()
{
wiringPiSetupGpio();
int dacModule = wiringPiI2CSetup(0x48);
if (dacModule < 0)
{
cout << "I2C Setup Error" << endl;
return 0;
}

int i;
int A[4] = {0, 0, 0, 0};
int A_Reg[4] = {0x40, 0x41, 0x42, 0x43};

while (1)
{
for (i=0;i<4;i++) A[i] = readInput(dacModule, A_Reg[i]);

wiringPiI2CWriteReg8(dacModule, 0x40, (A[0]+A[1]+A[2]+A[3])/4);

cout << endl;
for (i=0;i<4;i++) cout << i << " : " << A[i] << endl;
delay(500);
}
return 0;
}

我的问题是:

  • 我注意到我需要调用 wiringPiI2CReadReg8 函数两次才能读取正确的输入值,为什么? (如果我不这样做,该函数将返回之前的输入值)。
  • 我读到 wiringPi 库中有一个专门为 PCF8591 制作的特殊模块(This one),这两种方法(特殊库与通用 I2C 库)之间是否存在任何性能差异?

非常感谢您的帮助/反馈。

最佳答案

回答您的第一个问题:是的,这很正常。如果您查看数据表(可以找到 here),您将在第 8 页的图 8 中看到读取操作正在触发新的转换,但将输出上一个转换的结果.因此,如果您想通过“强制”两个连续的读取操作一个接一个地了解当前 转换,您确实需要读出 2 个字节。它也在下一页的第二段中再次提到。

关于您的第二个问题,我还没有使用该库的经验。但源代码是免费提供的,因此您可以检查并将您的代码/方法与您在其中找到的内容进行比较。

关于c++ - Raspberry Pi 和 I2C in c++ with wiringPi for PCF8591,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com