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 ---
- 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 ---
Modérateur : Jérémy
Watchdog et mode sleep
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
MA platine de pilotage des stores bannes est presque finie . Pour le moment je l'alimente en direct avec une alim classique branchée sur le secteur. Par la suite tout se petit monde sera branché dans un boiter, hors de portée de tous ( escabeau).
Mon but est donc de consommé le moins possible. Surtout que par le suite le module volet piscine risque d'être sur pile !!!. Pour ce faire j'ai choisi d'endormir le module radio ET le PIC pendant 2 secondes et de le réveiller pendant 500ms. ceci pour faire des tests dans un premier temps; j'affinerai les valeurs des temps par la suite ( veille profonde et somnambule).
Je voudrais vous montrer ma procédure ( qui fonctionne) de mise et en veille et du réveil de mon pic en utilisant le watchdog. Peut être pourriez partager une procédure plus "fonctionnelle", car je ne suis vraiment pas accoutumé de cette procédure
J'ai le timer 0 qui toutes les 5 secondes lève le flag F_Seep . cela signifie que c'est l'heure de s'endormir. je vous met que la partie intéressante du programme mais s'il faut je vous mettrais tous!
LE truc qui me chiffonne, c'est que j’enlève l'instruction asm CLRWDT ; dans la boucle principale, le module ne passe plus en veille ! pourtant au réveil je pense que j'ignore le bit du watchdog avec SWDTEN_bit = 0; . Car il n'ai pas possible je crois d’éteindre le watchdog en cours de programme car le registre se trouve dans le CONFIG1
Toutes lumières est la bienvenue pour éclairer ma chandelle ;
Merci
MA platine de pilotage des stores bannes est presque finie . Pour le moment je l'alimente en direct avec une alim classique branchée sur le secteur. Par la suite tout se petit monde sera branché dans un boiter, hors de portée de tous ( escabeau).
Mon but est donc de consommé le moins possible. Surtout que par le suite le module volet piscine risque d'être sur pile !!!. Pour ce faire j'ai choisi d'endormir le module radio ET le PIC pendant 2 secondes et de le réveiller pendant 500ms. ceci pour faire des tests dans un premier temps; j'affinerai les valeurs des temps par la suite ( veille profonde et somnambule).
Je voudrais vous montrer ma procédure ( qui fonctionne) de mise et en veille et du réveil de mon pic en utilisant le watchdog. Peut être pourriez partager une procédure plus "fonctionnelle", car je ne suis vraiment pas accoutumé de cette procédure
J'ai le timer 0 qui toutes les 5 secondes lève le flag F_Seep . cela signifie que c'est l'heure de s'endormir. je vous met que la partie intéressante du programme mais s'il faut je vous mettrais tous!
Code : Tout sélectionner
while (1){
// je met le module en veille
// SWDTEN_bit = 1; // j'active le watchdog
// asm sleep ; // j'endors le PIC pour 2 secondes et il se reveilera grace au watchdog
// je reveil le module radio
// je lance de timer de reveil environ
if (F_Sleep == 1){ // C'est l'heure de dormir
F_Sleep = LED = 0;
Sleep_mode_on(); // je met le module radio en veille avanbt d'eteidnre les INT
GIE_bit = 0; // j'eteins les int
SWDTEN_bit = 1; // j'active le watchdog configurer sur 2s
asm CLRWDT ;
asm sleep ; // j'endors le PIC pour 2 secondes et il se reveilera grace au watchdog pour uneb durer determiner par le timer 0
asm nop ;
SWDTEN_bit = 0; // J'éteins le watchdog
Sleep_mode_off(); // Je réveil le module radio
TMR0 = 61; // TMR0 Preload = 61
CPT_100ms = Valeur = 0;
GIE_bit = 1;
LED=1;
}
asm CLRWDT ;
// reception d'une donnée
if (F_DATA_OK == 1){
F_DATA_OK =0; // raz flag
// je dois effacer le compteur de sommeil
switch (DATA){
case STOP_Ban : Montee_D = Montee_G = Descend_D = Descend_G = 0; break;// j'éteins les moteurs
case Monte_Ban_G : Montee_G = 1; /*allume un compteur de seconde*/ break;
case Descend_Ban_G : Descend_G = 1; /*allume un compteur de seconde*/ break;
case Monte_Ban_D : Montee_D = 1; /*allume un compteur de seconde*/ break;
case Descend_Ban_D : Descend_D = 1; /*allume un compteur de seconde*/ break;
case Monte_Ban_GD : Montee_G = Montee_D = 1; /*allume un compteur de seconde*/ break;
case Descend_Ban_GD : Montee_G = Montee_D = 0; /*allume un compteur de seconde*/ break;
case Reveil : asm nop; break;// compteur de sleep;break;
default: Montee_D = Montee_G = Descend_D = Descend_G = 0;
}
}
}
}
LE truc qui me chiffonne, c'est que j’enlève l'instruction asm CLRWDT ; dans la boucle principale, le module ne passe plus en veille ! pourtant au réveil je pense que j'ignore le bit du watchdog avec SWDTEN_bit = 0; . Car il n'ai pas possible je crois d’éteindre le watchdog en cours de programme car le registre se trouve dans le CONFIG1
Toutes lumières est la bienvenue pour éclairer ma chandelle ;
Merci
Watchdog et mode sleep
Bonjour Jérémy, et tout le forum,
Pour le réglage des temps pour le watchdog c'est le registre WDTCON qui peut aller de 1ms à 256s.
_WDTE_OFF watchdog et hors service
_WDTE_SWDTEN watchdog et contrôlé par le bit SWDTEN dans le registre WDTCON
_WDTE_NSLEEP watchdog activé pendant l'exécution et désactivé en mode veille
_WDTE_ON watchdog et en service
La mise en service ou l’arrêt du watchdog se décide au moment de la programmation du PIC
Donc, c'est vrai qu'il n'est pas possible d'éteindre le watchdog en cours du programme, mais tu peux rallonger les temps
Chaque fois que l’instruction clrwdt est envoyé au PIC, le timer du watchdog est remis à 0
Il ne faut jamais utiliser l’instruction clrwdt dans une routine d’interruption.
Je vais réfléchir si je vois une solution à ton problème, sinon il y les interruptions de réveille par Pin.
Ça c'est ce que j'ai appris avec notre maître ASM, à lire le cours 1 de monsieur Bigonoff, Dommage qu'il n'existe pas un Bigonoff en C
Jérémy ce mets à ASM, c'est Gérard qui va être content.....
A+
Pour le réglage des temps pour le watchdog c'est le registre WDTCON qui peut aller de 1ms à 256s.
_WDTE_OFF watchdog et hors service
_WDTE_SWDTEN watchdog et contrôlé par le bit SWDTEN dans le registre WDTCON
_WDTE_NSLEEP watchdog activé pendant l'exécution et désactivé en mode veille
_WDTE_ON watchdog et en service
La mise en service ou l’arrêt du watchdog se décide au moment de la programmation du PIC
Donc, c'est vrai qu'il n'est pas possible d'éteindre le watchdog en cours du programme, mais tu peux rallonger les temps
Chaque fois que l’instruction clrwdt est envoyé au PIC, le timer du watchdog est remis à 0
Il ne faut jamais utiliser l’instruction clrwdt dans une routine d’interruption.
Je vais réfléchir si je vois une solution à ton problème, sinon il y les interruptions de réveille par Pin.
Ça c'est ce que j'ai appris avec notre maître ASM, à lire le cours 1 de monsieur Bigonoff, Dommage qu'il n'existe pas un Bigonoff en C
Jérémy a écrit :Source du messagel'instruction asm CLRWDT ; dans la boucle principale
Jérémy ce mets à ASM, c'est Gérard qui va être content.....
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 39 invités