View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

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

ARDUINO - INITIATION - INTERRUPTION - TIMER
Par X. HINAULT - Créé le 24/02/2010

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 :
  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 ---