Bonjour,

je suis en train d'apprendre le pic.
J'ai écris une fonction pour lire la valeur binaire d'une entrée analogique en gros : un ADC.
Voici la fonction.

Code:
unsigned char read_ADC (unsigned char ADC_Channel)
{
  volatile unsigned int ADC_VALUE;
  ADRES = 0x00;     // reset adres register
  ADCON0.GO = 0;
  ADCON0.ADON = 0;
  ADCON0.CHS3 = 0;
  // ADC_Channel 0-> 4, V ref interne = 1.024V
  // ADC_Channel 5, V ref = V alim : 3.3V (sortie du boost)
  switch (ADC_Channel)
  {
    // Temp_Externe
       case 0 :
            {
              TRISA = 0b00000001;
              ADCON0.CHS0 = 0;
              ADCON0.CHS1 = 0;
              ADCON0.CHS2 = 0;
              ADCON1 = 0b000000011;
              FVRCON = 0b110000011;
             }
              break;
              
  //Temp_Interne
       case 1 :
              {
                 TRISA = 0b00000010;
                 ADCON0.CHS0 = 1;
                 ADCON0.CHS1 = 0;
                 ADCON0.CHS2 = 0;
                 ADCON1 = 0b000000011;
                 FVRCON = 0b110000011;
              }
              break;
              
//Luminosite_Ambiante
       case 2 :
            {
               TRISA = 0b00000100;
               ADCON0.CHS0 = 0;
               ADCON0.CHS1 = 1;
               ADCON0.CHS2 = 0;
               ADCON1 = 0b000000011;
               FVRCON = 0b110000011;
            }
              break;
              
  //Luminosite_Externe (Rayonnement solaire)
       case 3 :
            {
               TRISA = 0b00001000;
               ADCON0.CHS0 = 1;
               ADCON0.CHS1 = 1;
               ADCON0.CHS2 = 0;
               ADCON1 = 0b000000011;
               FVRCON = 0b110000011;
            }
              break;

// Vref PWM
       case 4 :
            {
               TRISA = 0b00010000;
               ADCON0.CHS0 = 0;
               ADCON0.CHS1 = 0;
               ADCON0.CHS2 = 0;
               ADCON1 = 0b000000011;
               FVRCON = 0b110000011;
            }
              break;

// Vref Alimentation;
       case 6 :
            {
               TRISE = 0b00000001;
               ADCON0.CHS0 =  0;
               ADCON0.CHS1 =  1;
               ADCON0.CHS2 =  1;
               ADCON1 = 0b000000001;
               FVRCON = 0b110000010;
            }
              break;
  }
    ADCON1 = 0b000000011;
    FVRCON = 0b110000011;
    ADCON0.ADON = 1;
    ADCON0.GO = 1;
    
    while(ADCON0.GO == 0)
    {} // tant qu'on a pas fini la convertion
    
    ADC_VALUE = ADRES;      // on met la valeur convertie dans adc_value
    
  return (ADC_VALUE);     /* Return the value of the ADC process */
 }
Pouvez-vous me dire si cette fonction est correcte?

Merci