Consommation PIC24f !
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Consommation PIC24f !



  1. #1
    jules38410

    Consommation PIC24f !


    ------

    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) :


    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.
    
    }
    Cordialement,
    Jules

    -----
    Dernière modification par jules38410 ; 21/07/2014 à 12h29.

  2. #2
    jules38410

    Re : Consomation PIC24f

    Le seul fait de mettre : AD1CON1bits.ADON = 1; // Turn on A/D
    me fait consommer 500uA mais si je remet : AD1CON1bits.ADON = 0; // Turn off A/D cela ne change rien.

    Je ne comprend vraiment rien pourtant le reset du pic fonctionne.

  3. #3
    Gérard

    Re : Consomation PIC24f

    Si tu n'as pas besoin de l'ADC en veille, coupe le en mettant le bit à 0.
    Au réveil, mets le bit à 1.

  4. #4
    jules38410

    Re : Consomation PIC24f

    C'est bien le problème quand je le coupe en le mettant à 0, il consomme encore.

  5. A voir en vidéo sur Futura
  6. #5
    Gérard

    Re : Consomation PIC24f

    Citation Envoyé par jules38410 Voir le message
    C'est bien le problème quand je le coupe en le mettant à 0, il consomme encore.
    Une fois de plus, je n'ai pas bien lu ...
    Désolé.

  7. #6
    Gérard

    Re : Consomation PIC24f

    Dans les différents registres ADCON ... quels sont les bit que tu as modifié en ajoutant cette fonction pas rapport à leurs états au reset ?
    Ca peut être une piste.

  8. #7
    jules38410

    Re : Consomation PIC24f

    Piste déjà exploité étant donné que j'ai copier ma fonction initialisation et remplacer les valeurs des registres par les valeurs de reset dans ma fonction reset qui sont ci dessus.
    Dernière modification par jules38410 ; 21/07/2014 à 15h26.

  9. #8
    Gérard

    Re : Consomation PIC24f

    Je n'ai plus d'idée.
    Désolé.

  10. #9
    RISC

    Re : Consomation PIC24f

    Salut,

    Quelle référence de PIC24F utilises-tu...il en existe plus de 150...!
    Je n'ai pas vu la fonction qui fait entrer le PIC en mode SLEEP ?
    Je te recommande d'utiliser les exemples de codes qui figurent sur la page des examples de code : http://www.microchip.com/CodeExamples tu filtres ensuite pour ne voir que les exemples de code pour les PIC24F
    Pour le mode sleep tu verras en particulier le Code example CE302, CE309, CE342,

    En mode sleep tu devrais atteindre (suivant le PIC24F que tu utilises) plusieurs centaines de nA (mode Deep Sleep) ou plusieurs uA (mode sleep).
    Toutefois il faut que ton hardware soit correctement conçu sans quoi les coutants de fuites sont prédominants.

    a+

  11. #10
    jules38410

    Re : Consommation PIC24f !

    Bonjour,

    Mon pic est un pic24fj128ga010, posséde t'il le mode deep sleep car je ne l'ai pas vu dans la datasheet ?
    La fonction pour mettre mon pic en veille est la fonction sleep présente dans les librairie de MPLAB : #define Sleep() {__asm__ volatile ("pwrsav #0");}
    Celle ci fonctionne très bien, c'est juste que ma fonction ADC augmente ma consommation veille et je n'arrive pas à la reset.

    Merci

  12. #11
    RISC

    Re : Consommation PIC24f !

    Salut,

    Le PIC24FJ128GA010 est le tout premier PIC24F et le mode sleep n'est pas optimal (c'est pour cela que tu n'as pas trouvé le mode deep sleep qui a été introduit plus tard dans les PIC24F).
    J'ai revérifié le courant de sleep dans la datasheet il est spécifié à 27uA en typique et 60uA en MAX à 25C/3.6V donc si tu trouves 50uA il est dans la spec...et tu ne pourras espérer mieux sur ce produit.
    Un moyen rapide d'améliorer cela sans changer ton circuit imprimé (si tu en as un) est d'utiliser un autre PIC24F compatible 100% au niveau brochage : le PIC24FJ128GA110.
    Il est spécifié à 4uA typ et 10 uA max à 25C/3.3V . Il faudra faire quelques changements coté logiciel car les broches sont programmables sur le GA110

    Maintenant, si tu peux changer de PIC24F, les modèles qui supportent les mode low voltage sleep et deep sleep comme le PIC24FJ128GC010 permettent de descendre beaucoup plus bas (75nA typ / 900nA max à 25C/3,3V).
    NB : en mode deep sleep, la RAM interne n'est pas sauvegardée. Voir le chapitre 10.0 de la datasheet du PIC24FJ128GC010

    a+

  13. #12
    jules38410

    Re : Consommation PIC24f !

    Tout d'abord merci pour ces explications sur le mode deep sleep.

    Mais je ne peux pas changer de pic. Ducoup, j'ai trouvé une autre solution, ma fonction veille maintenant ne fait qu'un reset et j'ai mit ma commande sleep en debut du main (apres init de mon inte pour en sortir biensur) et je consomme 43uA, ce qui me convient parfaitement car la conso de mon appareil en marche est de 40 à 50mA environ selon l'affichage sur mon ecran OLED. Les batteries seront donc rechargées assez souvent pour dire que l'appareil est comme éteint en mode veille.

Discussions similaires

  1. [Microcontrôleur] 1er projet, USB HID PIC24F
    Par rapapar dans le forum Électronique
    Réponses: 16
    Dernier message: 25/06/2014, 20h41
  2. PIC24F USB et C#
    Par frouby dans le forum Électronique
    Réponses: 15
    Dernier message: 18/11/2011, 15h11
  3. kit de développement d'un pic24f
    Par invite658703c0 dans le forum Électronique
    Réponses: 1
    Dernier message: 21/05/2010, 17h39
  4. Problème PIC24F
    Par kronanberg dans le forum Électronique
    Réponses: 4
    Dernier message: 14/05/2009, 10h36
  5. Liaison UART par PIC24F
    Par invite5b91726d dans le forum Électronique
    Réponses: 16
    Dernier message: 04/06/2008, 15h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.