Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#1 Message par jo7 » lun. 2 juil. 2018 00:08 lien vers la Data-Sheet : Cliquez ici

Bonsoir à tous,

J'avais une question à propos du mode veille ( SLEEP Mode) du microcontrôleur pour vérifier la consommation de celui-ci.
Je souhaiterais simplement à l'aide de mon code activer dès la mise sous tension du PIC le mode vielle.
Le problème c'est que le code ne fait rien et la consommation reste la même. Pouvez-vous m'indiquer mon erreur ? Merci d'avance ! :wink:

Code : Tout sélectionner

// CONFIG1
#pragma config FEXTOSC = OFF        // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT1      // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF       // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2)
#pragma config CSWEN = ON           // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = OFF          // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config MCLRE = ON           // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled)
#pragma config PWRTE = OFF          // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF           // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF        // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = SBOREN       // Brown-out Reset Enable bits (Brown-out Reset enabled according to SBOREN)
#pragma config BORV = LOW           // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = OFF        // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence))
#pragma config STVREN = OFF         // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset)
#pragma config DEBUG = OFF          // Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF            // User NVM self-write protection bits (Write protection off)
#pragma config LVP = ON             // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)

// CONFIG4
#pragma config CP = OFF             // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF            // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

#include <xc.h>

// PORT A
#define ICSPDAT         RA0                     // Port de programmation
#define POWER           RA1                     // Retour d etat charge batterie
#define MCLR            RA3                     // Port de programmation


/*// PORT B
#define ledR            RB7                     // +LED rouge

// PORT C
#define BP              RC5                     // Bouton poussoir*/



void main(void)
{

        
// Reglages des entrees/sorties
    
TRISA 0b00001011;                         // Choix entrees/sorties
    
LATA 0b00000000;                          // RAZ des ports
    
ANSELA 0;                                 // Choix mode analogique/numerique    
    
INLVLA 0b00000010;                        // Niveaux TTL
    
WPUA 0b00000010;                          // Resistances de pull-up interne
    
TRISB 0b01010000;                         // Choix entrees/sorties
    
LATB 0b10000000;                          // RAZ des ports
    
ANSELB 0;                                 // Choix mode analogique/numerique
    
INLVLB 0b10000000;                        // Niveaux TTL
    
SLRCONB 0b10101111;                       // Slew rate
    
WPUB 0;                                   // Resistances de pull-up interne 
    
TRISC 0b00111000;                         // Choix entrees/sorties
    
LATC 0b11000000;                          // RAZ des ports
    
ANSELC 0b00011000;                        // Choix mode analogique/numerique
    
INLVLC 0b11000111;                        // Niveaux TTL
    
SLRCONC 0b11111111;                       // Slew rate
    
WPUC 0b00100000;                          // Resistances de pull-up interne
    
       
   
while(1){
    
SLEEP();  // boucle infinie
    

Sleep Mode avec un PIC16F18345
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1083
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » lun. 2 juil. 2018 08:15 lien vers la Data-Sheet : Cliquez ici

bonjour

comment fais tu pour mesurer la difference de conso, si tu rentre en mode Sleep en
quelques microseconded, met un delai
de quelques sec avant la boucle while.

Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#3 Message par jo7 » lun. 2 juil. 2018 08:53 lien vers la Data-Sheet : Cliquez ici

bonjour,
c'est à dire

Code : Tout sélectionner

// CONFIG1
#pragma config FEXTOSC = OFF        // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled)
#pragma config RSTOSC = HFINT1      // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = OFF       // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2)
#pragma config CSWEN = ON           // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = OFF          // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config MCLRE = ON           // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled)
#pragma config PWRTE = OFF          // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF           // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF        // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = SBOREN       // Brown-out Reset Enable bits (Brown-out Reset enabled according to SBOREN)
#pragma config BORV = LOW           // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = OFF        // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence))
#pragma config STVREN = OFF         // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset)
#pragma config DEBUG = OFF          // Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF            // User NVM self-write protection bits (Write protection off)
#pragma config LVP = ON             // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)

// CONFIG4
#pragma config CP = OFF             // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF            // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

#include <xc.h>

#define _XTAL_FREQ      3000000                // Oscillateur réglé à 1MHz

// PORT A
#define ICSPDAT         RA0                     // Port de programmation
#define POWER           RA1                     // Retour d etat charge batterie
#define MCLR            RA3                     // Port de programmation


/*// PORT B
#define ledR            RB7                     // +LED rouge

// PORT C
#define BP              RC5                     // Bouton poussoir*/



void main(void)
{

        
// Reglages des entrees/sorties
    
TRISA 0b00001011;                         // Choix entrees/sorties
    
LATA 0b00000000;                          // RAZ des ports
    
ANSELA 0;                                 // Choix mode analogique/numerique    
    
INLVLA 0b00000010;                        // Niveaux TTL
    
WPUA 0b00000010;                          // Resistances de pull-up interne
    
TRISB 0b01010000;                         // Choix entrees/sorties
    
LATB 0b10000000;                          // RAZ des ports
    
ANSELB 0;                                 // Choix mode analogique/numerique
    
INLVLB 0b10000000;                        // Niveaux TTL
    
SLRCONB 0b10101111;                       // Slew rate
    
WPUB 0;                                   // Resistances de pull-up interne 
    
TRISC 0b00111000;                         // Choix entrees/sorties
    
LATC 0b11000000;                          // RAZ des ports
    
ANSELC 0b00011000;                        // Choix mode analogique/numerique
    
INLVLC 0b11000111;                        // Niveaux TTL
    
SLRCONC 0b11111111;                       // Slew rate
    
WPUC 0b00100000;                          // Resistances de pull-up interne
    
    
__delay_ms(2);
    
       
   
while(
1){
    
SLEEP();  // boucle infinie
    
}  

Sleep Mode avec un PIC16F18345
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1083
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#4 Message par paulfjujo » lun. 2 juil. 2018 12:39 lien vers la Data-Sheet : Cliquez ici

avec quoi mesures tu ta consommation ?

__delay_ms(2); ?


delay_ms(5000) ; !

Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#5 Message par jo7 » lun. 2 juil. 2018 13:16 lien vers la Data-Sheet : Cliquez ici

C'est-à-dire avec quel registre ?

Sleep Mode avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » lun. 2 juil. 2018 13:32 lien vers la Data-Sheet : Cliquez ici

Bonjour ici,

jo7, si tout de suite après avoir alimenté ton PIC tu le passe en veille, comment tu peux voir la différence quand il est pas en veille ?

TU allume ton pic pendant 5 secondes , tu mesures le courant qu'il consomme , et après les 5 secondes tu le passe en veille, la tu pourras mesurer le courant en veille.

Suivant ce que consomme ton montage tu risque d’être fort déçu du mode veille ce joue a quelques milliampères .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#7 Message par jo7 » lun. 2 juil. 2018 13:40 lien vers la Data-Sheet : Cliquez ici

Bonjour Jérémy,
Il faut rajouter un delay dans la boucle while (1) ?

Sleep Mode avec un PIC16F18345
Jérémy
Administrateur du site
Administrateur du site
Messages : 2153
Âge : 39
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » lun. 2 juil. 2018 13:50 lien vers la Data-Sheet : Cliquez ici

Non avant .......

tu alimente ton PIC tu le configure .....
Tu fais 5 secondes de pause pour avoir le temps de lire la consommation du PIC en mode "normal" .
Et au bout de 5secondes tu passe en veille pour lire la consommation en mode "veille" .

Tu rempalces ton __delay_ms(2); par un __delay_ms(5000);
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#9 Message par jo7 » lun. 2 juil. 2018 13:57 lien vers la Data-Sheet : Cliquez ici

Comme ceci :

Code : Tout sélectionner

  __delay_ms(5000);
   
    while(
1){
          
SLEEP();  
      }
           


Sleep Mode avec un PIC16F18345
jo7
Débutant
Débutant
Messages : 67
Enregistré en : février 2018

#10 Message par jo7 » lun. 2 juil. 2018 13:59 lien vers la Data-Sheet : Cliquez ici

Tous les ports doivent être configurés en sortie ou en entrée ?


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité