AFF_TP2 Objectifs : Afficheur changement de joueurs TP2 Justifier la nécessité du multiplexage Définir le codage BCD sur 2 digits Tester un programme d interruption sur carte ARDUINO Mettre en œuvre un programme de test sur carte ARDUINO G.COLIN Ressources disponibles : Site en français : http://www.mon-club-elec.fr/ puis rubrique La traduction Française de la référence Arduino Internet Afficheur étudié : Face avant Face arrière En face arrière, des boutons poussoirs (+ et -) permettent de régler les numéros des joueurs. Des afficheurs 7 segments visualisent ces numéros. Les boutons poussoirs IN et OUT permettent l affichage en face avant du numéro sélectionné. Ce TP2 porte sur l affichage des numéros en face arrière, à l aide d afficheur 7 segments. Multiplexage de la commande des afficheurs Chaque afficheur comporte 7 segments, soit pour les 4 afficheurs en face arrière 28 segments. Si chaque segment est commandé par une ligne de port du micro contrôleur, la commande des afficheurs en face arrière nécessite 28 pattes de port programmé en sortie. Chaque diode électroluminescente du segment doit être protégée par une résistance de limitation (soit 28 résistances au total). A cela, il faut ajouter des pattes pour commander l afficheur en face avant (2x7), plus les pattes pour les boutons poussoirs programmées en entrée. Les afficheurs 7 segments utilisés ont la référence 5082 7650, et la documentation est donnée en annexe. Le courant maximal est de 30mA par segment. On choisira un courant compris entre 10mA et 20 ma par segment. On souhaite utiliser un micro contrôleur de la même famille que celui de la carte ARDUINO (ATmega 2560) car tout le développement logiciel sera fait sur cette carte. Ci-dessous, des extraits de la documentation des microcontrôleurs de la même famille :
De ces 2 tableaux, on en déduit que : - Le circuit ATmega 2560 (circuit 100 pattes) dispose de 86 entrées/sorties Le circuit ATmega2561 (circuit 64 pattes) dispose de 54 entrées/sorties. - Chaque patte I/O peut délivrer 40 ma, mais le total du courant doit être inférieur à 200mA. Le multiplexage consiste à ne commander qu un seul afficheur à la fois. Exemple ci-dessous pour 2 afficheurs à cathode commune : Phase 1 : T1 passant T2 bloqué. On place le code pour l afficheur 1 Phase 2 : T1 bloqué T2 passant. On place le code pour l afficheur 2 NB : Dans ce cas chaque segment est commandé par un niveau haut (1), et les transistors sont également commandés par un niveau haut (1). Pour 4 afficheurs, il y aurait 4 phases (afficheur 1 - afficheur 2 - afficheur 3 - afficheur 4)
Exemple ci-dessous pour 2 afficheurs à anode commune : Phase 1 : T1 passant T2 bloqué. On place le code pour l afficheur 1 Phase 2 : T1 bloqué T2 passant. On place le code pour l afficheur 2 NB : Dans ce cas chaque segment est commandé par un niveau bas (0), et les transistors sont également commandés par un niveau bas (0). Pour 4 afficheurs, il y aurait 4 phases (afficheur 1 - afficheur 2 - afficheur 3 - afficheur 4) NB : On est ici obligé de mettre un transistor car sinon le courant total serait supérieur au courant admissible par une patte I/O général (40 ma max.). 1.1) Indiquer les avantages et les inconvénients du multiplexage en considérant les points suivants, pour 4 afficheurs 7 segments: Nombre de pattes utilisées sur le microcontrôleur Nombre de résistances Nombre de transistors Le courant maximal que peut fournir le microcontrôleur Le niveau d éclairement des leds Conversion binaire/bcd On souhaite réaliser une fonction programmée qui nous retourne le code BCD d un nombre binaire, pour des nombres compris entre 0 et 99. 2.1) Compléter le tableau ci-dessous. Entrée Sortie Décimal binaire hexadécimal Code BCD hexadécimal Décimal 15 00001111 0F 00010101 15 21 25 56 78 2.2) Montrer que, avec les exemples ci-dessus, Sortie = Entrée + 6 dizaine
On donne ci-dessous un programme de test et la fonction de conversion. Affichage en Héxadécimal La sortie de la fonction de type byte (8 bits) L entrée de la fonction de type byte (8 bits) Le programme (test_conversion_bcd.txt) est donné en annexe pour être copier sous ARDUINO. 2.3) Tester le programme sur la carte ARDUINO. 2.4) Expliquer les valeurs affichées (qui sont en hexadécimales) et conclure. Interruption par TIMER Les microcontrôleurs disposent de plusieurs TIMER, dont le principal composant est un compteur incrémenté par une horloge interne ou externe. Une des applications de ces TIMER est d interrompre régulièrement l exécution du programme principal pour exécuter une procédure particulière, appelé programme d interruption. Dans le cas du multiplexage, cette application va permettre de changer d afficheur à intervalle de temps régulier. Une recherche sur internet à permis de télécharger une bibliothèque qui utilise le TIMER 1 pour produire une interruption à intervalle de temps régulier. Cette bibliothèque s appelle «TimeOne». Pour ajouter cette bibliothèque à ARDUINO, suivre la démarche suivante : Télécharger la bibliothèque «TimeOne» Décompresser la bibliothèque dans le répertoire «libraries» du répertoire ARDUINO Ouvrir l exemple ISRBlink : fichier\exemples\timerone\isrblink
Tester le programme sur la carte ARDUINO. Observer la led jaune brancher sur la patte 13. Modifier la valeur 100000 par la valeur 500000. Essayer avec d autres valeurs. 3.1) Donner le rôle de la fonction Timer1.initialise() La fonction Timer1.attachInterrupt permet de déclarer le nom de la fonction à appeler lors de l interruption provoquée par le Timer1. La fonction digitalread(13) lit l état de la patte 13. L opération ^ est un OU exclusif. 3.2) Indiquer le résultat de a^1 (envisager le cas où a=0, puis le cas où a =1) 3.3) En déduire l effet sur la patte 13 de l instruction : digitalwrite( 13, digitalread( 13 ) ^ 1 ); 3.4) Indiquer les opérations réalisées dans la boucle principale loop() 3.5) Pour résumer, expliquer comment fonctionne le programme d interruption associé au Timer1. Afficheur 7 segments à anode commune ou cathode commune Les afficheurs 7 segments utilisés ont la référence 5082 7650, et la documentation est donnée en annexe. 4.1) Déterminer à partir de la documentation le type d afficheur (anode ou cathode commune). Le programme de test est donné en annexe (aff_mux_2digits.txt). Une partie du programme a volontairement été effacée. Certaines valeurs sont à ajuster. La directive de compilation #define permet de déclarer un texte pour en remplacer un autre. Par exemple, dans le programme de test : #define ON 0 le texte ON sera remplacé par la valeur 0 lors de la compilation #define OFF 1 le texte OFF sera remplacé par la valeur 1 lors de la compilation La fonction programmée «commande_7segments(byte code_bcd)» étudiée lors du TP AFF_TP1, a été modifiée : les 0 et les 1 ont été remplacés par des ON et des OFF.
4.2) Sachant que dans la version définitive du projet, on ne sait pas quelle version d afficheur (anode ou cathode commune) sera utilisée, indiquer l intérêt de ce changement dans la fonction «commande_7segments(byte code_bcd)». 4.3) Compléter les lignes manquantes de cette fonction (voir AFF_TP1). Programme d interruption Dans le programme de test fourni (aff_mux_2digits.txt): 5.1) Quelle est le nom de la fonction qui sera appelé régulièrement, à chaque interruption provoquée par le TIMER1? La ligne de programme «BCDL=BCD & 0x0F;» réalise un ET entre la variable 8 bits BCD et la valeur 0x0F (00001111 b ) 5.2) Effectuer l opération suivante (on rappelle que a 0=0 et a 1=a) B7 B6 B5 B4 B3 B2 B1 B0 ET 0 0 0 0 1 1 1 1 = La ligne de programme «BCDH=BCD >>4;» place dans la variable BCDH la valeur contenue dans BCD décalée de 4 bits vers la droite. aprés opération 5.3) Indiquer les valeurs récupérées dans BCDL et BCDH après ces 2 dernières opérations. 5.4) Compléter les 2 lignes manquantes de la fonction «commutation()». Test sur carte ARDUINO La maquette de test comporte 2 afficheurs 7 segments à anode commune. La connectique est donnée ci-dessous : Commande afficheur dizaine Commande afficheur unité g +5V a
6.1) Réaliser le câblage entre la carte ARDUINO et la carte Afficheur 6.2) Implanter le programme dans la carte ARDUINO 6.3) Procéder aux modifications nécessaires. Faire constater le fonctionnement au prof. 6.4) Imprimer le programme complet, à coller sur le compte rendu. Pour aller plus loin Cette partie ne concerne que les élèves qui ont pris beaucoup d avance Dans le cadre du projet envisagé, nous utilisons 2 afficheurs de 2 digits chacun. On peut envisager de multiplexer les 4 afficheurs 7 segments. Il faudra alors déclarer 2 variables BCD1 et BCD2 ( à la place d une seule BCD). 7.1) Proposer un nouveau programme pour la fonction commutation().