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.

(Page créée avec « ==Sommaire== ==Présentation du projet arduino== Un compteur binaire qui compte de 0 a 255 grâce a 8 leds, on peut le faire automatiquement ou avec un bouton pousoir. ==Li… »)
 
(37 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
-
==Sommaire==
+
{{avertissement}}
 +
{{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/mp4/compteur_binaire_8_bits-4-encoded.mp4|400|300</videoflash>}}
==Présentation du projet arduino==
==Présentation du projet arduino==
-
Un compteur binaire qui compte de 0 a 255 grâce a 8 leds, on peut le faire automatiquement ou avec un bouton pousoir.
+
Ce programme Arduino réalise un affichage d'un compteur binaire sur 8 LEDs.
-
 
+
-
==Liste du matériel==
+
 +
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.
-
* [[Image:Arduino_Diecimila.jpg|50px]] La carte [[Arduino]] Uno
+
==Liste du matériel==
 +
* [[Image:Ordi.jpg|50px]] Un [[ordinateur]] pour programmer
* [[Image:Arduino_Uno_logo.png|50px]] Le logiciel Arduino
* [[Image:Arduino_Uno_logo.png|50px]] Le logiciel Arduino
-
* [[Image:Fils1.jpg|50px]] Du [[fil électrique]] (noir, rouge…)
+
* [[Image:Arduino_Diecimila.jpg|50px]] La carte [[Arduino]] Uno
* [[Image:Plaque2.jpg|50px]] Une plaque labdec ou [[Breadboard]]
* [[Image:Plaque2.jpg|50px]] Une plaque labdec ou [[Breadboard]]
-
* [[Image:Résistance.jpg|50px]] 8 [[résistances]] de 220 Ohm
+
* [[Image:Fils1.jpg|50px]] Du [[fil électrique]] (noir, rouge…)
-
* [[Image:DEL.png‎ |50px]] 8 [[leds rouge]]
+
* [[Image:DEL.png‎ |50px]] 8 [[leds]]
-
* [[Image:Ordi.jpg|50px]] Un [[ordinateur]] pour programmer
+
* [[Image:Résistance.jpg|50px]] 8 [[résistances]] de 220 Ω
-
* [[bouton poussoir]]
+
* [[Image:Bp.jpg|50px]] 2 [[boutons poussoirs]]
-
* [[Switch]]
+
* [[Image:Résistance.jpg|50px]] 2 [[résistances]] de 10 kΩ
 +
* [[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]]
 +
===Code===
===Code===
<pre>
<pre>
-
mettre le code entre ces deux balises
+
/*
-
//attention à bien documenter le cod
+
 
 +
************************************* 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()
 +
 
-
e !
 
</pre>
</pre>
 +
==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 39 : 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