Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

[PIC]-Mode SLEEP,IDLE



  1. #1
    jorg1n

    [PIC]-Mode SLEEP,IDLE


    ------

    Bonjour,

    bon, me revoilà avec un nouveau sujet qui concerne encore la programmation des PICs et plus particulièrement, les 18F.
    Je travaille avec un 18F4525:
    http://ww1.microchip.com/downloads/e...Doc/39626d.pdf
    et je programme en C (compilateur C C18 et l'environnement MPLAB)..voila tout.

    Et je souhaite mettre en oeuvre le fonctionnement en faible consommation de mon µcontroleur:
    -Il peut fonctionner en 3 mode : RUN (normal),IDLE ( conso=2,5µA), SLEEP (conso=100nA).
    -le réglage du type de mode se fait avec le bit IDLEN du registre OSCCON:
    si en mode SLEEP: si IDLEN=1->mode IDLE ,si IDLEN=0 ->MODE SLEEP.
    -Et pour sortir de ces mode, il y a plusieurs possibilités, dont celle que je voudrais, une interruption sur RB0..

    Mais voila mon problème, est:
    COMMENT RENTRER EN MODE BASSE CONSOMMATION??
    en asm , il s'agit de l'instruction "SLEEP".. mais en C(compilateur C18)

    Si vous en savez un peu plus que moi...je suis preneur.
    Je vous remercie d'avoir pris le temps de lire mon "petit" sujet...
    Bonne journée

    -----

  2. Publicité
  3. #2
    jorg1n

    Re : [PIC]-Mode SLEEP,IDLE

    Bon, il n'y a rien de bien compliqué en fait...
    Sleep();
    et voila et des que j'appui sur mon BP en RB0, mon micro est en fonctionnement normal...
    Mais comment pourrais voir que mon µC consomme moins...??
    Merci d'avance

  4. #3
    DAUDET78

    Re : [PIC]-Mode SLEEP,IDLE

    Ben avec un ampéremètre.
    Tu vas me dire : oui, mais c'est pas grand chose que je dois mesurer !
    Alors:
    1/ tu mets un controleur universel en postion "mesure courant DC" en série avec ton alimentation
    2/ tu le court-circuites avec un interrupteur
    3/ Tu met sous tension ton bouzin
    4/ tu mets ton controleur sur la gamme 500 mA
    5/ tu ouvres l'interrupteur. Si la mesure est trop faible, tu fermes l'interrupteur, tu changes ta gamme de mesure et GOTO /5
    6/ tu as la mesure du courant "normal"
    7/ tu fermes l'interrupteur
    8/ tu mets ton µP en Sleep
    9/ tu ouvres l'interrupteur. Si la mesure est trop faible, tu fermes l'interrupteur, tu changes ta gamme de mesure et GOTO /9

    Cette méthode simple permet d'avoir une idée. Par contre la résistance interne du controleur risque de fausser la mesure (ou de planter le µP)

    ATTENTION, fermer l'interrupteur avant tout changement de gamme et/ou mise sous-tension/hors-tension de l'alimentation!
    J'aime pas le Grec

  5. #4
    Poy_the_Dwarf

    Re : [PIC]-Mode SLEEP,IDLE

    Bonjour,

    Le meilleur moyen de voir celà c'est de mettre un ampermètre sur l'alimentation, mais attention. tu dois t'assurer:

    - que tu restes suffisament longtemps dans un mode (sleep, idle, normal), pour que l'ampermètre est le temps de mesurer le courant tiré par ta carte.

    - de plus il ne faut pas qu'en mode normal ton uC communique avec une autre puce (émetteur-récépteur, ampli, etc.).

    - Ne pas oublier de mettre l'ampermètre sur une résolution correct (je sais c'est évident mais je l'oublie facilement )

    - Laisse l'ampermètre en mode dc (courant continu) histoire d'avoir une valeur moyenne de consommation.

    Heu ben voilà normalement ça devrait marcher mais n'oublie pas que tu vas aussi mesurer tous les autres composants présents sur ton circuit.

    Et dernière chose, il faut que l'impédance de ton ampermètre soit suffisament faible pour que la chute de tension sur celui-ci soit négligeable par rapport à la tension d'alimentation!

    Heu ben j'espère que ça va marcher.

    Bonne journée et tiens moi au courant
    a plus
    Poy

    PS: si t'as pas d'ampèremetre, ça coute assez chère

  6. #5
    Poy_the_Dwarf

    Re : [PIC]-Mode SLEEP,IDLE

    Citation Envoyé par DAUDET78 Voir le message
    Ben avec un ampéremètre.
    Tu vas me dire : oui, mais c'est pas grand chose que je dois mesurer !
    Alors:
    1/ tu mets un controleur universel en postion "mesure courant DC" en série avec ton alimentation
    2/ tu le court-circuites avec un interrupteur
    3/ Tu met sous tension ton bouzin
    4/ tu mets ton controleur sur la gamme 500 mA
    5/ tu ouvres l'interrupteur. Si la mesure est trop faible, tu fermes l'interrupteur, tu changes ta gamme de mesure et GOTO /5
    6/ tu as la mesure du courant "normal"
    7/ tu fermes l'interrupteur
    8/ tu mets ton µP en Sleep
    9/ tu ouvres l'interrupteur. Si la mesure est trop faible, tu fermes l'interrupteur, tu changes ta gamme de mesure et GOTO /9

    Cette méthode simple permet d'avoir une idée. Par contre la résistance interne du controleur risque de fausser la mesure (ou de planter le µP)

    ATTENTION, fermer l'interrupteur avant tout changement de gamme et/ou mise sous-tension/hors-tension de l'alimentation!
    Ben perso, moi je brancherais l'ampermètre directement et je ferais des comparaisons entre les différents modes.

    Voilà j'espère que tu vas t'en sortir

    Bonne journée

  7. A voir en vidéo sur Futura
  8. #6
    alainav1

    Re : [PIC]-Mode SLEEP,IDLE

    bonjour,
    j'ai pris l'habitude de mettre en serie une resistance d'1 ohms ou 10 Ohms en serie avec mon alimentation (pour les circuit qui consomme peu ).
    ainsi une mesure de la tension aux bornes de cette resistance me donne une idée de la consommation ,même si la valeur est fonction de la tolerance de la resistance de son echauffement cela me suffit pour me donner une bonne idée de la consommation.
    cordialement
    Alain

  9. Publicité
  10. #7
    lil-vince

    Re : [PIC]-Mode SLEEP,IDLE

    Salut,

    Bon, bah on t´as déjà tout dit pour mesurer ta consommation, rien de compliqué (moi perso, je coupe une piste, met le multimètre et allume mon circuit (on fait comme on peu avec les moyens du bord quand on est dans une petite boite!))

    Je voullais juste savoir si tu t´en étais sortis avec l´allumage de tes diode 3 ou 5 selon le temps d´appuis?
    Enfin je suppose que oui si t´es passé à autre chose(et je vois pas de raison)...
    @+

  11. #8
    jorg1n

    Re : [PIC]-Mode SLEEP,IDLE

    Salut,

    Bon, bah on t´as déjà tout dit pour mesurer ta consommation, rien de compliqué (moi perso, je coupe une piste, met le multimètre et allume mon circuit (on fait comme on peu avec les moyens du bord quand on est dans une petite boite!))

    Je voullais juste savoir si tu t´en étais sortis avec l´allumage de tes diode 3 ou 5 selon le temps d´appuis?
    Enfin je suppose que oui si t´es passé à autre chose(et je vois pas de raison)...
    @+
    Et si, je suis passé à autre chose...je n'ai pas réussi à mettre tout en place...
    mais je m'y repencherai plus tard.

    Par contre j'ai un petit souci, voila mon programme:
    Code:
    #pragma interrupt LED
    void LED(void)
    {
    	if (INTCONbits.INT0IF)
    	{
    	LEDA2=!LEDA2;
    	INTCONbits.INT0IF=0;
    	}
    
    	if (INTCON3bits.INT1IF)
    	{
    	LEDA3=!LEDA3;
    	OSCCONbits.IDLEN=0;
    	Sleep();
    	INTCON3bits.INT1IF=0;
    	}
    
    	if (INTCON3bits.INT2IF)
    	{
    	LEDA4=!LEDA4;
    	INTCON3bits.INT2IF=0;
    	}
    }
    
    #pragma code vecteur_d_IT=0x08
    void APPUI_RB0(void)
    {
    	_asm 
    	goto LED
    	_endasm
    }
    #pragma code
    
    
    /***************************************************************************
    *********************Programme Principal************************************
    ***************************************************************************/
    void main (void)
    {
    init_uc();				//Appel SP Initialisation du microcontroleur
    
    while(1)
    {
    
    
    config_int();
    
    
    }//Fin While(1)
    }//Fin Programme Principal
    
    /***************************************************************************
    Nom   : void init_uc(void)
    Role  : Configuration et initialisation des Ports E/S
    *****************************************************************************/
    void init_uc(void)
    {
     ADCON1=0x0F;					// Configuration en numérique
     TRISA=0x00;					// PORTA en sortie
     TRISB=0xF7;					// PORTB en entrée --sauf RB3 en sortie
     TRISC=0x00;					// PORTC en sortie
     TRISD=0x00;					// PORTD en sortie
     TRISE=0x00;					// PORTE en sortie
    
     PORTA=0x1C;					//
     PORTB=0x00;					///
     PORTC=0x00;					////Initialisation à 0 des Ports
     PORTD=0x00; 					///
     PORTE=0x00;					//
    }
    
    
    /***************************************************************************
    Nom   : void config_int(void);
    Role  :
    *****************************************************************************/
    void config_int(void)
    {
    INTCONbits.GIE=1;		//Autorise les interruptions
    INTCON2bits.INTEDG0=0;	//Interruption sur un front descendant sur RB0
    INTCONbits.INT0IE=1;	//Autorie les interruptions externes sur INT0
    INTCON2bits.INTEDG1=0;	//Interruption sur un front descendant sur RB1
    INTCON3bits.INT1IE=1;	//Autorie les interruptions externes sur INT1
    INTCON2bits.INTEDG2=0;	//Interruption sur un front descendant sur RB2
    INTCON3bits.INT2IE=1;	//Autorie les interruptions externes sur INT2
    }
    et je m'explique, lorsque je teste mon programme, j'appui sur les boutons branché sur RB1 et RB2, et rien ne se passe...mais par contre lorsque j'appuie sur le BP en RB0, je désactive le mode sleep..et tout marche, mais impossible de revenir en mode sleep...alors que je pensais que ça devait le faire si jappuyais sur RB1...
    Ce que je voulais faire, c'est j'appuie sur RB1, je passe en mode sleep, j'appuie sur RB0 je passe en mode normal, mais ça marche pas...
    Une petite idée...

  12. #9
    lil-vince

    Re : [PIC]-Mode SLEEP,IDLE

    Déjà sort ton "config_int()" de ta boucle while!(et dsl je bosse )

  13. #10
    lil-vince

    Re : [PIC]-Mode SLEEP,IDLE

    Tu fais un goto LED mais je ne vois pas d´étiquette "LED", ca appel le sous prog LED()? Pour moi ca ne marche pas!
    et pourquoi l´écrire en assembleur, l´instruction goto existe aussi en C ?!

    Il n´y a pas une fonction réveil?
    Moi sur mes processeurs pour sortir du mode sleep, il faut faire une "sortie du mode sleep", parceque oui il va traiter ce qu´il y a dans ton interrupt mais apres il reste en mode sleep...
    lorsque j'appuie sur le BP en RB0, je désactive le mode sleep..et tout marche
    Tu sais comment qu´il sort du mode sleep, par ta conso en courant?

    Pourquoi tu as "INTCONbits.INT0IF" pour RB0 et "INTCON3bits.INT0IF" pour les autres?

Sur le même thème :

Discussions similaires

  1. PIC18F4682 / INT RB0 / Mode Sleep
    Par jorg1n dans le forum Électronique
    Réponses: 24
    Dernier message: 12/12/2007, 22h24
  2. PIC24FJ128 & Sleep mode
    Par bouly94 dans le forum Électronique
    Réponses: 6
    Dernier message: 27/09/2007, 23h22
  3. mode sleep des pics
    Par tornado dans le forum Électronique
    Réponses: 1
    Dernier message: 21/03/2007, 20h20
  4. le mode sleep des picmicrocontrollers
    Par tornado dans le forum Électronique
    Réponses: 0
    Dernier message: 07/03/2007, 11h17
  5. Consommation 16f8777 en mode sleep
    Par maho dans le forum Électronique
    Réponses: 3
    Dernier message: 04/02/2005, 13h08