bonjour à tous,
je travaille avec un microcontroleur Dspic33f256jp710a. j'ai un ADCque j'ai configuré pour quatre channels. chaque channel doit récupérer une tension. je voulais savoir comment faire pour récupérer la valeur de l'ADC pour les 4 channels. J'ai essayé ADC1BUF0 mais il me donne toujour la même valeur pour tous channels. et lorsque j'utilise ADC1BUF1, ADC1BUF2, ADC1BUF3 il y a des erreurs sur mon programme car ces valeurs n'existe dans le µc. j'ai regardé les exemples de Microchip mais j'ai rien vu.
Merci de votre aide
voici mon programme
Code:void init_ADC1(void) { AD1PCFGH= 0xFFFF; AD1PCFGL= 0xFF78; // AN0-AN1-AN2-AN7 en entrée analogique AD1CON1bits.ADON=1; // ADC module is operating AD1CON1bits.ADSIDL=0; AD1CON1bits.ADDMABM=0; AD1CON1bits.AD12B=0; //10-bit, 4-channel ADC operation AD1CON1bits.FORM=0; // Integer AD1CON1bits.SSRC=2; // Timer3 for ADC1, Timer5 for ADC2 AD1CON1bits.SIMSAM=0; // Samples multiple channels individually in sequence AD1CON1bits.ASAM=1; // Sampling begins immediately after last conversion AD1CON1bits.SAMP=0; AD1CON1bits.DONE=0; // ADC conversion cycle is completed AD1CON2=0x020C; // VREF+=AVDD et VREF-=AVSS // CHPS<1:0>=10 : conversion de CH0, CH1, CH2 et CH3 // SMPI<3:0>=3 : interruption après l'échantillonnage et les // 4 conversions de CH0, CH1, CH2 et CH3 // Buffer 16 bits AD1CON3=0x001F; // SAMC<4:0>=0 : sans effet // ADRC=0 -> Horloge système // ADCS<7:0>=1 -> ADC conversion Clock: Tad=2*Tcy soit 50nS // ADC conversion Time for 10-bit Tconv = 12*TAD = 12*50= 600ns AD1CHS123=0x0000; // Entrée - de CH1, CH2, CH3 = VREF- // Entrée + de CH1 = AN0 // CH2 = AN1 // CH3 = AN2 AD1CHS0=0x0007; // entrée - de CH0 = VREF- // entrée + de CH0 = AN7 // AD1CSSH=0xFFFF; AD1CSSL = 0x0087; // AN0-AN1-AN2-AN7 IFS0bits.AD1IF=0; // Clear ISR flag IEC0bits.AD1IE=1; // Enable interrupts IPC3bits.AD1IP=7; // priority interrupt AD1CON1bits.ADON=1;// Turn ADC ON }Code:/*void __attribute__((__interrupt__,__auto_psv__)) _ADC1Interrupt(void) { ADC1_value[0]= ADC1BUF0; //Copy value from ADC buffer ADC1_value[1]= ADC1BUF0; ADC1_value[2]= ADC1BUF0; tension_a= ((ADC1_value[0])*Gain); tension_b= ((ADC1_value[1])*Gain); tension_c= ((ADC1_value[2])*Gain); } flag_ADC1 = 1 ; _LATA7=~_LATA7; _AD1IF = 0; AD1CON1 = 0x0044; // Must cancel current sampling AD1CON1 = 0x8044; // Re-set ADC configuration for triggered sampling }*/
-----