Partie 1 Entrées et Sorties (E/S) numériques Digital input and output

Cours/TD d’informatique embarquée
Utilisation d’un microcontrôleur MBED
Partie 1
Entrées et Sorties (E/S) numériques
Digital input and output
Plan du cours
1.1. Introduction à la terminologie
1.2. Sorties numériques sur Mbed
1.3. Connexion à une Led
1.4. Entrée numérique sur Mbed
1.5. Connexion à un interrupteur
CV
C/TD INFO2 - Partie 1
page 1
1.1. Introduction à la terminologie numérique
Mbed utilise un niveau logique haut (on) de _______
volts et _________ pour le niveau bas (off)
Plus généralement les niveau peuvent avoir plusieurs
dénominations :
0V
3,3V
Le circuit (plateforme MBED LPC1768) que vous utiliserez pour les TD possède _____
entrées/sorties (E/S) numériques (broches numérotées de _____ à ______). Ces broches peuvent
être configurées en entrée ou en sortie.
1.2. Sorties numériques sur Mbed
Une bibliothèque (library) de fonctions sont disponibles pour gérer ces E/S :
DigitalOut
Fonction
DigitalOut
write
read
Variable_Digital=
=Variable_Digital
Utilisation
Crée une sortie numérique associée à un numéro de broche
Fixe la valeur de la sortie à 0 ou 1 (variable entière : int)
Renvoie la valeur de la sortie, valeur 0 ou 1 (variable entière : int)
= est la fonction raccourcie équivalente à write
= est la fonction raccourcie équivalente à read
Les broches des E/S numériques doivent être définies au début du programme.
Chaque E/S est associée à ______________________ et se voit attribuer un __________________ :
DigitalOut myname1(p5);
DigitalOut myname2(p6);
DigitalOut myname3(p7);
etc…
1.3. Connexion à une led
Dans l'exemple ci-contre nous avons connecté une led rouge sur la broche 5 et une led verte sur la 6.
L'anode est reliée à la sortie et la cathode est reliée à la masse (broche 1 du Mbed).
Rq : La résistance R qui limite le courant dans la diode est ___________________________.
CV
C/TD INFO2 - Partie 1
page 2
#include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
int main() {
while(1) {
redled.write(1);
greenled.write(0);
wait(0.2);
redled.write(0);
greenled.write(1);
wait(0.2);
}
}
Le fichier mbed.h est la bibliothèque qui va être liée ajoutée à notre projet par le mot clé _________
Les objets du type DigitalOut sont définis avec un nom et une broche (ex : pin5).
La boucle infinie while(1){ ... } permet d'exécuter le programme sans arrêt et permet aux leds de
clignoter.
Les sorties numériques sont contrôlées par la méthode ________________.
Notion de programmation orientée objet : une méthode est une fonction associée à un objet. Ici la
méthode write() est associée à l'objet de type DigitalOut.
La fonction wait() permet d'attendre 200ms.
Ainsi le code ci-dessus permet d'allumer successivement les leds pendant 200ms.
Exercice 1 :
Ecrire le code permettant de faire un feu tricolore (led verte
sur la broche 7, led orange sur la broche 6 et led rouge sur la
broche 5).
Séquence souhaitée : La led verte doit s'allumer 2s, puis la
orange 0,5s, puis la rouge 2s.
CV
C/TD INFO2 - Partie 1
page 3
1.4. Entrées numériques sur Mbed
Il est aussi simple de définir des entrées numériques que de les lire.
Le type utilisé sera alors ____________ et la méthode associée à la lecture sera _________________
Comme pour les sorties numériques, il est possible de définir les entrées sur les broches 5 à 30 :
DigitalIn myname1(p5);
DigitalIn myname2(p6);
DigitalIn myname3(p7);
etc…
La tension présente sur la broche définit l'état de l'entrée 0 ou 1.
0V sera interprété comme un niveau 0 et 3,3V comme un 1.
Les méthodes associées au type DigitalIn sont dans le tableau ci-dessous :
DigitalIn
Fonction
DigitalIn
read
mode
=Variable_Digital
Utilisation
Crée une entrée numérique associée à un numéro de broche
Renvoie la valeur de l'entrée, valeur 0 ou 1 (variable entière : int)
Fixe le mode d'utilisation de l'entrée
= est la fonction raccourcie équivalente à read
Notion de programmation orientée objet :
DigitalIn bouton1(p5);
int a,b;
a=bouton1.read();
//ligne d'instruction n°1
b=bouton1;
//ligne d'instruction n°2
Les lignes d'instruction n°1 et n°2 sont équivalentes.
On dit que l'opérateur = est surchargé. L'opérateur = est déjà défini au sens du langage C pour les
affectations. Ici il a une signification différente pour la classe DigitalIn. Le signe = est interprété
comme la méthode (fonction) read().
Attention danger : si il peut être pratique d'utiliser ce type de raccourci, cela peut également se
révéler dangereux. En effet, comment sera interprétée l'instruction suivante : if(a==bouton1) ??
Dans le cadre du module INFO2 nous vous demandons de ne pas utiliser ce type de raccourci.
CV
C/TD INFO2 - Partie 1
page 4
1.5. Connexion à un interrupteur
Il suffit de connecter un interrupteur 3 broches entre le 0V (broche 1) et le Vcc (broche 40) et de
connecter la sortie de l'interrupteur à la broche 7. On pourra remplacer l'interrupteur par un bouton
poussoir.
La broche 7 aura son potentiel à 0V ou 3,3V suivant la position de l'interrupteur.
#include "mbed.h"
DigitalOut redled(p5);
DigitalOut greenled(p6);
DigitalIn switchinput(p7);
int main() {
switchinput.mode(PullUp);
while(1) {
if (switchinput==1) {
greenled.write(0); //green led off
redled.write(1); // flash red led
wait(0.2);
redled.write(0);
wait(0.2);
}
else if (switchinput==0) {
redled.write(0); //red led is off
greenled.red(1); // flash green led
wait(0.2);
greenled.write(0);
wait(0.2);
}
}
}
Exercice 2 :
Expliquer ce que fait le programme ci-dessus.
En utilisant un interrupteur et trois leds, créer un programme
permettant de simuler le comportement normal du feu tricolore
(vert,orange,rouge,vert...)
dans
une
position
de
l'interrupteur, et d'avoir un feu orange clignotant dans
l'autre position de l'interrupteur.
CV
C/TD INFO2 - Partie 1
page 5
Exercice 3 :
Créer un signal carré de 1000Hz.
Exercice 4 :
Créer un signal carré de 1000Hz dont la fréquence double si
l'interrupteur est à 'on'.
CV
C/TD INFO2 - Partie 1
page 6
Exercice 5 :
Créer un programme qui compte le nombre de fois que
l'interrupteur a été changé de position et qui allume une led
lorsque le nombre de fois est supérieur à 10.
CV
C/TD INFO2 - Partie 1
page 7
Questions de cours :
Q1) Si j'ai 8 entrées numériques à connecter à mon circuit, combien
de sorties sont disponibles ?
Q2) Définissez une sortie numérique led connectée sur la broche 27.
Q3) Définissez une entrée numérique clr connectée sur la broche 28.
Q4) Expliquez ce qu'est une méthode.
Q5) La valeur d'un objet de type DigitalOut peut-il être imposé par
le programme ? si oui, comment ?
Q6) La valeur d'un objet de type DigitalOut peut-il être lu par le
programme ? si oui, comment ?
Q7) La valeur d'un objet de type DigitalIn peut-il être imposé par
le programme ? si oui, comment ?
Q8) La valeur d'un objet de type DigitalIn peut-il être lu par le
programme ? si oui, comment ?
CV
C/TD INFO2 - Partie 1
page 8