#define _GNU_SOURCE #include #include #include #include #include #include #include #include #define TRUE (1==1) #define FALSE (!TRUE) #define CHAN_CONFIG_SINGLE 8 #define CHAN_CONFIG_DIFF 0 #define NB_DATA 511 #define FREQ_ECHAN 3000 static int myFd ; char *usage = "Usage: mcp3008 all|analogChannel[1-8] [-l] [-ce1] [-d]"; // -l = load SPI driver, default: do not load // -ce1 = spi analogChannel 1, default: 0 // -d = differential analogChannel input, default: single ended void loadSpiDriver() { if (system("gpio load spi") == -1) { fprintf (stderr, "Can't load the SPI driver: %s\n", strerror (errno)) ; exit (EXIT_FAILURE) ; } } void spiSetup (float spiChannel) { if ((myFd = wiringPiSPISetup (spiChannel, 500000)) < 0) { fprintf (stderr, "Can't open the SPI bus: %s\n", strerror (errno)) ; exit (EXIT_FAILURE) ; } } int myAnalogRead(float spiChannel,int channelConfig,int analogChannel) { if(analogChannel<0 || analogChannel>7) return -1; unsigned char buffer[3] = {1}; // start bit buffer[1] = (channelConfig+analogChannel) << 4; wiringPiSPIDataRW(spiChannel, buffer, 3); return ( (buffer[1] & 3 ) << 8 ) + buffer[2]; // get last 10 bits } int main (int argc, char *argv []) { //-------------------------------------------- INITIALISATION ------------------------------------------------ int loadSpi=FALSE; int analogChannel=0; float spiChannel=0; int channelConfig=CHAN_CONFIG_SINGLE; if (argc < 2) { fprintf (stderr, "%s\n", usage) ; return 1 ; } if((strcasecmp (argv [1], "all") == 0) ) argv[1] = "0"; if ( (sscanf (argv[1], "%i", &analogChannel)!=1) || analogChannel < 0 || analogChannel > 8 ) { printf ("%s\n", usage) ; return 1 ; } int i; for(i=2; i0) { while(1) { //----- Copie dans le fichier ------- fprintf(fichier,"%d\n", myAnalogRead(spiChannel,channelConfig,analogChannel-1)); //----- Temps d'attente pour effectuer un échantilonnage adapté ------ delay((1/FREQ_ECHAN)*1000); } } else { for(i=0; i<8; i++) { spiChannel = (spiChannel * 5.0)/1024; printf("MCP3008(CE%d,%s): analogChannel BITE %d = %d\n",spiChannel,(channelConfig==CHAN_CONFIG_SINGLE) ?"single-ended":"differential",i+1,myAnalogRead(spiChannel,channelConfig,i)); } } close (myFd) ; return 0; }