Bonjour,
Je dois réaliser une mesure de tension différentielle avec l'AD7714 sauf que voilà j'ai tout câblé et lorsque je lance mon programme il ne fait pas la mesure.
Cela fait maintenant plusieurs semaines que je butte sur ce problème pouvez-vous m'aidez?
Voilà ce que je fais dans mon main:
Code:init_adc (1); valeur=lire_adc (1); et ici les fonctions utilisées: volatile unsigned long valeur; volatile unsigned char octet1; volatile unsigned char octet2; volatile unsigned char octet3; volatile unsigned char val; volatile unsigned char i; /*****************************************ENVOIE D'UN CHARACTERE****************************************/ char sendSPI_ch(char carac) { while (SPI1S_SPTEF==0); // On attend que le buffer d'émission soit vide SPI1D=carac; // Envoi d'un charactère while (SPI1S_SPRF==0); // On attend que le buffer de reception soit plein carac=SPI1D; // Récupération d'un charactère return (carac); } /************************************ENVOIE D'UNE CHAINE DE CHARACTERE***********************************/ void sendSPI_string(char*chaine) // l'argument est un pointeur vers un charactère de la chaîne { char index=0; while(chaine[index]!=0); // tant que l'on est pas en fin de chaîne { sendSPI_ch(chaine[index]); // On envoie le charactère pointé par l'index index++; // Et l'on incrémente l'index } } /************************ Definition writetoreg**************************/ void writetoreg (char val) { cs_adc=0; SPI1D=val; while (SPI1S_SPRF==0); // On attend que le buffer de reception soit plein cs_adc=1; } /************************ Definition read_reg**************************/ void read_reg (int long_reg) { while(drdy==0); while (drdy==1); cs_adc=0; i=0; for(i=0;i<long_reg;i++) { SPI1D=0; while (SPI1S_SPRF==0); // On attend que le buffer de reception soit plein if(i==0) { octet1=SPI1D; } if(i==1) { octet2=SPI1D; } if(i==2) { octet3=SPI1D; } } } /************************ Definition init_adc**************************/ void init_adc (char voie) { if(voie==1) { writetoreg(0x24); writetoreg(0x4F); writetoreg(0x34); writetoreg(0xA0); writetoreg(0x14); writetoreg(0x00); } if(voie==2) { writetoreg(0x25); writetoreg(0x4F); writetoreg(0x35); writetoreg(0xA0); writetoreg(0x15); writetoreg(0x00); } } /************************ Definition lire_adc**************************/ long lire_adc (char voie) { if(voie==1) { writetoreg(0x5C); read_reg(3); } if(voie==2) { writetoreg(0x5D); read_reg(3); } valeur=octet1*35536+octet2*256+octet1; return(valeur); }
Je mets aussi mon schema en pièce jointe.
Merci de votre aide.
-----