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

PIC18F4682 / INT RB0 / Mode Sleep



  1. #1
    jorg1n

    PIC18F4682 / INT RB0 / Mode Sleep


    ------

    Bonjour,

    ce que je souhaite faire est simple...enfin sur le papier car on vera après au point de vue programmation...
    Sur ma carte j'aurai un bouton poussoir branché sur RB0(au repos 5V sur RB0 et si un appui sur le BP, 0V sur RB0), je souhaite donc utiliser les interruptions et le mode sleep de mon PIC...
    1/BP au repos->pas d'interruption sur RB0->PIC en mode SLEEP
    2/Appui sur BP->interruption sur RB0->PIC en mode normal->Programme en fonctionnement
    3/RE Appui sur BP->interruption sur RB0->arret du programme->PIC en Mode SLEEP

    Voila ce que je souhaite faire...c'est très simple comme ça mais pour moi au point de vu programmation cela me parait un peu compliqué..vu que je suis débutant, mais je souhaite a tout prix réussir à mettre en place ce fonctionnement car cela serait un vrai plus pour mes connaissances et pour l'avancement de mon projet...
    Dois je rajouter du matériel(composants pour gérer le BP ou le mode SLEEP)autour du PIC mis a part tt ce qu'est quartz, alim,...bien sur.
    N'hésitez pas à me faire transmettre vos connaissances sur ce sujet ...
    Encore merci pour votre aide..
    Bonne journée
    Nicolas

    -----

  2. Publicité
  3. #2
    RISC

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    SAlut,

    Ce que tu vbeux faire est tout à fait possible sans composants externes.
    Il faudra simplement faire un anti-rebonds logiciel pour éviter d'aller plusieurs fois en interruption à chaque fois que tu appuies sur ton bouton poussoir (tu peux également prévoir cela pas HW (R + C) si tu ne veux pas t'ennuyer à faire cela par soft.

    Le mode SLEEP est expliqué dans la documentation, chapitre 3, plus particulièrement 3.1.2, 3.1.4, 3.3, 3.5 :
    http://ww1.microchip.com/downloads/e...Doc/39761b.pdf

    Cette carte de Microchip met en oeuvre le mode SLEEP (d'après le manuel). Tu peux télécharger le code source ;=) : http://www.microchip.com/stellent/id...cName=en530757

    a+
    Dernière modification par RISC ; 02/12/2007 à 18h14. Motif: correction

  4. #3
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour,

    je te remercie pour ta réponse RISC, je suis assez intéressé par la méthode Hard pour réaliser l'anti rebond...Donc avec un montage R+ C si jai bin compris..
    De quel ordre doivent etre les valeurs des composants?et de quelle maniere doivent ils etre brancher?

    Merci pour ces infos..
    Nicolas

  5. #4
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour,

    je pensais faire mon anti rebond comme ceci...(voir pièce jointe)
    Si vous pouviez me donner votre avis.

    Merci
    Nicolas
    Images attachées Images attachées

  6. #5
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Désolé, j'ai fais une petite erreur, le C = 10µF...
    Merci
    Nicolas

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

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour a vous tous...
    si vous avez une petite idée sur ma proposition...

    Je vous remercie

    Nicolas

  9. Publicité
  10. #7
    RISC

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Salut,

    T'as plus qu'à faire l'essai ;=)

    Ci-joint un article très interessant sur les rebonds et anti-rebonds : http://www.ganssle.com/debouncing.pdf

    a+
    Dernière modification par RISC ; 04/12/2007 à 23h17. Motif: ajout

  11. #8
    vévé_leski

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Salut,
    J'ai un gros problème, j'ai un projet qui utilise un pic18F4580. Il s'agit de gérer 2 modes de fonctionnement d'un suivi solaire et 1 mode de veille :
    * assez de lumière: suivi auto avec des photorésistances : là j'ai le montage électrique qu'il faut ;
    * pas assez de lumière: suivi approximatif du genre je replace les moteur environ au bon endroit toutes les 10 min ;
    * nuit : je fait un retour en arrière de mes moteur pour les mettre en position de départ pour le lendemain matin puis le système se met en veille.


    Mon problème c'est que je ne sais pas comment gérer ces mode de fonctionnements donc si quelqu'un pouvait m'aider ça m'arrangerait.
    Merci d'avance.

  12. #9
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour,

    pour ton problème,je n'en connai pas plus que toi si le mode SLEEP des PICs..et je suis moi aussi a la recherche d'informations...(mais va regarder les infos en début de sujet...)

    Donc avis aux connaisseurs..

    Merci

    Nicolas

  13. #10
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    LU jorg1n

    Recherche dans tes derniers posts, ou tu hésitais entre mode sleep et un BP, Daudet ta fait le déscriptif du BP, je te proposais une ébauche du mode sleep .

    à bientôt

  14. #11
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    LU vévé_leski

    Tu devrais ouvrir un nouveau post mais bon
    Pour le cas pas de soleil:
    Regarde du coté de la lecture d'une table qui te positionne tes celllules toute les Xt
    Tables que tu peux mettre à jour lorsque il y a eu du soleil c'est une piste
    a bientôt

  15. #12
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour,
    ça y est, je me lance dans la programmation vu que ma carte est terminée...
    Je rappelle ce que je veux faire....
    Tout d'abord, je souhaite faire un ptit programme tt simple:
    1/Démarrage du programme
    2/LED sur RA0 éteinte
    3/Si appui sur BP (RB0) Allumage de la LED
    Si on rappui sur le BP extinction de la LED

    Je commence par un truc tt simple.
    Pour allumer la LEd , j'ai pas de problème, mais avec les interruptions...?
    Jai regardé les documentations et j'ai regardé le fonctionnement et voila ce que j'ai écrit:
    Code:
    ***************************************************************************/
    void main (void)
    {
    init_uc();				//Appel SP Initialisation du microcontroleu
    INTCONbits.GIE = 1;		//activation de toutes les int
    INTCONbits.INTOIE = 1;		//int sur RB0
    
    while(1)
    {
    if (INTCONbits.INT0IF)
    	{
    	if(LED_ON==1)
    		{
    		LED_ON=0;
    		}
    	if(LED_ON==0)
    		{
    		LED_ON=1;
    		}
    	INTCONbits.INT0IF=0;
    	}
    	
    }//Fin While(1)
    }//Fin Programme Principal
    
    
    
    
    
    /***************************************************************************
    Nom   : void init_uc(void)
    Role  : Configuration et initialisation des Ports E/S
    ----------------------------------------------------------------------------
    Contraintes           : Aucune
    Donnees en entree     : Aucune
    Donnees en sortie     : Aucune
    Donnees glob. modif.  : Aucune
    *****************************************************************************/
    void init_uc(void)
    {
     TRISA=0x00;					// PORTA en sortie
     TRISB=0x0F;					// RB7-RB4 en sortie RB3-RB0 en entrée
     TRISC=0x1F;					// RC7-RC5 en sortie RC4-RC0 en entrée
     TRISD=0x4F;					// PORTD en sortie sauf RD7 RD5 RD4
     TRISE=0x00;					// PORTE en sortie
    
     PORTA=0x00;
     PORTB=0x00;
     PORTC=0x00;
     PORTD=0x00; 
     PORTE=0x00;
    
     ADCON1=0b00001111;				//Configuration du portA en numérique
    }
    Cela vous parait il correct...la procédure est elle bonne?
    Mais si mon programme est assez long comment j'y insère la gestion de l'interruption??
    Alors si vous pouviez me donner un ptit coup de pouce..
    Je vous remercie
    Nicolas

  16. Publicité
  17. #13
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    LU jorg1n

    Toujours en C, pour moi cela va être dur.
    Le chargeur c'est ok pour le salon?

    à bientôt

  18. #14
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Salut POM26,

    Oui oui, la maquette a super bien fonctionnée...
    En ce qui concerne les interuptions, j'ai trouvé dans la librairie du C18 une fonction "OpenRB0INT", qui permet de configurer l'interruption sur RB0..
    Cela fonctionne t'il bien?
    Encore merci
    Nicolas

  19. #15
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    LU
    Oui toutes les INT fonctionnent très bien.

    A bientôt je te laisse avec les rois du C mais je te surveille

  20. #16
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    J'ai un petit problème non pas au niveau de la programmation(je pense avoir réussi mais je n'ai pas encore testé..)
    Je n'arrive pas a voir comment je dois écrire mon programme pour qu'il soit a l'arret a l'allumage de la carte et suite a l'interruption sur RB0, mon programme est en route(PROGRAM ON),....mon programme ON est mon programme d'interruption...??
    Merci
    Nicolas

  21. #17
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    je vois bien cela comme ca:

    on valide les init et tout ce qui va avec, dèsactive le chien par exemple, puis on valide le sleep (dodo) puis lorsque tu as une int RB0 alors le reveil sonne debut

    a bientôt

  22. #18
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Je te remercie,
    et au début de mon programme d'interruption, je fais un test pour savoir dans quel mode j'étais: si j'étais en sleep, alors j'active mon programme et si mon programme fonctionnais je passe en mode sleep...
    Donc mon "while(1)" est dans ma boucle d'interruption??
    Merci encore
    Nicolas

  23. Publicité
  24. #19
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    lu

    Dans ton programme int si tu fais un test c'est que tu n'es plus en mode dodo donc pas besoin de savoir si tu es en mode sleep

  25. #20
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    OUi mais, si je rappui sur mon BP et que mon programme tourne, alors comment il sait que je veut le mettre en mode SLEEP..?
    Je te remercie

  26. #21
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    lu
    Si tu appui sur ton bouton cela se passe comme pour une bascule dodo réveil dodo réveil dodo réveil etc.

    Lorsque tu es en dodo c'est comme si tu avais placé dans ton programme int un halte, ton programme s’arrête tout s’arrête, puis aprés au réveil il repart juste apres ton sleep et continue dans ton int

  27. #22
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Et si je veux qu'il repart en tt début de programme...comme si j'avai voulu faire un reset?
    je te remercie pour ces infos..

  28. #23
    invite_P89
    Invité

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    LU

    Je le vois comme cela.

    Début programme principale :

    -Autoriser INTRB0
    -Petite tempo
    -Interdire INTRB0
    -programme principale
    -autres données du programme Principale
    -puis reboucler sur Autoriser INTRB0

    Lors d'un appui sur BP il ne peut se faire que entre autoriser INTRB0 et interdire INTRB0 donc avant ton programme principale

    Donc le dodo et réveil se fera la en début programme principale

  29. #24
    jorg1n

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Bonjour,
    j'ai réécri mon ptit programme..mais cela ne marche pas...
    Pourriez vous me donnez deux trois petites infos...
    Code:
    //fichier de declaration des registres internes du microcontroleur
    #include <p18f4682.h>
    #include <portb.h>    /* for the RB0/INT0 interrupt */
    
    //Déclaration des PORTXbits.RXX utilisés
    #define LED_ON PORTBbits.RB3
    
    //Configuration Bits
    #pragma config OSC = XT			//Config du type de l'oscillateur
    
    //Sous programmes
    void init_uc(void);
    void EnableHighInterrupts (void);
    void ChargeurON (void);
    
    
    
    /* fonction interruption */
    void ChargeurON(void);
    
    // on déclare que lors d'une interruption
    #pragma code highVector=0x008
    void atInterrupthigh(void)
    {
    // on doit éxecuter le code de la fonction MyHighInterrupt
    _asm GOTO ChargeurON _endasm		
    }
    #pragma code // retour à la zone de code
    
    // ************************
    // ****  Interruptions ****
    // ************************
    #pragma interrupt ChargeurON 
    void ChargeurON(void)
    {
    LED_ON=1;
    INTCONbits.RBIF = 0; // Clear PORTB Interrupt Flag. 
    }
    
    
    
    /***************************************************************************
    *********************Programme Principal************************************
    ***************************************************************************/
    void main (void)
    {
    init_uc();				//Appel SP Initialisation du microcontroleur
    
    OpenRB0INT (PORTB_CHANGE_INT_ON & /* enable the RB0/INT0 interrupt */
                  PORTB_PULLUPS_ON &    /* configure the RB0 pin for input */
                  FALLING_EDGE_INT);    /* trigger interrupt upon S3 button
                                           depression */
    EnableHighInterrupts ( );
    while(1)
     {
    
     }
    
    }//Fin Programme Principal
    
    
    
    
    
    /***************************************************************************
    Nom   : void init_uc(void)
    Role  : Configuration et initialisation des Ports E/S
    ----------------------------------------------------------------------------
    Contraintes           : Aucune
    Donnees en entree     : Aucune
    Donnees en sortie     : Aucune
    Donnees glob. modif.  : Aucune
    *****************************************************************************/
    void init_uc(void)
    {
     TRISA=0x00;					// PORTA en sortie
     TRISB=0x07;					// RB7-RB4 en sortie RB3-RB0 en entrée
     TRISC=0x1F;					// RC7-RC5 en sortie RC4-RC0 en entrée
     TRISD=0x4F;					// PORTD en sortie sauf RD7 RD5 RD4
     TRISE=0x00;					// PORTE en sortie
    
     PORTA=0x00;
     PORTB=0x00;
     PORTC=0x00;
     PORTD=0x00; 
     PORTE=0x00;
    
     ADCON1=0b00001111;				//Configuration du portA en numérique
    }
    
    	
    void EnableHighInterrupts (void)
    {
      RCONbits.IPEN = 1;         /* enable interrupt priority levels */
      INTCONbits.GIEH = 1;       /* enable all high priority interrupts */
    }
    Je vous remercie

    Nicolas

  30. Publicité
  31. #25
    RISC

    Re : PIC18F4682 / INT RB0 / Mode Sleep

    Salut,

    Le moyen le plus simple pour savoir dans quel mode tu es, est de créer un sémaphore (flag). Tu le positionnes à 1 pour dire que le dernier appui doit générer la mise en SLEEP, et tu le positionnes à 0 quand l'appui sur le bouton correspond au mode réveillé.
    En clair, chaque appui sur le bouton poussoir fait changer l'état du sémaphore.

    Je te conseille de lire ce cours pour la gestion des interruptions :
    http://www.aix-mrs.iufm.fr/formation...indexPIC_C.htm

    En fonction de l'autorisation des interruptions ou non AVANT d'aller en mode SLEEP, le micro continue à partir de l'instruction suivante ou part en interruption au réveil.

    a+
    Dernière modification par RISC ; 12/12/2007 à 22h25. Motif: addition

Sur le même thème :

Discussions similaires

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