Bonjour à tous et BONNE ANNEE ( espérons meilleure en tous cas que 2020 !).
Je fais des essais avec l'ADC d'un 12F683 pour allumer une led au-dessus d'une certaine tension avec la référence interne du PIC. Je fais varier la tension à digitaliser avec un potar à partir de l'alimentation (5 volts).
J'ai fixé la condition à 511 (1/2 de 1023), la led devrait donc s'allumer à 2.5v, hors elle s'allume à 3.55v.
Est-ce que qqun aurait une idée sur le pb ?
Merci d'avance
le programme:
Code:#include <xc.h> // Définition de la fréquence du crystal pour la fonction __delay_ms(x); #define _XTAL_FREQ 4000000 // CONFIG #pragma config FOSC = INTOSCIO // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config MCLRE = OFF // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD) #pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #pragma config BOREN = OFF // Brown Out Detect (BOR disabled) #pragma config IESO = OFF // Internal External Switchover bit (Internal External Switchover mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled) unsigned int mesur; void main() { ANSEL = 0b00000001; TRISIO = 0b00000001; ADCON0bits.CHS = GP0;// broche à utiliser comme entrée VCFG = 0; ADFM = 1; GP2 = 0; while (1){ __delay_ms(5); ADON = 1; GO_nDONE = 1; __delay_ms(5); mesur = ((ADRESH << 8) + ADRESL); // valeur numérique de 0 à 1024 ADON = 0; if (mesur > 511) { GP2 = 1; } else { GP2 = 0; } } }
-----