IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Sleep Mode


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut Sleep Mode
    Salut à tous,

    Voila je travaille avec un PIC 16f877 un ICD2 et une plaque de dev. PICDEM.

    Je voulais faure un programme de test du mode veille pour mesurer la conso pour mon programme pricipal qui sera beaucoup plus compliqué .. Je me suis aidé du cours d'un specialiste - Mais je n'arrive pas à passer ne mode sleep,en fait c'est quoi l'instruction en C pour passer en mode Sleep .. - je sais pas trop pourqoi pourtant je crois avoir pensé a tous les bit de configs ..

    RC7=RC6=1;
    RC0=0;
    DelayMs(5000);
    RC7=RC6=0;
    GIE=0;
    PEIE=1;
    INTE=1;
    PIE1=0x00;
    EEIE=0;
    BCLIE=0;
    CCP2IE=0;
    sleep(); <== !!


    Merci !

    ++,Florent

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Y'a pas une documentation de ton pic qui liste l'ensemble des instructions possibles à réaliser ? Où puis-je télécharger une telle documentation ?

  3. #3
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Salut à tous (eh oui c'est mon premier message sur ce forum ).
    Bien que n’étant pas un spécialiste des microcontrôleurs PIC, il me semble que le mode « low power » de ces petites bêtes se fasse par une instruction spécifique qui est comme par hasard l’instruction « SLEEP ».
    Et il est bien évident que ce genre d’instruction ne fait pas partie du langage C.
    Donc la seule solution que je vois c’est que tu te fasses ta propre fonction en assembleur et qu’ensuite tu l’invoques dans ton programme en langage C.
    Autre solution, mais qui dépend du compilateur, c’est d’utiliser une directive du genre « _asm() », qui permet de mélanger de l’assembleur dans du C (à utiliser avec parcimonie). Donc à vérifier dans la doc du compilateur.
    Voilà, j’espère avoir été assez clair pour mon premier message dans le forum.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut Sleep Mode
    Salut et merci pour vos réponses,

    Hegros : Justement c'est ce que je cherche mais je trouve pas ..

    Croco :

    1. Ok, mais comment faire sa propre fonction en asm et comment l'invoquer ?

    2. J'ai essayé " SLEEP_asm(); " mais non =>

    "Error[000] : undefined symbol:
    Error[000] : _SLEEP_asm (D:\Florent\Admin\PIC\Fonctions\SleepMode_Int.obj)
    BUILD FAILED: Fri Mar 31 09:21:19 2006
    "

    Je savais même pas qu'on pouvait intégrer de l'asm ds du C.. Je vais essayer de me rconcilier avec la doc de mon compilateur "HI TECH PICC v8.01PL3 "...

    A bientot ..

    FLorent

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Sleep Mode
    Citation Envoyé par unluckymannn
    Je vais essayer de me rconcilier avec la doc de mon compilateur "HI TECH PICC v8.01PL3 "...
    Téléchargement de la bête en cours (55 Mo...)

    Wouah ! Eclipse ! Belle bête...

    Il semble que le compilateur PIC de Hi-Tech soit de type gcc. Donc la syntaxe asm (dite AT&T, attention, très piégeux si il y a des paramètres...) est comprise par le compilateur, qui se contente de coder l'instruction entre guillemets sans en vérifier la pertinence.

    Voilà ce que dit la doc du PICC (Compilateur C pour le PIC utilisé par Eclipse) :
    3.11.2 #asm, #endasm and asm()
    PIC instructions may also be directly embedded “in-line” into C code using the directives #asm,
    #endasm or the statement asm().
    The #asm and #endasm directives are used to start and end a block of assembly instructions which
    are to be embedded into the assembly output of the code generator. The #asm and #endasm construct
    is not syntactically part of the C program, and thus it does not obey normal C flow-of-control rules,
    however you can easily include multiple instructions with this form of in-line assembly.
    The asm() statement is used to embed a single assembler instruction. This form looks and behaves
    like a C statement, however each instruction must be encapsulated within an asm() statement.

    You should not use a #asm block within any C constructs such as if, while, do etc.
    In these cases, use only the asm("") form, which is a C statement and will correctly
    interact with all C flow-of-control structures.
    The following example shows both methods used:
    unsigned int var;
    void main(void)
    {
    var = 1;
    #asm // like this...
    bcf 0,3
    63
    Mixing C and Assembler Code C Language Features
    rlf _var
    rlf _var+1
    #endasm
    // or like this
    asm("bcf 0,3");
    asm("rlf _var");
    asm("rlf _var+1");
    }
    When using in-line assembler code, great care must be taken to avoid interacting with compilergenerated
    code. The code generator cannot scan the assembler code for register usage and so will
    remain unaware if registers are clobberred or used by the code. If in doubt, compile your program
    with the PICC -S option and examine the assembler code generated by the compiler.
    3.11.3 Accessing C objects from within Assembly Code
    The following applies regardless of whether the assembly is part of a separate assembly module, or
    in-line with C code.
    For any non-local assembly symbol, the GLOBAL directive must be used to link in with the symbol
    if it was defined elsewhere. If it is a local symbol, then it may be used immediately.
    Maintenant, il faut vérifier si l'instruction assembleur sleep (ou SLEEP) fait bien partie des instructions du PIC (que je ne connais pas).

    http://cba.mit.edu/projects/fablab/docs/D.pdf
    sleep - sleep
    System Commands
    Description
    Puts the processor to sleep, a mode where its power consumption is significantly reduced. It cannot perform any computation while in this state, but can be awakened by interrupts.
    Usage Format
    [sleep]
    Status Flags Affected
    None
    OK. Il faut apprendre à aller à la pêche à la documentation... Tout est sur le site de HiTech. Je me suis inscrit (gratuit et sans danger) et j'ai eu accès à ce que je voulais...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut Sleep Mode
    J'ai fait un recherche sur la doc , je trouve nada .. même en faisant " rechercher " ds le pdf actif de l'expression "sleep" ..

    Bon ..

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Essaye ceci :
    Sinon c'est plus élégant de faire ceci (en début de code) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define sleep() asm("sleep")
    Puis dans ta fonction :


  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut Sleep Mode
    Comment on dis deja ? [..] A oui ! , Tu es merveilleux ..

    Deux Questions pour finir :

    1. Tu peux executer nimporte qu'elle instruction en asm en faisant ""asm("instruction") .. ? Ca depend du compilateur ou c'est standart ?

    2. Ou as tu trouvé ces renseignements ? Dans la doc ? Si oui ou ?


    J'ai mis du temp car je m'étais planté avec mon bit GIE enfin bref..

    Merci encore ...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 45
    Par défaut Sleep Mode
    Dsl , j'avais pas vu la partie explicative et detaillée, Merci pour ces renseignement .

    "Il faut apprendre à aller à la pêche à la documentation... Tout est sur le site de HiTech. Je me suis inscrit (gratuit et sans danger) et j'ai eu accès à ce que je voulais..." => J'ai bien noté .. je chercherai mieu la prochaien fois .. ! RerereMerci !

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: Sleep Mode
    Citation Envoyé par unluckymannn
    1. Tu peux executer nimporte qu'elle instruction en asm en faisant ""asm("instruction") .. ? Ca depend du compilateur ou c'est standart ?

    Ca dépend du compilateur, mais il y a un mot clé 'asm' en C99 qui est peut être standard. Le contenu des chaines n'est évidemment pas portable (ça s'appelle 'botter en touche"...)
    2. Ou as tu trouvé ces renseignements ? Dans la doc ? Si oui ou ?
    Déjà indiqué.

    Soit un lien en dur (instructions PIC), trouvé avec google, soit le site de hi-tech (trouvé avec google aussi, grâce à ton indication "HI TECH PICC") :

    http://www.htsoft.com/products/PICClite.php

    etc.

  11. #11
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Bon ben voilà,
    monsieur Delahaye t'a repondu.
    Je n'ai rien de plus à ajouter.

    Content de t'avoir aidé....

Discussions similaires

  1. Le grand mode d'emploi du forum, à lire si vous souhaitez tout savoir !
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 03/06/2013, 17h36
  2. Réponses: 1
    Dernier message: 10/05/2011, 11h52
  3. Réponses: 0
    Dernier message: 21/07/2009, 16h08
  4. sleep mode de vista ? comment le reveiller?
    Par noumian dans le forum Windows Vista
    Réponses: 4
    Dernier message: 03/01/2008, 10h42
  5. Passer en mode 800*600
    Par flavien tetart dans le forum Assembleur
    Réponses: 8
    Dernier message: 30/05/2002, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo