用c++读三个mcp3008 一个Raspberry Pi3
Read three mcp3008 with a Raspberry Pi 3 using c++
我正在使用 WiringPi 库(在 C++ 中)通过 SPI 连接 MCP3008 ACD,但我需要读取 24 个模拟输入,所以我必须能够连接 3 个不同的 MCP3008。我不知道如何使用 WiringPi 库管理 3 个不同的奴隶。
回答:(我没有足够的声誉来回答我自己的问题所以我把它留在这里以防它对某人有用)
使用 mcp3004 库,您可以使用 SPI 接口与 de AD 转换器通信。
你只需要将MISO、MOSI、SCLK和CE0连接到对应slave的pin上即可。主要问题是我需要使用 3 个不同的奴隶,但解决方案很简单。所有的从机都需要有相同的 MOSI、MISO、SCLK,所以你应该将这些引脚全部连接到树莓派的 MOSI、MISO 和 SCLK 引脚。
现在你必须让CE0 raspberry pin连接到你想要使用的slave,而其他slave CS pin必须被拉高(因为它是低电平有效,你希望它们处于非活动状态).我发现这样做的方法是使用 OR-GATES(2 输入)所以我为每个从属使用一个门。其中一个输入是 CE0 覆盆子引脚(其他从机相同),另一个输入是 GPIO 引脚(每个从机不同),OR-GATE 输出将连接到从机 selection pin(其他从机也一样)。
这个想法是,如果你想使用从机 1,你应该将 pin1 拉低 digitalWrite(Pin1,LOW);
,将其他引脚拉高 digitalWrite(Pin2,HIGH); digitalWrite(PINn,HIGH)
。这样做可以使第一个从属 CS 引脚具有 de CE0 的值,而其他的具有高电平(因此第一个从属是 selected,其他是未selected)。
你不能简单地将你想要的一个拉低 select 而将另一个拉高,因为 SPI 使用特定的时间
特别感谢@Ptaq666、@Jespe Juhl 和其他阅读问题并帮助我解决问题的人。
如果我正确理解你的问题是:"How to use one SPI master device connected to 3 slave devices",解决方法如下:
- 将您的主 SCK 连接到所有 3 个从设备 SCK
- 将你的主控 MOSI 连接到每个从控的 MOSI
- 将每个从属的 MISO 连接到您的单个主 MISO
- 使用通用 IO(当然是输出)信号作为 SS (SlaveSelect) 与特定从属设备进行 enable/disable 通信。您甚至可以为此使用您的 WiringPi
void digitalWrite (int pin, int value);
。
在 Internet 上有很多关于这个主题的原理图、图表和教程。 RPi 上的 SPI 与任何其他 SPI 没有什么不同。
如果您在配置、通信等方面遇到任何软件问题 --> post 您问题中的一些代码可以显示您已经尝试过的内容。
我正在使用 WiringPi 库(在 C++ 中)通过 SPI 连接 MCP3008 ACD,但我需要读取 24 个模拟输入,所以我必须能够连接 3 个不同的 MCP3008。我不知道如何使用 WiringPi 库管理 3 个不同的奴隶。
回答:(我没有足够的声誉来回答我自己的问题所以我把它留在这里以防它对某人有用)
使用 mcp3004 库,您可以使用 SPI 接口与 de AD 转换器通信。
你只需要将MISO、MOSI、SCLK和CE0连接到对应slave的pin上即可。主要问题是我需要使用 3 个不同的奴隶,但解决方案很简单。所有的从机都需要有相同的 MOSI、MISO、SCLK,所以你应该将这些引脚全部连接到树莓派的 MOSI、MISO 和 SCLK 引脚。
现在你必须让CE0 raspberry pin连接到你想要使用的slave,而其他slave CS pin必须被拉高(因为它是低电平有效,你希望它们处于非活动状态).我发现这样做的方法是使用 OR-GATES(2 输入)所以我为每个从属使用一个门。其中一个输入是 CE0 覆盆子引脚(其他从机相同),另一个输入是 GPIO 引脚(每个从机不同),OR-GATE 输出将连接到从机 selection pin(其他从机也一样)。
这个想法是,如果你想使用从机 1,你应该将 pin1 拉低 digitalWrite(Pin1,LOW);
,将其他引脚拉高 digitalWrite(Pin2,HIGH); digitalWrite(PINn,HIGH)
。这样做可以使第一个从属 CS 引脚具有 de CE0 的值,而其他的具有高电平(因此第一个从属是 selected,其他是未selected)。
你不能简单地将你想要的一个拉低 select 而将另一个拉高,因为 SPI 使用特定的时间
特别感谢@Ptaq666、@Jespe Juhl 和其他阅读问题并帮助我解决问题的人。
如果我正确理解你的问题是:"How to use one SPI master device connected to 3 slave devices",解决方法如下:
- 将您的主 SCK 连接到所有 3 个从设备 SCK
- 将你的主控 MOSI 连接到每个从控的 MOSI
- 将每个从属的 MISO 连接到您的单个主 MISO
- 使用通用 IO(当然是输出)信号作为 SS (SlaveSelect) 与特定从属设备进行 enable/disable 通信。您甚至可以为此使用您的 WiringPi
void digitalWrite (int pin, int value);
。
在 Internet 上有很多关于这个主题的原理图、图表和教程。 RPi 上的 SPI 与任何其他 SPI 没有什么不同。
如果您在配置、通信等方面遇到任何软件问题 --> post 您问题中的一些代码可以显示您已经尝试过的内容。