Bonjour,
Voila je suis sur un projet dont le but est de convertir 3 tensions analogiques en Numériques et de les transmettre à un PC via un port RS232.
J'ai donc réalisé un programme qui fonctionne mais mon souci est que je suis obligé d'insérer un délais de 10 us après chaque conversion car sinon le résultat obtenue me donne un peu n'importe quoi.
Voici mon code :
Si quelqu'un a déjà réalisé ce genre d'application ou a une idée pour enlever ce delay pour que ça fonctionne correctement, je suis preneur.Code:void init_ADC() { ADPCFG = 0xF1FF; // all PORTB = Digital // RB10 to RB8 = analog(0) ADCON1 = 0x00E0; // SSRC bit = 111 implies internal // internal counter ends sampling and starts conversion (auto convert) ADCHS = 0x0009; // Connect RB9/AN9 as CH0 input // RB9/AN9 is the input ADCSSL = 0; // ADCON3 = 0x1F02; // Sample time = 31Tad, Tad = internal 2 Tcy ADCON2 = 0; // use MUX A // one 16-word buffer // interrupt to each sample/convert sequence ADCON1bits.ADON = 1; // enable module ADC } main() { TRISBbits.TRISB9 = 1; // Port RB9 mis en entree pour la phase1 TRISBbits.TRISB10 = 1; // Port RB10 mis en entree pour la phase2 TRISBbits.TRISB11 = 1; // Port RB10 mis en entree pour la phase3 LCD_Setup(); LCD_HomeClear(); valeur1 = 0; valeur2 = 0; valeur3 = 0; UART1_Init(); init_ADC(); while(1) { /************************************** * CONVERSION PIN RB9 * **************************************/ ADCHS = 0x0009; // Selection de la broche RB9 ADCON1bits.SAMP = 1; // demarrer l'échantillonnage // Après 31 Tad faire la conversion while (!ADCON1bits.DONE); // Attend la fin de la conversion valeur1 = ADCBUF0; // lecture de la valeur converti Delay_Us(10); /************************************** * CONVERSION PIN RB10 * **************************************/ ADCHS = 0x000A; // Selection de la broche RB10 ADCON1bits.SAMP = 1; // demarrer l'échantillonnage // Après 31 Tad faire la conversion while (!ADCON1bits.DONE); // Attend la fin de la conversion valeur2 = ADCBUF0; // lecture de la valeur converti Delay_Us(10); /************************************** * CONVERSION PIN RB11 * **************************************/ ADCHS = 0x000B; // Selection de la broche RB11 ADCON1bits.SAMP = 1; // demarrer l'échantillonnage // Après 31 Tad faire la conversion while (!ADCON1bits.DONE); // Attend la fin de la conversion valeur3 = ADCBUF0; // lecture de la valeur converti Delay_Us(10); /************************************** * ENVOIE DES DONNEES AU PC * **************************************/ UART1_SendByte('P'); UART1_SendInt(valeur1); UART1_SendByte('P'); UART1_SendInt(valeur2); UART1_SendByte('P'); UART1_SendInt(valeur3); } }
Merci pour vos réponses.
-----