Bonjour,
Je dois limiter au maximun la consommation de mon PIC en mode veille, car ma fonction veille me sert de bouton ON/OFF.
Après mesure je consommais 50uA mais j'ai rajouter une fonction ADC ( convertisseur analogique digital) et celle ci me fait passer la consomation de mon pic à 500uA, il y a donc un facteur 10 qui n'est pas negligeable.
Je me suis dit pas de probléme il suffit de reset les registres en les mettant à 0 mais non ça ne marche pas et je ne comprend pas donc si quelqu'un à une solution je vous remercie d'avance.
Voir ci dessous fonction initialisation ADC (et reset) :
Cordialement,Code:void __attribute__((__interrupt__,auto_psv)) _ADC1Interrupt(void) // interruption CAN pour mesurer tension analogique { Result_AN0 = ADC1BUF0; // Save AN0 result IFS0bits.AD1IF = 0; AD1CON1bits.ADON = 0; //disabling the ADC module } void InitADC1(void) // Convertisseur A/D pour mesurer tension analogique { AD1PCFG = 0xFFFE; // Configure A/D port // AN0 input pin is analog AD1CON1 = 0x0002; // Configure sample clock source // and conversion trigger mode. // Unsigned enteger format (FORM<1:0>=00), // Manual conversion trigger (SSRC<2:0>=000), // Manual start of sampling (ASAM=0), // No operation in Idle mode (ADSIDL=1), // S/H in Sample (SAMP = 1) AD1CON2 = 0; // Configure A/D voltage reference // and buffer fill modes. // Vr+ and Vr- from AVdd and AVss (VCFG<2:0>=000), // Inputs are not scanned, // Interrupt after every sample AD1CON3 = 0x0100; // Configure sample time = 1Tad, // A/D conversion clock as Tcy AD1CHS = 0; // Configure input channels, // S/H+ input is AN0, // S/H- input is Vr- (AVss). AD1CSSL = 0; // No inputs are scanned. IFS0bits.AD1IF = 0; // Clear A/D conversion interrupt. // Configure A/D interrupt priority bits (AD1IP<2:0>) here, if // required. Default priority level is 4. IEC0bits.AD1IE = 1; // Enable A/D conversion interrupt AD1CON1bits.ADON = 1; // Turn on A/D AD1CON1bits.SAMP = 1; // Start sampling the input tempoms(50); // Ensure the correct sampling time has elapsed // before starting conversion. AD1CON1bits.SAMP = 0; // End A/D sampling and start conversion while (!AD1CON1bits.DONE); void resetADC1(void) // Convertisseur A/D pour mesurer tension analogique { AD1PCFG = 0x0000; // Configure A/D port // AN0 input pin is analog AD1CON1 = 0x0000; // Configure sample clock source // and conversion trigger mode. // Unsigned enteger format (FORM<1:0>=00), // Manual conversion trigger (SSRC<2:0>=000), // Manual start of sampling (ASAM=0), // No operation in Idle mode (ADSIDL=1), // S/H in Sample (SAMP = 1) AD1CON2 = 0x0000; // Configure A/D voltage reference // and buffer fill modes. // Vr+ and Vr- from AVdd and AVss (VCFG<2:0>=000), // Inputs are not scanned, // Interrupt after every sample AD1CON3 = 0x0000; // Configure sample time = 1Tad, // A/D conversion clock as Tcy AD1CHS = 0; // Configure input channels, // S/H+ input is AN0, // S/H- input is Vr- (AVss). AD1CSSL = 0; // No inputs are scanned. }
Jules
-----