Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 193

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/LocalSettings.php on line 197

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338

Warning: putenv() has been disabled for security reasons in /home/users4/d/debrouilloweb/www/wikidebrouillard/includes/parser/Parser.php on line 2338
[ Wikidébrouillard ] Compteur binaire 8 bits

Compteur binaire 8 bits

De Wikidebrouillard.

(Présentation du projet arduino)
 
(11 versions intermédiaires masquées)
Ligne 3 : Ligne 3 :
==Présentation du projet arduino==
==Présentation du projet arduino==
-
====Ce programme réalise un affichage d'un compteur binaire sur 8 LEDs. Chaque LED visualise directement l'état d'un bit de l'octet utilisé pour le comptage. On peut le faire manuellement ou automatiquement en utilisant un bouton, pour passer d'un mode à l'autre.====
+
Ce programme Arduino réalise un affichage d'un compteur binaire sur 8 LEDs.
 +
 
 +
Chaque LED visualise directement l'état d'un bit de l'octet utilisé pour le comptage. On peut le faire manuellement ou automatiquement en utilisant un bouton, pour passer d'un mode à l'autre.
==Liste du matériel==
==Liste du matériel==
Ligne 17 : Ligne 19 :
* [[Image:Condensateur.jpg|50px]] 2 [[condensateurs]] de 10 nF
* [[Image:Condensateur.jpg|50px]] 2 [[condensateurs]] de 10 nF
-
==réalisation du projet==
+
==Réalisation du projet==
===Explication===
===Explication===
 +
 +
Ce compteur binaire possède deux modes de fonctionnement qu'on sélectionne avec le bouton poussoir connecté sur la broche 2 de l'Arduino. Un mode manuel qui est sélectionné par défaut et qui incrémente le comptage à l'aide du bouton poussoir connecté sur la broche 11. Un mode automatique qu'on sélectionne/désélectionne par pression sur le bouton en question.
 +
===Schéma Fritzing===
===Schéma Fritzing===
 +
 +
Les boutons ne sont pas des systèmes mécaniques parfaits. Du coup, lorsqu'un appui est fait dessus, le signal ne passe pas
 +
immédiatement et proprement de 5V à 0V (ou de 0V à 5V). En l'espace de quelques millisecondes, le signal va "sauter" entre 5V et 0V plusieurs
 +
fois avant de se stabiliser. Il se passe le même phénomène lorsque l'utilisateur relâche le bouton. Ce genre d'effet n'est pas
 +
désirable, car il peut engendrer des parasites au sein de votre programme (si vous voulez détecter un appui, les rebonds vont
 +
vous en générer une dizaine en quelques millisecondes, ce qui peut-être très gênant dans le cas d'un compteur par exemple).
 +
 +
Pour atténuer ce phénomène, nous allons utiliser un condensateur en parallèle avec le bouton. Ce composant servira ici
 +
"d'amortisseur" qui absorbera les rebonds (comme sur une voiture avec les cahots de la route). Le condensateur, initialement
 +
chargé, va se décharger lors de l'appui sur le bouton. S'il y a des rebonds, ils seront encaissés par le condensateur durant cette
 +
décharge. Il se passera le phénomène inverse (charge du condensateur) lors du relâchement du bouton.
[[Fichier:CompteurBinaire.jpg|700px]]
[[Fichier:CompteurBinaire.jpg|700px]]
Ligne 28 : Ligne 44 :
************************************* Compteur binaire 8 bits *************************************
************************************* Compteur binaire 8 bits *************************************
-
**                                                                                              **
 
-
**                                                                                              **
 
-
** Ce compteur binaire possède deux modes de fonctionnement qu'on sélectionne avec le bouton    **
 
-
** poussoir connecté sur la broche 2 de l'arduino. Un mode manuel qui est sélectionné par        **
 
-
** défaut et qui incrémente le comptage à l'aide du bouton pousoir connecté sur la broche 11.    **
 
-
** Un mode automatique qu'on sélectionne/déselectionne par pression sur le bouton en question.  **
 
-
**                                                                                              **
 
-
**                                                                                              **
 
-
***************************************************************************************************
 
*/
*/
Ligne 68 : Ligne 75 :
//********************************** Programme d'interruption **********************************
//********************************** Programme d'interruption **********************************
-
// La fonction void changement_mode() est exécutée à chaque pression du bouton qui permet de changer de mode
+
// La fonction void changement_mode() est exécutée à chaque pression du bouton qui permet de  
 +
// changer de mode
void changement_mode()
void changement_mode()
Ligne 82 : Ligne 90 :
   while (btn_mode == 1)                // tant que btn_mode = 1, on exécute cette boucle
   while (btn_mode == 1)                // tant que btn_mode = 1, on exécute cette boucle
   {
   {
-
     etat_btn = digitalRead (11);      // lit l'état actuel du bouton poussoir et le mémorise dans la variable etat_btn
+
     etat_btn = digitalRead (11);      // lit l'état actuel du bouton poussoir et le mémorise dans  
 +
                                      // la variable etat_btn
-
     if (etat_btn != dernier_etat_btn)  // si l'état du bouton est différent du dernier état, on exécute la boucle
+
     if (etat_btn != dernier_etat_btn)  // si l'état du bouton est différent du dernier état, on exécute  
 +
                                      // la boucle
     {
     {
       if (etat_btn == LOW )            // si l'état du bouton est 0
       if (etat_btn == LOW )            // si l'état du bouton est 0
Ligne 90 : Ligne 100 :
         compteur++;                    // on incrémente le compteur
         compteur++;                    // on incrémente le compteur
        
        
-
         if (compteur>=256) compteur = 0; // RAZ de la variable compteur lorsque qu'on dépasse la valeur 255
+
         if (compteur>=256) compteur = 0; // RAZ de la variable compteur lorsque qu'on dépasse la  
 +
                                        // valeur 255
       }
       }
Ligne 106 : Ligne 117 :
     for (int i=0; i<=7; i++) // boucle de défilement des 8 bits / broches     
     for (int i=0; i<=7; i++) // boucle de défilement des 8 bits / broches     
     {   
     {   
-
       digitalWrite(LED[i],bitRead(compteur,i));// met la broche LED[i] dans l'état du bit de rang i de la variable compteur
+
       digitalWrite(LED[i],bitRead(compteur,i));// met la broche LED[i] dans l'état du bit de rang i  
 +
                                              // de la variable compteur
     }
     }
-
     compteur++;                       // on incrémente le compteur
+
     compteur++;                     // on incrémente le compteur
      
      
-
     if (compteur>=256) compteur=  0;   // RAZ de la variable compteur lorsque qu'on dépasse la valeur 255
+
     if (compteur>=256) compteur=  0; // RAZ de la variable compteur lorsque qu'on dépasse la valeur 255
-
     delay (250);                       // pause de 250ms fixant la vitesse du comptage
+
     delay (250);                     // pause de 250ms fixant la vitesse du comptage
   }
   }
-
}                                     // le programme recommence au début de la fonction loop()
+
}                                   // le programme recommence au début de la fonction loop()
Ligne 121 : Ligne 133 :
==Liens avec d'autres projets arduino==
==Liens avec d'autres projets arduino==
-
chercher ici : http://wikidebrouillard.org/index.php/Catégorie:Arduino
+
Explorez la [http://wikidebrouillard.org/index.php/Catégorie:Arduino Catégorie Arduino] de Wikidébrouillard
==Pour aller plus loin==
==Pour aller plus loin==
==Liens avec le quotidien==
==Liens avec le quotidien==
-
quelles peuvent être les applications technologique de ce montage, ou est-ce qu'on retrouve des programme qui y ressemble ?
+
 
 +
Le principe de comptage en binaire est très utilisé dans l'électronique. Il est donc nécessaire de comprendre son fonctionnement (bit de poids faible/fort)
[[Catégorie:Arduino]]
[[Catégorie:Arduino]]
Ligne 134 : Ligne 147 :
[[Catégorie:expérience]]
[[Catégorie:expérience]]
[[Catégorie:électrokids]]
[[Catégorie:électrokids]]
 +
[[Catégorie: électronique]]
 +
[[Catégorie:mathématiques]]

Version actuelle en date du 14 juillet 2014 à 07:59

Article incomplet en cours de rédaction
Modèle:Vidéo

Sommaire

Présentation du projet arduino

Ce programme Arduino réalise un affichage d'un compteur binaire sur 8 LEDs.

Chaque LED visualise directement l'état d'un bit de l'octet utilisé pour le comptage. On peut le faire manuellement ou automatiquement en utilisant un bouton, pour passer d'un mode à l'autre.

Liste du matériel

Réalisation du projet

Explication

Ce compteur binaire possède deux modes de fonctionnement qu'on sélectionne avec le bouton poussoir connecté sur la broche 2 de l'Arduino. Un mode manuel qui est sélectionné par défaut et qui incrémente le comptage à l'aide du bouton poussoir connecté sur la broche 11. Un mode automatique qu'on sélectionne/désélectionne par pression sur le bouton en question.

Schéma Fritzing

Les boutons ne sont pas des systèmes mécaniques parfaits. Du coup, lorsqu'un appui est fait dessus, le signal ne passe pas immédiatement et proprement de 5V à 0V (ou de 0V à 5V). En l'espace de quelques millisecondes, le signal va "sauter" entre 5V et 0V plusieurs fois avant de se stabiliser. Il se passe le même phénomène lorsque l'utilisateur relâche le bouton. Ce genre d'effet n'est pas désirable, car il peut engendrer des parasites au sein de votre programme (si vous voulez détecter un appui, les rebonds vont vous en générer une dizaine en quelques millisecondes, ce qui peut-être très gênant dans le cas d'un compteur par exemple).

Pour atténuer ce phénomène, nous allons utiliser un condensateur en parallèle avec le bouton. Ce composant servira ici "d'amortisseur" qui absorbera les rebonds (comme sur une voiture avec les cahots de la route). Le condensateur, initialement chargé, va se décharger lors de l'appui sur le bouton. S'il y a des rebonds, ils seront encaissés par le condensateur durant cette décharge. Il se passera le phénomène inverse (charge du condensateur) lors du relâchement du bouton.

Code

/*

************************************* Compteur binaire 8 bits *************************************

*/

//************************************ Déclaration des broches ************************************

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

//****************************** Déclaration des variables globales ******************************

int compteur = 0;                      // variable de comptage
int etat_btn = HIGH;                   // variable qui enregistre l'état du bouton
int dernier_etat_btn = HIGH;           // variable qui enregiste le dernier état du bouton
int btn_mode = 1;                      // variable qui permet de passer d'un mode à l'autre

//*************************************** Fonction setup ***************************************
// La fonction setup() est exécutée en premier et une seule fois au démarrage du programme

void setup()   
{
  pinMode (btn_increment, INPUT);     // le bouton d'incrémentation est une entrée
  for (int i=0; i<=7; i++)            // met les 8 LEDs en sortie
  { 
    pinMode(LED[i], OUTPUT);           
  }
  attachInterrupt(0, changement_mode, RISING); // on initialise l'interruption
}

//********************************** Programme d'interruption **********************************
// La fonction void changement_mode() est exécutée à chaque pression du bouton qui permet de 
// changer de mode

void changement_mode()
{
  btn_mode = !btn_mode;               // change la variable par son opposé
}

//*************************************** Fonction loop ***************************************
// La fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop()                            // début de la fonction loop
{
  while (btn_mode == 1)                // tant que btn_mode = 1, on exécute cette boucle
  {
    etat_btn = digitalRead (11);       // lit l'état actuel du bouton poussoir et le mémorise dans 
                                       // la variable etat_btn

    if (etat_btn != dernier_etat_btn)  // si l'état du bouton est différent du dernier état, on exécute 
                                       // la boucle
    {
      if (etat_btn == LOW )            // si l'état du bouton est 0
      {
        compteur++;                    // on incrémente le compteur
       
        if (compteur>=256) compteur = 0; // RAZ de la variable compteur lorsque qu'on dépasse la 
                                         // valeur 255
      }

      for (int i=0; i<=7; i++) 
      { 
        digitalWrite(LED[i],bitRead(compteur,i));
      }
      dernier_etat_btn = etat_btn;
      delay (60);
    }
  }

  while (btn_mode == 0 )
  {
    for (int i=0; i<=7; i++) // boucle de défilement des 8 bits / broches    
    {   
      digitalWrite(LED[i],bitRead(compteur,i));// met la broche LED[i] dans l'état du bit de rang i 
                                               // de la variable compteur
    }

    compteur++;                      // on incrémente le compteur
     
    if (compteur>=256) compteur=  0; // RAZ de la variable compteur lorsque qu'on dépasse la valeur 255

    delay (250);                     // pause de 250ms fixant la vitesse du comptage
  }
}                                    // le programme recommence au début de la fonction loop()


Liens avec d'autres projets arduino

Explorez la Catégorie Arduino de Wikidébrouillard

Pour aller plus loin

Liens avec le quotidien

Le principe de comptage en binaire est très utilisé dans l'électronique. Il est donc nécessaire de comprendre son fonctionnement (bit de poids faible/fort)

AR
CO

Compteur binaire 8 bits

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique