2016-03-26 25 views
0

MCP3004 üzerinden SPI üzerinden analog değerleri okumak için basit bir C++ döngü programı yapmak için uğraşıyorum. Ben kodu süper net yapmak için wiringPi libs kullanıyorum. İşlevler iyi çalışıyor, uygun sayılar elde ediyorum ancak bir döngüde değil. Ben sadece ilk 3 okur ve bundan sonra sadece 0 aldım. WiringPi referanslarına baktım, libs ve bana yardım edecek hiçbir şey bulamadım. Gecikme sürelerini değiştirmeye çalıştım ama yine de sadece 3 ilk uygun değeri aldım. Belki birileri bu tür bir problem yaşamış ve cevabı biliyor mu? Herhangi bir yardımı gerçekten takdir ederdim.MCP3004 -spi analogread kabloPi-sadece üç iyi okuma

#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); 
    } 
} 

bu kod örneğin .: Değerinin bana verir:, 1004 Değer: 1003, Değer: 500, ve sadece Değerinizden: 0

cevap

1

Ben mcp3008 8 ADC versiyonu her zaman kullanmak SPI’dan Windows’da ve herhangi bir problemim yok.

Öncelikle gerçekten 100'ü mcp3008'den okuyorsunuz.

wart=analogRead(100); 

Sen 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); 
     } 
arasında bir değer okumak için mcp3004.cpp

kodunu sağlamak için C# kodu ihtiyacımız olan