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.
Pouvez-vous me dire si cette fonction est correcte?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 */ }
Merci
-----