0

我正在使用 WiringPi 库(在 c++ 中)通过 SPI 连接 MCP3008 ACD,但我需要读取 24 个模拟输入,因此我必须能够连接 3 个不同的 MCP3008。我不知道如何使用 WiringPi 库管理 3 个不同的从站。

回答:(我没有足够的声誉来回答我自己的问题,所以我把它留在这里以防它对某人有用)

使用 mcp3004 库,您可以使用 SPI 接口与 de AD 转换器进行通信。

您只需将 MISO、MOSI、SCLK 和 CE0 连接到相应的从机引脚即可。主要问题是我需要使用 3 个不同的奴隶,但解决方案很简单。所有从机都需要具有相同的 MOSI、MISO、SCLK,因此您应该将这些引脚全部连接到覆盆子的 MOSI、MISO 和 SCLK 引脚。

现在您必须将 CE0 覆盆子引脚连接到您要使用的从机,并且必须将其他从机 CS 引脚拉高(因为它是低电平有效并且您希望它们处于非活动状态)。我发现这样做的方法是使用 OR-GATES(2 个输入),所以我为每个奴隶使用一个门。其中一个输入是 CE0 覆盆子引脚(其他从属相同),另一个输入是 GPIO 引脚(每个从属不同),OR-GATE 输出将连接到从属选择引脚(相同对于其他奴隶)。

这个想法是,如果你想使用从机 1,你应该将 pin1 拉低,digitalWrite(Pin1,LOW);其他的拉高digitalWrite(Pin2,HIGH); digitalWrite(PINn,HIGH)。这样做可以使第一个从机 CS 引脚具有 de CE0 的值,而其他引脚具有高电平(因此选择了第一个从机而未选择其他从机)。

您不能简单地将您想要选择的一个拉低,而将另一个拉高,因为 SPI 会以特定的时序拉高和拉低 CS 引脚

特别感谢@Ptaq666、@Jespe Juhl 和其他阅读问题并帮助我解决问题的人。

4

1 回答 1

1

如果我正确理解您的问题是:“如何使用连接到 3 个从设备的一个 SPI 主设备”,这里是解决方案:

  • 将您的主 SCK 连接到所有 3 个从设备 SCK
  • 将您的主 MOSI 连接到每个从属的 MOSI
  • 将每个从属的 MISO 连接到您的单个主 MISO
  • 使用通用 IO(当然是输出)信号作为 SS(SlaveSelect)来启用/禁用与特定从设备的通信。你甚至可以使用你的 WiringPi void digitalWrite (int pin, int value);

在互联网上有很多关于这个主题的示意图、图表、教程。RPi 上的 SPI 与任何其他 SPI 没有什么不同。

如果您在配置、通信等方面遇到任何软件问题 --> 在您的问题中发布一些代码以显示您已经尝试过的内容。

于 2018-04-06T08:38:01.347 回答