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 à linstruction
" sleep ". Une fois dans ce mode, la PIC est placée en sommeil et
cesse dexé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.
- Loscillateur est mis à larrêt, la PIC nexécute plus aucune
instruction.
Une fois dans cet état, la PIC est à larrêt. La consommation du circuit est
réduite au minimum. Si le tmr0 est synchronisé à lhorloge interne, il est
également mis dans lincapacité de compter.
Par contre, il est très important de se rappeler que le timer du watchdog possède son
propre circuit dhorloge. 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 dentrées/sorties et
lélectronique connectée soient à des niveaux 0 ou 1 tels quil ny 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 " na réellement dintérêt
que sil est possible den sortir. La 16F84 ne réagit dans ce mode quaux
événements suivants, qui sont seuls susceptibles de replacer la 16F84 en mode de
fonctionnement normal. Ces événements sont les suivants :
- Application dun niveau 0 sur la pin MCLR. Ceci provoquera un reset de la
16F84. La PIC effectuera un reset classique à ladresse 0x00. Lutilisateur
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. Linstruction qui suit est alors exécutée au
réveil.
- Une interruption RB0/INT, RB, ou EEPROM est survenue. Notez que pour quune telle
interruption puisse réveiller le processeur, il faut que les bits de mise en service de
linterruption aient été positionnés. Par contre le bit GIE na 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 linstruction " 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 à linstruction qui suit
linstruction " 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.
- Linstruction qui suit linstruction " sleep " est
exécutée.
- Le programme se branche ensuite à ladresse 0x04 comme une interruption ordinaire.
Notez que si vous ne voulez pas exécuter linstruction qui suit
linstruction " 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
dune interruption sont tous deux à 1 au moment de linstruction
" sleep " (par exemple INTE=INTF =1), linstruction
" 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. Cest donc à vous de remettre éventuellement ces bits à 0. Le bit PD
vous permettra de savoir si votre instruction " sleep " sest
exécutée (PD = 0).
Notez également que dans le cas où linstruction " sleep "
nest pas exécutée, votre watchdog nest 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 linstruction " 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 dinitialisation (attention, en
banque1)
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
linstruction suivante. Voilà donc un programme de clignotement de votre LED
ultracourt et avec une consommation minimale.
16.7 Cas typiques dutilisation |
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 na rien à
faire dans lattente dun événement extérieur particulier. Dans ce cas,
plutôt que dutiliser des boucles sans fin, une instruction
" sleep " pourra faire efficacement laffaire.
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
dapplications pour ce mode très pratique et très simple à gérer.
|