2016-03-26 1 views
0

Je suis impatient de faire un simple programme en boucle C++ pour lire les valeurs analogiques de MCP3004 via SPI. J'utilise des bibliothèques de wiringPi pour rendre le code super clair. Les fonctions fonctionnent bien, j'obtiens des nombres corrects mais pas dans une boucle. Je reçois seulement 3 premières lectures et après cela seulement 0. J'ai regardé dans les références de câblage, libs et je n'ai rien trouvé qui m'aiderait. J'ai essayé de changer les temps de retard mais je n'ai toujours que 3 premières valeurs correctes. Peut-être que quelqu'un a eu ce genre de problème et connaît la réponse? J'apprécierais vraiment toute aide.MCP3004 -spi analogread wiringPi- seulement trois bonnes lectures

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

ce code me donne pour exemple .: Valeur: 1004, Valeur: 1003, Valeur: 500, et que seule valeur: 0

Répondre

1

J'utilise le MCP3008 tout le temps qui est la version 8 ADC dans SPI de Windows et je n'ai aucun problème.

D'abord lisez-vous vraiment le port 100 à partir du mcp3008.

wart=analogRead(100); 

Vous devez fournir le code de mcp3004.cpp

Le est le code C# pour lire une valeur de la 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); 
     }