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 |

8 LEDs en Compteur BCD

ARDUINO - INITIATION - LED
Par X. HINAULT - Créé le 08/05/2010

1.  Présentation

Ce programme réalise un affichage en compteur BCD sur 8 LEDs : chaque groupe de 4 LED compte de 0 à 9. Chaque LED visualise directement l'état d'un bit de l'octet utilisé pour le comptage de chaque groupe BCD. Ce programme est à visée purement didactique afin de comprendre ce qui se passe à l'intérieur d'un octet du microcontrôleur lorsque l'on réalise un comptage BCD.

2.  Note théorique

Pour des raisons techniques, on utilise pour l'affichage sur digits un comptage dit "BCD" qui est en fait un comptage binaire tronqué, de 0 à 9 selon :

DécimalBinaire
00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
00000
10001

3.  Matériel Nécessaire

3.1  L'espace de développement Arduino

  • ... pour éditer, compiler le programme et programmer la carte Arduino.

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

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • 4 LEDs rouge 5mm,
  • 4 LEDs vertes 5mm,
  • 8 résistances 1/4w de 270 Ohms,

4.  Instructions de montage

  • Connecter sur la broche 4 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 5 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 6 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 7 (configurée en sortie) une LED rouge et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 8 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 9 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 10 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V
  • Connecter sur la broche 11 (configurée en sortie) une LED verte et sa résistance 270 en série connectée au 0V

5.  Le schéma théorique du montage


Le schéma théorique du montage

6.  Le circuit du montage


Le schéma du montage à réaliser

7.  Explication du programme

7.1  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.

7.2  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.

Le déroulement du programme

8.  Au niveau de la partie déclarative :

Déclaration des constantes de broches

  • Déclaration des constantes pour les broches utilisées dans le programme : on déclare ici un tableau de constantes dont chaque valeur correspond aux broches utilisées.

Il est pratique d'utiliser un tableau dès lors que l'on va utiliser une action répétée sur plusieurs broches. Chaque broche sera ainsi accessible à l'aide de l'index du tableau, avec l'index 0 pour la première valeur. Un truc de programmation qui vous fera écrire des programmes propres.


const int LED[8]={4,5,6,7,8,9,10,11}; // déclare un tableau de 8 constantes de broches
// la broche 4 correspond au bit de poids faible (index 0 du tableau)
// la broche 11 correspond au bit de poids fort (index 8 du tableau)

Déclaration des variables globales

  • Déclaration des variables globales du programmes : on déclare une variable pour le comptage.

int compteur1=0; //variable de comptage BCD n°1
int compteur2=0; //variable de comptage BCD n°2

Déclarations des objets utiles pour les fonctionnalités utilisées

  • Déclaration des objets utiles pour les fonctionnalités utilisées :

9.  Au niveau de la fonction d'initialisation setup( ) :

configuration des broches utilisées :

  • Configuration des broches en sortie : on met les 8 broches en sortie à l'aide d'une boucle for :

// met les 8 broches en sortie
for (int i=0; i<=7; i++) { // boucle de défilement des 8 broches

  pinMode(LED[i], OUTPUT); //met la broche en sortie 

}

10.  Au niveau de la boucle principale, la fonction loop ( ) :

  • Au sein d'une boucle, on passe en revue les 4 bits de la variable de comptage n°1 à l'aide de l'instruction bitRead et on met la broche correspondante dans le même état à l'aide de l'instruction digitalWrite. On fait la même chose pour la variable de comptage n°2.

for (int i=0; i<=3; i++) { // boucle de défilement des 4 bits BCD de poids faible

  // met la broche LED[i] dans l'état du bit de rang i de la variable compteur 1
  digitalWrite(LED[i],bitRead(compteur1,i));
}

for (int j=4; j<=7; j++) { // boucle de défilement des 4 bits BCD de poids fort

  // met la broche LED[j] dans l'état du bit de rang j-4 de la variable compteur 2
  digitalWrite(LED[j],bitRead(compteur2,j-4));
}

  • On incrémente la variable de comptage n°1, que l'on remet à 0 lorsqu'elle vaut 9, ce qui correspond au comportement d'un comptage BCD. On incrémente le compteur n°2 à chaque remise à zéro du compteur n°1. On met à 0 le compteur n°2 lorsqu'il vaut 10.
  • Une instruction delay vient assurer un pause entre chaque incrémentation.
  • L'ensemble aboutit à un comptage BCD de 0 à 9 sur chaque groupe de 4 bits.

// --- chaque compteur compte de 0 à 9 puis RAZ --- 

compteur1=compteur1+1; //incrémente le 1er compteur

if (compteur1==10) {
  compteur1=0; // RAZ compteur n°1
  compteur2=compteur2+1; // incrémente compteur n°2
  if (compteur2==10) compteur2=0; // RAZ compteur 2
}  

delay (250); // pause fixant la vitesse du comptage

  • Le programme recommence en boucle les instructions de la fonction loop( ).

Se reporter aux commentaires présents dans le programme pour plus de détails.

11.  Mise en oeuvre du programme

11.1  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

11.2  Fonctionnement

  • Les LEDs affichent un comptage BCD (soit de 0000 à 1001) sur chaque groupe de 4 bits.

12.  Le programme complet en langage Arduino :

A copier/coller directement dans l'éditeur Arduino


// --- Programme Arduino ---
// Copyright X. HINAULT - Créé le 08/05/2010
// www.mon-club-elec.fr 

//  Code sous licence GNU GPL : 
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
//  

// --- Que fait ce programme ? ---
/* 8 LEDs en compteur BCD à à 99 . */

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter  sur la broche 4 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 5 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 6 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 7 (configurée en sortie) une LED rouge et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 8 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 9 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 10 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V
// Connecter  sur la broche 11 (configurée en sortie) une LED verte et sa résistance 270 Ohms en série connectée au 0V

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int LED[8]={4,5,6,7,8,9,10,11}; // déclare un tableau de 8 constantes de broches
// la broche 4 correspond au bit de poids faible (index 0 du tableau)
// la broche 11 correspond au bit de poids fort (index 8 du tableau)

// --- Déclaration des variables globales ---
int compteur1=0; //variable de comptage BCD n°1
int compteur2=0; //variable de comptage BCD n°2

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

// met les 8 broches en sortie
for (int i=0; i<=7; i++) { // boucle de défilement des 8 broches

  pinMode(LED[i], OUTPUT); //met la broche en sortie 

}


} // 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()

for (int i=0; i<=3; i++) { // boucle de défilement des 4 bits BCD de poids faible

  // met la broche LED[i] dans l'état du bit de rang i de la variable compteur 1
  digitalWrite(LED[i],bitRead(compteur1,i));
}

for (int j=4; j<=7; j++) { // boucle de défilement des 4 bits BCD de poids fort

  // met la broche LED[j] dans l'état du bit de rang j-4 de la variable compteur 2
  digitalWrite(LED[j],bitRead(compteur2,j-4));
}

// --- chaque compteur compte de 0 à 9 puis RAZ --- 

compteur1=compteur1+1; //incrémente le 1er compteur

if (compteur1==10) {
  compteur1=0; // RAZ compteur n°1
  compteur2=compteur2+1; // incrémente compteur n°2
  if (compteur2==10) compteur2=0; // RAZ compteur 2
}  

delay (250); // pause fixant la vitesse du comptage

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

// --- Fin programme ---