Vous êtes sur la page 1sur 6

A.

TP Afficheur 7-Segments
1. Étude de la diode

Q1.(2 pt)Donner le schéma d’une diode en précisant où se trouve l’anode, la cathode. Vous
préciserez le sens de parcours du courant pour que la diode s’allume.

Q2.(2)Proposer un schéma en utilisant un microcontrôleur type Arduino permettant de


commander séparemment 2 diodes en réalisant un montage cathode commune.

Q3.(2)Proposer un schéma en utilisant un microcontrôleur type Arduino permettant de


commander séparemment 2 diodes en réalisant un montage anode commune.

2. Afficheur 7 segments

Un afficheur 7-segments est formé d’un ensemble de 8 diodes (7-segments et un point


décimal, qu’on ignore dans tout ce TP) manipulées en plaçant le GPIO du microcontrôleur à
l’état HIGH ou LOW.
En voici le schéma interne :

Q4.Les 7-segments que nous avons à l’école sont à cathode commune. Proposer sur Tinkercad
un schéma de câblage du 7 segments sur les ports sorties de l’Arduino.

740216099.docx – 1
3. Fonctions élémentaires

Pour la suite du TP, on utilise le montage (7-segments à cathode commune) avec une
résistance de 220 Ohms et le fragment de code suivant

const int ALIM_AFFICHEUR = 9;


const int A=2, B=3, C=4, D=5, E=6, F=7, G=8;

void setup()
{
for (int pin = 2; pin < 9; pin++)
pinMode(pin, OUTPUT);
pinMode(ALIM_AFFICHEUR, OUTPUT);
}

void loop()
{
digitalWrite(ALIM_AFFICHEUR, …); //Completer par HIGH ou LOW

digitalWrite(A, …); //Completer par HIGH ou LOW


delay(2000);
digitalWrite(ALIM_AFFICHEUR, …); //Completer par HIGH ou LOW
delay(500);
}

Q5.(3)Compléter et tester ce code en répondant à la question suivante, de façon que la diode


s’allume 2s et s’éteigne 500ms. Vous justifierez votre réponse par un schéma électrique
basé sur le schéma de la Q.2 ci-dessus.

a. Pour qu’un segment s’allume, il faut que :


 le PIN de la carte Arduino correspondant à ce segment soit à HIGH ou LOW ?
 le PIN de la carte Arduino correspondant à l’alimentation de l’afficheur soit à
HIGH ou LOW ?

b. Pour qu’un segment s’éteigne, il faut que :


 le PIN de la carte Arduino correspondant à ce segment soit à HIGH ou LOW ?
 le PIN de la carte Arduino correspondant à l’alimentation de l’afficheur soit à
HIGH ou LOW ?

Q6.(1)Modifier ce code pour allumer ensemble tous les segments de l'afficheur.

740216099.docx – 2
Q7.(1)Modifier ce code pour allumer et éteindre successivement tous les segments de A à G.

Q8.(3)Mettre en œuvre un programme constitué des fonctions zero(), un(), deux() … neuf()
permet d'afficher successivement les chiffres en base 10.

4. Expérimental

Refaire le même montage avec une breadboard, une carte Arduino, un afficheur 7 segments et
une résistance 220 ohms.

Q9.(3)Mettre en œuvre un programme avec la fonction suivante permettant d'afficher un


chiffre. Cette fonction doit faire appel aux fonctions définies à la question précédente.

void afficher(int chiffre) {…}

void loop() {
for (int i = 0 ; i< 10 ; i++) {
afficher(i);
delay(500);
}
}

5. 3 afficheurs

Le problème de ce genre de montage, c’est qu’il ne permet que l’utilisation de 2 Afficheurs 7-


segments sur une carte Arduino Uno, et guère plus sur une Arduino Mega, à cause du peu de
sorties dont le microcontrôleur dispose.

Pour pallier cette difficulté, on choisit de cadencer très rapidement les alimentations d’une
suite d’afficheur 7 segments pour permettre l’affichage de chiffres différents sur chacun des
afficheurs, en utilisant le phénomène de persistance rétinienne.

Q10. (2)Expliquer le phénomène physique, donner sa fréquence et sa période.

Q11. (2)Donner le nombre maximum d’afficheurs qu’il serait possible d’utiliser grâce à cette
technique avec un Arduino Uno? Expliquer votre démarche.

740216099.docx – 3
On réalise le branchement suivant pour l’affichage de nombres entiers de 0 à 999 :

On déclare la fonction suivante pour l’alimentation d’un des afficheurs :


void allumer_afficheur_unites() {
digitalWrite(ALIM_AFFICHEUR_CENTAINE, HIGH);
digitalWrite(ALIM_AFFICHEUR_DIZAINE, HIGH);
digitalWrite(ALIM_AFFICHEUR_UNITE, LOW);
}

De sorte que la procédure suivante affiche le chiffre 7 sur l’afficheur des unités.

allumer_afficheur_unites() ;
afficher(7) ;
delay(20);

Q12. (3)Compléter de même les fonctions :


void allumer_afficheur_dizaines() {}

void allumer_afficheur_centaines() {}

Q13. (2)Créer la fonction suivante permettant d’afficher un nombre à 3 chiffres sur les
afficheurs :

void afficher_nombre(int centaines, int dizaines, int unites) {…}

740216099.docx – 4
Q14. (2)Réaliser un compteur permettant l’affichage successif de tous les nombres de 000 à
999.

Q15. (2)Simplifier votre programme de façon qu’il comporte uniquement les fonctions
annexes suivantes :

void zero() {…}


void un() {…}

void neuf(){…}

void allumer_afficheur(int pin) {}


void afficher(int chiffre, int pin) {

delay(20);
}

void afficher_nombre(int nombre) {}

6. Afficher un nombre entré dans le moniteur série

Le bout de code suivant permet de récupérer et d’afficher un nombre entier rentré dans le
moniteur série.

long number = 0;

void setup() {
Serial.begin(9600);
Serial.println("Entrer un nombre");
}

void loop() {

if(Serial.available() > 0) {
number = Serial.parseInt();
Serial.print("Vous avez saisi le nombre : ");
Serial.println(number);
Serial.println("Entrer un nouveau nombre");
}
}

Q16. (3)Utiliser ce fragment de code pour afficher sur les afficheurs 7-segments un entier
entre 0 et 999 saisi au clavier.

740216099.docx – 5
7. Pour aller plus loin

Q17. (2)Modifier votre programme en remplaçant toutes les fonctions zero(), un() … neuf()
par une unique fonction afficher(int chiffre) en complétant les pointillés (…) dans le
fragment de code suivant :

int tableau[10][7]=
{{HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, LOW},
{LOW, HIGH, HIGH, LOW, LOW, LOW, LOW},
{HIGH, HIGH, LOW, HIGH, HIGH, LOW, HIGH},
{HIGH, HIGH, HIGH, HIGH, LOW, LOW, HIGH},
{…},
{…},
{…},
{…},
{…},
{HIGH, HIGH, HIGH, HIGH, LOW, HIGH, HIGH}};

void afficher(int chiffre) {


for (int j = …; j < …; j++)
digitalWrite(…, tableau[chiffre][j]);
delay(20);
}

NB : Il existe un problème de remise à 0 systématique de number dans le moniteur série d’une


carte Arduino réelle qui empêche l’affichage correct du nombre. Pour contourner cette
difficulté, on peut s’inspirer du code suivant :

void loop() {

if(Serial.available() > 0) {
long last_number = number;
number = Serial.parseInt();
if (number == 0) number = last_number;
}
}

740216099.docx – 6

Vous aimerez peut-être aussi