Le Timer 2 est un outil très pratique pour générer des interruptions à intervalles réguliers. Il est très utile pour les applications qui nécessitent une précision temporelle, telles que les systèmes de contrôle industriel ou les systèmes embarqués. Dans cet article, nous allons voir comment utiliser le Timer 2 pour générer une interruption toutes les secondes. Nous verrons comment configurer le Timer 2 et comment le programmer pour générer des interruptions à intervalles réguliers.
Générer une interruption toutes les secondes à l’aide du Timer 2
Présentation
Ce programme génère une interruption toutes les secondes à l’aide du Timer 2 et allume brièvement une LED
Cette base utilise la librairie MsTimer2 décrite ici : http://www.arduino.cc/playground/Main/MsTimer2
Ce programme utilise les fonctionnalités suivantes :
- Utilise interruption du Timer 2 à intervalle régulier
Matériel Nécessaire
L’espace de développement Arduino
- … pour éditer, compiler le programme et programmer la carte Arduino.

Le matériel suivant pour réaliser le montage associé
- une plaque d’essai pour montage sans soudures,

- des straps,

- une LED rouge 5mm,

- une résistance 1/4w de 200 Ohms environ,

Instructions de montage
- Connecter sur la broche 2 (configurée en sortie) une LED et sa résistance en série connectée à la masse
Le schéma théorique du montage

Le schéma théorique du montage
Le circuit du montage

Le schéma du montage à réaliser
Explication du programme
Structure globale du programme
Ce programme simple comprend :
- une entête déclarative
- une partie « configuration » qui ne sera exécutée qu’une fois (fonction setup( ) )
- une partie constituée d’une boucle sans fin que le programme répètera à l’infini ( fonction loop( ) ) : c’est le coeur du programme.
Déroulement du programme
Le programme se déroule de la façon suivante :
- Après avoir pris en compte les instructions de la partie déclarative,
- puis après avoir exécuté la partie configuration ( fonction setup( ) ),
- le programme bouclera sans fin ( fonction loop ( ) ), exécutant de façon répétée le code compris dans la boucle sans fin.
- à chaque fois que l’interruption surviendra, le programme exécutera instantanément la fonction de gestion de l’interruption.

Le déroulement du programme
Au niveau de la partie déclarative :
Inclusion des librairies utilisées
- On inclut les librairies des fonctionnalités utilisées :
- include <MsTimer2.h> // inclusion de la librairie Timer2
Déclaration de constantes utiles
- On déclare les constantes utiles dans le programme :
Déclaration des constantes de broches
- Déclaration des constantes pour les broches utilisées dans le programme :
const int LED=2; //declaration constante de broche
Au niveau de la fonction d’initialisation setup( ) :
Initialisation des fonctionnalités utilisées :
- On initialise les différentes fonctionnalités utilisées :
configuration des broches utilisées :
- Configuration des broches en sortie :
pinMode(LED, OUTPUT); //met la broche en sortie
- Initialisation de l’interruption du Timer 2 à intervalle régulier en fixant le délai à 500ms, et activation du Timer 2 :
// initialisation interruption Timer 2 MsTimer2::set(500, InterruptTimer2); // période 500ms MsTimer2::start(); // active Timer2
Au niveau de la boucle principale, la fonction loop ( ) :
- Le programme tourne en boucle à ce niveau sans rien faire, tant qu’aucune interruption ne survient. Lorsqu’une interruption survient, le programme « saute » à la fonction de gestion de l’interruption du Timer 2.
Se reporter aux commentaires présents dans le programme pour plus de détails.
Autres Fonctions du programme :
- La fonction de gestion de l’interruption du Timer 2 permet d’allumer transitoirement la LED. Noter l’utilisation de la fonction delayMicrosconds() et non delay() qui stoppe les interruptions.
void InterruptTimer2() { // debut de la fonction d'interruption Timer2 digitalWrite(LED, HIGH); delayMicroseconds(10000); // la fonction delayMicroseconds ne bloque pas les interruptions digitalWrite(LED, LOW); }
Mise en oeuvre du programme
Préparation du montage et programmation de la carte Arduino :
- Commencer par réaliser le montage indiqué sur plaque d’expérimentation
- Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle
Fonctionnement
- La LED émet un flash toute les 500 millisecondes très exactement.
Le programme complet en langage Arduino :
A copier/coller directement dans l’éditeur Arduino
// --- Programme Arduino --- // par X. HINAULT - Le 24/02/2010 // www.mon-club-elec.fr // --- Que fait ce programme ? --- /* génère une interruption toutes les secondes à l'aide du Timer 2 et allume brièvement une LED*/ // --- Fonctionnalités utilisées --- // Utilise interruption du Timer 2 à intervalle régulier // --- Circuit à réaliser --- // Connecter sur la broche 2 (configurée en sortie) une LED et sa résistance en série connectée à la masse //**************** Entête déclarative ******* // A ce niveau sont déclarées les librairies, les constantes, les variables... // --- Inclusion des librairies utilisées --- #include <MsTimer2.h> // inclusion de la librairie Timer2 // --- Déclaration des constantes --- // --- constantes des broches --- const int LED=2; //declaration constante de broche // --- Déclaration des variables globales --- // --- Déclaration des objets utiles pour les fonctionnalités utilisées --- //**************** FONCTION SETUP = Code d'initialisation ***** // La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme void setup() { // debut de la fonction setup() // --- ici instructions à exécuter au démarrage --- // ------- Broches en sortie ------- pinMode(LED, OUTPUT); //met la broche en sortie // ------- Broches en entrée ------- // ------- Activation du rappel au + interne des broches en entrée si nécessaire ------- // initialisation interruption Timer 2 MsTimer2::set(1000, InterruptTimer2); // période 1000ms MsTimer2::start(); // active Timer 2 } // fin de la fonction setup() // ******************************************************************************** //*************** FONCTION LOOP = Boucle sans fin = coeur du programme ************* // la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension void loop(){ // debut de la fonction loop() // --- ici instructions à exécuter par le programme principal --- } // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin // ******************************************************************************** //*************** Autres Fonctions du programme ************* void InterruptTimer2() { // debut de la fonction d'interruption Timer2 digitalWrite(LED, HIGH); delayMicroseconds(10000); // la fonction delayMicroseconds ne bloque pas les interruptions digitalWrite(LED, LOW); //output = !output; } // --- Fin programme ---
Articles similaires:
- Produire un son de « sirène de police ».
- Test simple d’incrémentation d’une valeur à l’aide de l’encodeur rotatif
- Test d’un encodeur rotatif et affichage dans le Terminal série du logiciel Arduino
- Faire clignoter une LED
- Commander un relais à l’aide d’un BP avec une carte Arduino
Articles Liés
- Affichage simple de l'heure sur un module couleur S65 Shield (interruption toutes les millisecondes)
Le module couleur S65 Shield est un dispositif pratique et facile à utiliser pour afficher…
- Affiche le comptage simple des secondes dans le Terminal Série
Le Terminal Série est un outil puissant qui permet aux utilisateurs de communiquer avec des…
- Compter les impulsions en provenance d'un opto-coupleur en fourche en utilisant une interruption externe
L'utilisation d'un opto-coupleur en fourche pour compter les impulsions peut être une tâche complexe. Cependant,…