TP 2 : Utilisation des Timers

Warning: unknown toc layout

1. Utilisation du Timer 0 sans interruption

Nom du projet : TIMER1

Ce premier exercice consiste à faire clignoter la LED1 avec une période de clignotement comprise entre 1 et 2s (c'est à dire que le cycle LED1 allumée et LED1 éteinte devra durer entre 1 et 2s).

  1. Créer un nouveau projet nommé TIMER1 sur la base du projet précédent (dans MPLabX, un clic droit sur le projet précédent permet de réaliser une copie du projet et de lui donner un nom).
  2. Avant la boucle infinie de la fonction main(), configurer le timer 0 pour atteindre la période désirée sur le signal de dépassement de capacité TMR0IF.
  3. Configurer également la broche pour la LED1 en sortie.
  4. Ecrire le code dans la boucle infinie de la fonction main() pour obtenir le clignotement désiré de la LED1.

2. Utilisation du Timer 2 sans interruption

Nom du projet : TIMER2

Le choix du Timer 2 permet de mettre en place une base de temps plus précise.

Moyennant l'introduction d'un compteur intermédiaire, il est alors possible de faire clignoter la LED2 avec précision à une fréquence de 1Hz (0.5s allumée puis 0.5s éteinte).

  1. Réaliser une copie du projet TIMER1 et la nommer TIMER2
  2. Configurer le Timer 2 pour que l'indicateur TMR2IF soit actif toutes les 5ms (code avant la boucle infinie).
  3. Dans la boucle infinie, comptabiliser les passages à 1 de l'indicateur TMR2IF et exploiter ce comptage pour allumer la LED2 durant 0.5s puis la maintenir éteinte durant 0.5s .
  4. Tester le programme.

3. Variante exploitant le Timer 2 avec un traitement par interruption

Nom du projet : TIMER3

Dans l'exercice précédent, l'indicateur TMR2IF est mis à 1 toutes les 5ms. Son traitement par la boucle principale du programme implique que celle-ci ait une durée inférieure à ces 5ms sous peine de passer à côté de certains cycles de TMR2IF.

Une solution plus satisfaisante consiste à traiter l'informatoin périodique envoyée par le Timer 2 en exploitant les interruptions du processeur.

Reprenons les résultats du TD 4 portant sur le dispositif de traitement des interruptions dans les PIC18F4550. Pour traiter une source d'interruption, il convient de mettre en place les éléments suivants :

  1. Réaliser une copie du projet TIMER2 et la nommer TIMER3.
  2. Au début de la fonction main, à la suite de la configuration des périphériques :
    1. Autoriser les interruptions du périphérique que l'on souhaite exploiter par interruption. Pour le Timer 2, l'interruption est signalée par TMR2IF et l'autorisation se fait en affectant TMR2IE.
    2. Choisir le niveau de priorité Haut ou Bas de l'interruption pour ce périphérique en spécifiant la valeur adéquat pour TMR2IP et préciser que le dispositif de traitement prioritaire est utilisé (IPEN).
    3. Autoriser les interruptions en provenance des périphériques en affectant GIEL/PEIE si des interruptions de Bas niveau de priorité doivent être prises en charge.
    4. Autoriser les interruptions de façon gloable via le bit GIEH/GIE.
  3. Ecriture de la fonction de traitement des interruptions :
    1. La mettre en place avant la fonction main en utilisant les directives de compilation spécifiant au compilateur que c'est la fonction d'interruption et le niveau de priorité traité (voir le Manuel de l'Utilisateur du compilateur XC8).
    2. Dans la fonction d'interruption, déceler l'origine de l'interruption en testant les bits IF des sources potentielles (par exemple TMR2IF pour le Timer 2) et écrire le traitement adéquat.
  4. Reprendre les indications rappelées ci-dessus pour rendre effectives les interruptions du Timer 2.
  5. Dans la zone de déclaration des variables globales, c'est à dire avant toutes fonctions du programme, déclarer une variable nommée Indicateur500ms avec un type uint8_t .
  6. Dans la fonction d'interruption, traiter la demande spécifiée par TMR2IF et faire en sorte que l'indicateur Indicateur500ms soit mis à 1 chaque fois que 500ms se sont écoulées.
  7. Dans la boucle du programme principal, contrôler à chaque cycle la valeur d'Indicateur500ms afin de changer l'état de la LED3 comme c'était le cas dans l'exercice précédent.
  8. Tester le programme.