Bonjour,
Je suis actuellement sur un projet qui met en œuvre un*CAN (convertisseur analogique numérique)*MCP3208 et une carte Raspberry Pi 2. Pour ce projet il me faut récupérer une tension aux bornes du CAN sur ma Raspberry et à terme stocker ces valeurs dans un fichier. Pour l'instant j'ai mis en œuvre ce code qui est sensé renvoyer dans une consoles les valeurs de la tension. Cependant, lorsque je lance l'exécutable créé une console s'ouvre et se referme aussitôt sans me renvoyer de valeurs... Si cela vous inspire quoi que ce soit n'hésitez pas à m'en faire part.
Merci d'avance,
Tom.
Mon code principal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <stdio.h> #include <wiringPi.h> #include <wiringPiSPI.h> #include <stdint.h> #include <fcntl.h> #include <sys/ioctl.h> #include <linux/spi/spidev.h> #include "mcp3208.h" #define SPI_SPEED 1000000 #define channel1 1 float resultat = 0; int main (void) { if(wiringPiSetup ()<0) printf("erreur wiringPi\n"); if(wiringPiSPISetup (channel1, SPI_SPEED)<0) //initialisation du SPI sur le "channel0" et a 1MHz printf("erreur wiringPi SPI\n"); while(1){ resultat = (float)conversion_mcp3208(channel1, voie_1); resultat = resultat * 5 / 4096; system("clear"); printf("tension = %5.3f V\n",résultat); delay(100); } return 0 ; }
Et le code de mcp3208.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 /* MCP3208.h ** Controle un MCP3208 avec la librairie wiringPi sur Raspberry Pi */ #define voie_1 0 #define voie_2 1 #define voie_3 2 #define voie_4 3 #define voie_5 4 #define voie_6 5 #define voie_7 6 #define voie_8 7 int conversion_mcp3208(uint8_t adc, uint8_t num_voie); int conversion_mcp3208(uint8_t adc, uint8_t num_voie){ int conversion = 0, configuration = 0; unsigned char spiData[3] ; configuration = (num_voie<<6)|0x0600; // configuration du mumero de voie & bit de start et single mode Ã* 1 (voir documentation MCP3208) spiData[0] = configuration>>8; // les 8 bits de msb de configuration sont ranges dans spiData[0] spiData[1] = configuration; // les 8 bits de lsb de configuration sont ranges dans spiData[1] spiData[2] = 0x00; // spiData[2] permet juste de generer la clock pour recuperer le resultat de conversion wiringPiSPIDataRW (adc, spiData, 3); // envoi des trois octets via le spi conversion = (int)(((spiData[1]&0x0F)<<8)|spiData[2]); // masquage et mise en forme du resultat de conversion (0 a FFF) return conversion; }
Partager