2016-03-26 102 views
0

我打算做一個簡單的C++循環程序來通過SPI從MCP3004讀取模擬值。我正在使用wiringPi庫來使代碼超級清晰。函數工作正常,我得到正確的數字,但不是在一個循環中。我只獲得3次第一次讀取,之後只有0次。我查看了wiringPi參考文獻,libs和我找不到任何可以幫助我的東西。我試圖改變延遲時間,但仍然只獲得3個第一合適的值。也許有人有這樣的問題,並知道答案?非常感謝任何幫助。MCP3004 -spi analogread wiringPi-只有三個正確的讀數

#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

回答

1

我使用mcp3008所有這些是8 ADC版本的時間在SPI從Windows和我沒有任何問題。

首先你是從mcp3008讀取端口100。

wart=analogRead(100); 

你需要從mcp3004.cpp

的提供的代碼是C#代碼從MCP3008

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); 
     } 
讀取值