2016-03-26 3 views
0

Я пытаюсь сделать простую программу цикла C++ для чтения аналоговых значений из MCP3004 через SPI. Я использую modulesPi libs, чтобы сделать код супер понятным. Функции работают нормально, я получаю правильные числа, но не в цикле. Я получаю только 3 первых чтения, а после этого только 0. Я смотрел в ссылках на pi-ссылки, 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 АЦП в SPI из Windows, и у меня нет никаких проблем.

Сначала вы действительно читаете порт 100 из mcp3008.

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