Logo Mon Club Elec

Générer une interruption toutes les secondes à l’aide du Timer 2

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.
Générer une interruption toutes les secondes à l’aide du Timer 2

Le matériel suivant pour réaliser le montage associé

  • une plaque d’essai pour montage sans soudures,
Générer une interruption toutes les secondes à l’aide du Timer 2
  • des straps,
Générer une interruption toutes les secondes à l’aide du Timer 2
  • une LED rouge 5mm,
Générer une interruption toutes les secondes à l’aide du Timer 2
  • une résistance 1/4w de 200 Ohms environ,
Générer une interruption toutes les secondes à l’aide du Timer 2

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

Générer une interruption toutes les secondes à l’aide du Timer 2
Le schéma théorique du montage

Le circuit du montage

Générer une interruption toutes les secondes à l’aide du Timer 2
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.
Générer une interruption toutes les secondes à l’aide du Timer 2
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 :
  1. 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 ---

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.