<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

 

La Programmation des pics
par Bigonoff
Premiere partie - pic 16f84 - Révision 4

Téléchargement des fichiers originels ici
Publié le 26/10/2001

16. Le mode Sleep

Index coursIndex du cours
Chapitre précédent15. Le watchdog
Chapitre suivant17. Le reste du datasheet

 

16. Le mode Sleep

Nous allons étudier dans cette leçon un mode très particulier des PICs, qui leur permet de se mettre en sommeil afin de limiter leur consommation.

16.1 Principe de fonctionnement

Le mode " sleep " ou " power down " est un mode particulier dans lequel vous pouvez placer votre PIC grâce à l’instruction " sleep ". Une fois dans ce mode, la PIC est placée en sommeil et cesse d’exécuter son programme. Dès réception de cette instruction, la séquence suivante est exécutée :

  • Le watchdog est remis à 0, exactement comme le ferait une instruction " clrwdt ".
  • Le bit TO du registre STATUS est mis à 1.
  • Le bit PD du registre STATUS est mis à 0.
  • L’oscillateur est mis à l’arrêt, la PIC n’exécute plus aucune instruction.

Une fois dans cet état, la PIC est à l’arrêt. La consommation du circuit est réduite au minimum. Si le tmr0 est synchronisé à l’horloge interne, il est également mis dans l’incapacité de compter.

Par contre, il est très important de se rappeler que le timer du watchdog possède son propre circuit d’horloge. Ce dernier continue de compter comme si de rien n’était.

Pour profiter au maximum de la chute de la consommation (montage sur piles par exemple), Microchip recommande de veiller à ce que les pins d’entrées/sorties et l’électronique connectée soient à des niveaux 0 ou 1 tels qu’il n’y ait aucun passage de courant qui résulte du choix de ces niveaux.

16.2 La sortie du mode " sleep "

Le passage en mode " sleep " n’a réellement d’intérêt que s’il est possible d’en sortir. La 16F84 ne réagit dans ce mode qu’aux événements suivants, qui sont seuls susceptibles de replacer la 16F84 en mode de fonctionnement normal. Ces événements sont les suivants :

  • Application d’un niveau 0 sur la pin MCLR. Ceci provoquera un reset de la 16F84. La PIC effectuera un reset classique à l’adresse 0x00. L’utilisateur pourra tester les bits TO et PD lors du démarrage pour vérifier l’événement concerné (reset, watch-dog, ou mise sous tension).
  • Ecoulement du temps du timer du watchdog. Notez que pour que cet événement réveille la PIC, il faut que le watchdog ait été mis en service dans les bits de configuration. Dans ce cas particulier, le débordement du watchdog ne provoque pas un reset de la PIC, il se contente de la réveiller. L’instruction qui suit est alors exécutée au réveil.
  • Une interruption RB0/INT, RB, ou EEPROM est survenue. Notez que pour qu’une telle interruption puisse réveiller le processeur, il faut que les bits de mise en service de l’interruption aient été positionnés. Par contre le bit GIE n’a pas besoin d’être mis en service pour générer le réveil de la PIC. Vous pouvez donc décider par exemple de réveiller la PIC à la fin du cycle d’écriture EEPROM. Pour ce faire, vous devez mettre le bit EEIE de INTCON à 1 et lancer le cycle d’écriture, suivi par l’instruction " sleep " Une fois l’écriture terminée, la PIC est réveillée et poursuit son programme.
16.3 Réveil avec GIE hors service.

Si votre PIC est réveillée par une interruption alors que le BIT GIE de INTCON est mis à 0, le programme se poursuivra tout simplement à l’instruction qui suit l’instruction " sleep ".

16.4 Réveil avec GIE en service

Dans le cas où votre bit GIE est positionné, un réveil suite à une interruption entraînera la séquence suivante.

  • L’instruction qui suit l’instruction " sleep " est exécutée.
  • Le programme se branche ensuite à l’adresse 0x04 comme une interruption ordinaire.

Notez que si vous ne voulez pas exécuter l’instruction qui suit l’instruction " sleep ", il vous suffit de placer à cet endroit une instruction " nop ".

16.5 Mise en sommeil impossible

Si le bit GIE est positionné à 0, et que les bits de mise en service et le flag d’une interruption sont tous deux à 1 au moment de l’instruction " sleep " (par exemple INTE=INTF =1), l’instruction " sleep " est tout simplement ignorée par le processeur.

Ceci est logique, car les conditions de réveil sont déjà présentes avant la mise en sommeil. C’est donc à vous de remettre éventuellement ces bits à 0. Le bit PD vous permettra de savoir si votre instruction " sleep " s’est exécutée (PD = 0).

Notez également que dans le cas où l’instruction " sleep " n’est pas exécutée, votre watchdog n’est pas non plus remis à 0. Si vous deviez le faire à ce moment, et si vous n’êtes pas sûr de la bonne exécution de " sleep ", ajoutez l’instruction " clrwdt " avant cette instruction.

16.6 Utilisation du mode " sleep "

Nous allons réaliser un petit exercice sur la mise en veille de notre PIC.

Effectuez un copier/coller de votre nouveau fichier " m16F84.asm " et renommez-le en " sleep.asm " Créez un nouveau projet. [ NDLR : Fichiers exemples ici ]

Placez le prédiviseur sur le watchdog avec une valeur de 32. Ceci nous donne une valeur typique de débordement de 18ms*32 = 576 ms.

OPTIONVAL EQU H'008D' ; Valeur registre option
      ; préscaler Wdt = 32

Définissez votre LED sur la pin RA2

#DEFINE LED PORTA,2 ; LED de sortie

Placez ensuite votre LED en sortie dans la routine d’initialisation (attention, en banque1)

  bcf LED ; LED en sortie

Ecrivons ensuite notre programme principal :

;*********************************************************************
; PROGRAMME PRINCIPAL
;*********************************************************************
start      
  bsf LED ; Allumage de la LED
  sleep   ; mise en sommeil
  bcf LED ; extinction de la LED
  sleep   ; mise en sommeil
  goto start ; boucler

Le fonctionnement est très simple. Après avoir allumé ou éteint la LED, la PIC est mise en sommeil. Une fois le temps du watchgog écoulé, la PIC se réveille et exécute l’instruction suivante. Voilà donc un programme de clignotement de votre LED ultracourt et avec une consommation minimale.

16.7 Cas typiques d’utilisation

Ce mode de fonctionnement est principalement utilisé dans les applications dans lesquelles la consommation en énergie doit être économisée (piles). On placera donc dans ce cas la PIC en mode " Power Down " ou " sleep " aussi souvent que possible.

Une autre application typique est un programme dans lequel la PIC n’a rien à faire dans l’attente d’un événement extérieur particulier. Dans ce cas, plutôt que d’utiliser des boucles sans fin, une instruction " sleep " pourra faire efficacement l’affaire.

16.8 Conclusion

Vous êtes maintenant capable de placer une PIC en mode de sommeil afin d’économiser au maximum l’énergie. Je ne doute pas que vous trouverez des tas d’applications pour ce mode très pratique et très simple à gérer.


 

Index cours
Index du cours
Chapitre précédent
15. Le watchdog
Chapitre suivant
17. Le reste du datasheet

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_cours16.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail