【问题标题】:MCP3004 -spi analogread wiringPi- only three good readsMCP3004 -spi 模拟读取接线Pi- 只有三个好的读取
【发布时间】:2016-03-26 11:28:22
【问题描述】:

我正在尝试制作一个简单的 C++ 循环程序来通过 SPI 从 MCP3004 读取模拟值。我正在使用wiringPi 库来使代码超级清晰。函数工作正常,我得到正确的数字但不是循环。我只有 3 次第一次读取,之后只有 0 次。我查看了 WiringPi 引用、库,但没有发现任何对我有帮助的东西。我试图改变延迟时间,但仍然只得到 3 个第一个正确的值。也许有人遇到过这种问题并且知道答案?非常感谢任何帮助。

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <mcp3004.h>

int main()
{
    int wart;
    wiringPiSetupGpio();
    mcp3004Setup (100,0);
    while(true)
    {
        for(int i=0;i<4;i++)
        {
            wart=analogRead(100);
            printf("Value: %d\n", wart);
            delay(1000);
        }
    delay(5000);
    }
}

这段代码给了我例如:值:1004,值:1003,值:500,而不仅仅是值:0

【问题讨论】:

    标签: c++ raspberry-pi spi wiringpi


    【解决方案1】:

    我一直在使用 mcp3008,它是 Windows SPI 中的 8 ADC 版本,我没有任何问题。

    首先你真的是从 mcp3008 读取端口 100。

    wart=analogRead(100);
    

    您需要提供来自 mcp3004.cpp 的代码

    这是从 MCP3008 读取值的 C# 代码

    private List<int> _channelInSingleMode = new List<int>() {
                0x08,
                0x09,
                0x0A,
                0x0B,
                0x0C,
                0x0D,
                0x0E,
                0x0F
            };
    
            public int Read(int port)
            {
                if ((port > 7) || (port < 0))
                    throw new ArgumentException(string.Format("Invalid analog port {0}", port));
    
                const byte junk = (byte)0;
                var port2       = (byte)((_channelInSingleMode[port] << 4));
                var r1          = this._spiEngine.Transfer(new List<Byte>() { 0x1, port2, junk });
    
                return ValidateOperation(r1);
            }
    

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多