Go Down

Topic: [Résolu] Sortir du mode sleep dans 2 cas. (Read 1 time) previous topic - next topic

geryko

Sep 04, 2015, 09:25 pm Last Edit: Sep 06, 2015, 10:57 am by geryko
Bonsoir,

- J'ai une carte Mega2560 / IDE1.0.5-r2
- J'arrive à mettre en mode sleep, réveil par interruption sur pin 3
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // pour int matériel   
ou
- J'arrive à mettre en mode sleep, réveil par interruption Timer1 (débordement)
 set_sleep_mode(SLEEP_MODE_IDLE);  //  pour le timer 1
mais impossible de combiner les 2.

En fait, je voudrais sortir du mode sleep dans les 2 cas :
1) interruption matérielle  (sur ma demande pour traiter un cas)
2) interruption timer1 toutes les 5 mn pour effectuer ne vérification périodique.

Est-ce possible ?  OUI/NON
si OUI, un lien ou une explication svp

Merci
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

geryko

Bonjour,
De plus je ne comprends pas le différence entre sleep_mode() et sleep_cpu() (en anglais)
J'ai essayé les 2 combinaisons et de nombreuses autres mais sans succès.

Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

dfgh

 :)  http://www.avrfreaks.net/forum/difference-between-sleepcpu-and-sleepmode

geryko

Bonjour à tous,

Merci dfgh,
D'accord, j'ai à peu près compris 75% et je peux approfondir si nécessaire.
Mais il semblerait que mon problème principal ne soit pas là.

On dirait que durant le sommeil,
- le timer1 ne compte pas ? ou
- le timer1  ne réveille pas ?  Je ne sais pas ce qui se passe.
Au réveil, par l'interruption extérieur, l'interruption timer fonctionne.
Je repose ma  question autrement :
En supposant un paramétrage correct :
Peut-on avoir un réveil de 2 sources (interruption ext ou/et interruption timer1)
Si oui, je vais encore chercher mais si quelqu'un à une piste .... je suis preneur.  Merci d'avance.

Depuis 2 jours à plein temps j'ai essayé de nombreuses combinaisons eu jonglant avec les registres concernés.
Retraité, le temps ne compte pas beaucoup.

PS :
@_pepe_  : Grand merci, ça me semble plus détaillé, Il faut que j'étudie tes réponses.
  Tes 2 messages m'ont court-circuité
Géry
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

geryko

Bonjour,

Merci _pepe_ . Mon problème vient surtout du fait que je suis nul en anglais.

J'avais bien vu ce tableau mais je ne savais pas l'interpréter.
Je pense maintenant avoir compris le principal :
 - Un seul mode possible (exclusif) 
 - Utiliser impérativement le timer2
C'est bien cela ?

Je repars pour des essais et j'espère que ça devrait fonctionner.
A bientôt
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

geryko

#5
Sep 05, 2015, 04:33 pm Last Edit: Sep 05, 2015, 04:33 pm by geryko
re Bonjour ,

Je tombe sur un autre problème que j'avais mal évalué.

En utilisant le timer2 durant un mode sleep, j'ai une interruption toutes les 16384 us. (tempo maxi)
Donc une sortie du mode sleep ? C'est bien cela ?

Comme je voudrais une tempo de plusieurs minutes ça devient ridicule d'utiliser le timer2.
Je pourrais y mettre une horloge RTC (PCF8563) , j'en ai une mais je voudrais l'éviter.
A moins que quelqu'un ait une autre idée ?

Mon raisonnement est-il correct ?
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

Christian_R

On peut enchaîner des micro réveils, toutes les 8s par exemple, on incrémente juste un compteur et on se rendort aussitôt,jusqu'à écoulement d'un laps de temps plus long voulu.
Christian

fdufnews

En même temps, réveiller le micro toutes les 16ms s'il se rendort tout de suite ne grèvera pas vraiment le budget consommation.
Si lors du réveil, tu décrémentes un compteur et que tu le rendors si le compteur n'est pas à zéro cela te prendra quelques microsecondes seulement.

geryko

Re Bonjour,

Oui, je suis d'accord avec vous mais comme je le disais, ça me semble ridicule de se réveiller toutes les 16 ms. pour un timer devant atteindre plusieurs minutes.

Mais s'il n'y a pas d'autre solution, je ferai du comptage.
J'attends encore un peu avant de marquer "résolu" car dans ce cas il faut encore tester.

Plaisanteries :
Juste le temps de s'endormir. Pas le temps de rêver.
Et puis le processeur va fatiguer inutilement !
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

geryko

Bonsoir;

Je n'avais pas compris que Christian_R proposait d'utiliser le watchdog.

Mais l'idée m'en était venue.
Je viens de le tester mais il y a reset à chaque fois ! (toutes les 8 sec)

Serait il possible de garder l'interruption WD sans faire le reset ?
J'ai essayé de jouer avec les différents registres sans succès.

Ce n'est peut-être pas possible ?
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

geryko

Bonsoir ou plutôt bonjour !

@_pepe_.
Je viens réussir. C'est en voulant t'informer que j'ai découvert ton message.
Il me reste à "nettoyer" et à voir ton lien pour comparer mais à cette heure = dodo.
A Demain.
Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

Christian_R

mais à cette heure = dodo.
A Demain.
Si le mode sleep a été correctement programmé, Geryko devrait se réveiller après int delay = nuit et revenir sur le forum ;)
Christian

geryko

Bonjour,

Je confirme, il est donc possible de sortir du mode sleep de 2 manières combinées.
- interruption matérielle :   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
- interruption watchdog,  (sans provoquer reset)
Le lien indiqué par _pepe_ est super pour paramétrer le WD.
- la méthode pour positionner les bits est plus simple à lire que "MCUSR &= ~(1<<WDRF)"
que la mienne.

Un grand merci à  dfgh, Christian_R, fdufnews et _pepe_ pour leur aide.
3 jours à temps complet, mais quand on aime on ne compte pas.
Mon problème c'est l'anglais.
Cordialement
Géry

Lorsque vous avez la solution, la donner et marquer le titre du 1er post [Résolu] .     Géryko

Go Up