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
© Copyright 2024