Академический Документы
Профессиональный Документы
Культура Документы
Les interruptions
TP Microcontrleur
INSA GE
Objectifs de la sance
Connatre et savoir mettre en place un mcanisme dinterruption.
Pr requis :
Cours microcontrleur famille PIC16, 3GE IF2, o Connatre la structure et les principes de fonctionnement des microcontrleurs (registres, jeu dinstructions, mmoires, E/S, interruptions, ). TD microcontrleur PIC16 de 3GE, o Savoir concevoir et crire un programme assembleur. TP microcontrleur PIC16 de 3GE, o Savoir dvelopper une application PIC en utilisant le logiciel MPLAB et le kit ICD2. Cours sur les interruptions IF3, o Connatre les principes fondamentaux des interruptions et de leur mise en place.
2/39
TP Microcontrleur
INSA GE
Prsentation du matriel
1- Logiciel MPLAB de Microchip Il sagit de lenvironnement informatique de dveloppement pour PIC fourni par le constructeur Microchip. Il est gratuitement tlchargeable et utilisable. MPLAB permet dditer le code assembleur (reconnaissance des instructions), compiler le code (le lier des librairies si besoin), simuler le comportement dun PIC (ceci permet de tester le bon fonctionnement dun programme (dbogage) par simulation) et de piloter des outils de dveloppement supplmentaires comme MPLAB ICD 2. Ce programme est prsent sur chaque PC de la salle de TP
2- Kit MPLAB ICD 2 Ce kit permet de programmer et de dboguer un microcontrleur PIC via le logiciel MPLAB IDE. Ce kit est compos : Dun module ICD 2 (circulaire) contenant llectronique de communication, Dun cble USB permettant la communication entre le bloc circulaire et le PC, Un petit cble RJ11 permettant la communication entre le bloc et le PIC.
SB
1 RJ
Module ICD
Figure 1: Cblage du kit ICD 2
3/39
TP Microcontrleur
INSA GE
Figure 2: Les 3 lments du kit ICD 2 ; le cble RJ11 est en bas de limage Ne pas connecter dalimentation au module ICD 2 !!! Le module est aliment par USB.
3- Carte PIC Deux cartes sont ncessaires ce TP : la carte process et la carte mini . La carte process est la carte sur laquelle le PIC 16F877A est prsent. On trouve sur cette carte (Figure 22) : - lalimentation (il est ncessaire dalimenter cette carte), - un connecteur RJ11 pour le dbogage/programmation du PIC via le kit ICD, - un interrupteur permettant de basculer entre fonctionnement autonome du PIC (position basse) ou fonctionnement par ICD et programmation (position haute, la LED rouge est allume), - loscillateur quartz (20MHz) - un connecteur vers dautres cartes. Sur la carte Mini sont prsents : 8 LEDs, 4 boutons poussoir et un buzzer (voir schma Figure 20).
4/39
TP Microcontrleur Interruption
INSA GE
Travaux pratiques
Avant de commencer le TP, vrifier que vous disposez : - dun PC avec MPLAB IDE, - dun module MPLAB ICD 2, - des deux cartes, lune avec un PIC 16F877A ( 20MHz), lautre avec les 8 LEDs, les 4 boutons poussoirs et le buzzer, - dune alimentation (avec adaptateur) pour la carte PIC, - dun cble USB, - dun petit cble RJ11,
Appuie sur BP ?
tempo = tempo + 1
5/39
TP Microcontrleur Interruption
INSA GE
Excution avec dbogage sur les maquettes Alimentation des cartes process et Mini
Quitter MPLAB. Connecter lalimentation la carte process PIC. Mettre linterrupteur en position haute (la LED rouge est allume). Connexion PC, kit ICD 2, carte PIC Connecter le module ICD 2 la carte process avec le cordon RJ11. Connecter le PC au module ICD 2 avec le cordon USB 6/39
INSA GE
Rem : Si windows dtecte un nouveau priphrique : - Fermer MPLAB (sauvegarder votre travail). - Suivre les instructions de windows pour linstallation des pilotes. Les pilotes se trouvent dans le rpertoire : C:\ Program Files\Microchip\MPLAB IDE\ICD 2\Drivers - Relancer MPLAB IDE et ouvrir votre projet. Choisir ICD 2 comme outil de dbogage Dans le menu faire : Debugger Select Tool MPLAB ICD 2 (Si besoin, prciser que le kit est connect en USB.) De nouvelles options sont alors disponibles dans le menu Debugger. Commencer par initialiser la communication avec le module ICD 2 : Debugger Connect Si le kit est correctement configur et connect, on obtient laffichage suivant dans la fentre Output (sinon vrifier que linterrupteur est en position haute et qua la LED rouge est allume) :
Construction et programmation du PIC RE-construire de votre projet (Build All). Programmer le PIC : (interrupteur en position haute, LED rouge allume) Pour envoyer le code machine dans le PIC, procder ainsi : dans le menu Degugger Program Si la programmation sest correctement droule, on obtient laffichage suivant dans la fentre Output :
7/39
TP Microcontrleur Interruption
INSA GE
Le programme est maintenant charg dans le PIC mais le PC reste le superviseur de lexcution. Excution Pour excuter le programme : Degugger Run (F9) Pour arrter lexcution du programme faire Debugger Halt (F5)
Q- Rappeler quel est ltat de repos des boutons poussoir ainsi que les niveaux logiques appliqus aux entres du PIC en fonction de ltat des boutons poussoir. Q- Donner le rle des temporisations de lorganigramme ainsi que les contraintes quelles crent. Q- Proposer une ou plusieurs solutions pour amliorer la gestion du bouton poussoir. Modifier lorganigramme. Q- Critiquer le code assembleur fourni (respect de lorganigramme, lisibilit (utilisation de fonctions, commentaires, astuces tordues), utilisation des ressources, ).
Maintenant, vous devez pouvoir justifier la navet de lorganigramme propos et critiquer la qualit du code fourni. Vous devez aussi pouvoir proposer des solutions plus adaptes.
8/39
TP Microcontrleur Interruption
INSA GE
Dsactivation des IRQ IRQ TIMER1 ? Rarmement IRQ TIMER1 Tempo_1s -Tempo_1s = 0? Initialiser Tempo_1s et TIMER1 Tempo_Xs -Tempo_Xs = 0?
INTCON<GIE>
PIR1<TMR1IF> = 1 ? 0 PIR1<TMR1IF>
Attendre BP appuy Attendre BP relch Allumer clairage Eteindre clairage Attendre BP relch Arrter TIMER1 Dmarrer TIMER1
Appuie sur BP ?
1 Fin_Tempo
Fin_Tempo = 1 ?
Arrt du TIMER1 Restauration du contexte Activation IRQ Fin : Retour dISR 1 INTCON<GIE>
9/39
TP Microcontrleur Interruption
INSA GE
Questions
Q- Lors dune interruption, quelles sont les tapes fondamentales mises en place par le microcontrleur permettant de garantir le bon droulement du programme ? Q- Quels sont les tapes fondamentales mettre en place dans une fonction dinterruption pour garantir le bon fonctionnement du programme ? Q- Quand la routine dinterruption va-t-elle tre excute ? Q- Estimer le temps dexcution dans le pire des cas de la fonction dinterruption. Quelle est la diffrence entre cette fonction dinterruption et la fonction Tempo_Ws de la partie prcdente ? Q- Quel est le rle de la variable Fin_Tempo ? Quel nom dsigne de ce genre de variable ? O doit-elle tre stocke ? Q- Dans le cas du PIC utilis, dtailler le contenu des tapes effectues par le microcontrleur et celles mettre en place dans la fonction dinterruption (cf. Annexes). Modification du code Ouvrir le workspace : TPuC_1IRQ.mcw Reprer la fonction dinterruption. Q- Quel est le rle du code org 0x0004 plac avant cette fonction ? Complter le code de cette fonction : - Au dbut de la fonction : sauvegarde du contexte (cf. Annexes) - La fin de la fonction : - ractivation des interruptions, - restauration du contexte, - fin de fonction dinterruption. Vrifier le bon fonctionnement de votre programme.
Conclusions
Q- Quels sont les avantages et les inconvnients de la gestion par interruption, points de vue : Lisibilit de lorganigramme ? Lisibilit du programme ? Complexit de programmation ? Utilisation des ressources microcontrleur ?
10/39
TP Microcontrleur Interruption
INSA GE
Organigramme
Modifier les organigrammes prcdents afin de grer les deux interruptions. Prendre en compte les remarques suivantes : - la mme fonction dinterruption (ISR) est appele pour les deux interruptions (TIMER1 et RB0), - la fonction dinterruption ne mettra jour quune seule variable (smaphore), - linterruption sur le front de RB0 na pas besoin dtre arrte comme celle du TIMER1
Q- A partir des documents en annexe, donner les bits des registres modifier ainsi que la valeur de ces bits pour obtenir le dclenchement dune interruption sur les fronts montants de RB0. Donner aussi les banques dans lesquelles ces registres sont prsents. Aide : lire la documentation du PORTB (page 21), la documentation 14.11 commence page 27 Q- Lorsque le dclenchement dune interruption sur un front de RB0 est correctement paramtr, quel bit de quel registre est mis jour lors de lapparition dun front sur RB0 ? Q- Dans la fonction dinterruption, que faudra t il faire de ce bit ? (attention deux choses faire) Modification du code Procder par tapes ! A partir du projet prcdent : - ajouter de la fonction de paramtrage de linterruption (attention aux banques). - modifier la fonction dinterruption (en regard votre organigramme). - modifier le programme principal (en regard votre organigramme). Mise au point Pour la mise au point, il est recommand dutiliser le simulateur (MPLAB SIM) puis le dbuggeur (MPLAB ICD2).
11/39
TP Microcontrleur Interruption
INSA GE
Questions
Q- Si les deux interruptions se produisent en mme temps, quelle est linterruption traite en premier ? Q- Quand est traite la deuxime ? Proposer deux solutions pour pouvoir traiter la deuxime interruption. Q- Que se passe-t-il si une interruption se dclenche pendant lexcution de la fonction de gestion dinterruption (rentrance) ? Q- Comment valider la fiabilit du programme ?
Conclusions
5- Autre application
On souhaite raliser un compteur dimpulsions. Pendant 10 secondes, on compte les impulsions sur RB0. Apres les 10 secondes, le nombre dimpulsions est affich en binaire sur les LEDs. Proposer une solution pour cette application (organigramme(s) et code assembleur).
12/39
Annexes : TP Microcontrleur
INSA GE
Annexes :
13/39
Annexes : TP Microcontrleur
INSA GE
14/39
Annexes : TP Microcontrleur
INSA GE
15/39
Annexes : TP Microcontrleur
INSA GE
16/39
Annexes : TP Microcontrleur
INSA GE
17/39
Annexes : TP Microcontrleur
INSA GE
18/39
Annexes : TP Microcontrleur
INSA GE
19/39
Annexes : TP Microcontrleur
INSA GE
20/39
Annexes : TP Microcontrleur
INSA GE
21/39
Annexes : TP Microcontrleur
INSA GE
22/39
Annexes : TP Microcontrleur
INSA GE
23/39
Annexes : TP Microcontrleur
INSA GE
24/39
Annexes : TP Microcontrleur
INSA GE
25/39
Annexes : TP Microcontrleur
INSA GE
26/39
Annexes : TP Microcontrleur
INSA GE
Figure 14 : Interruptions
27/39
Annexes : TP Microcontrleur
INSA GE
28/39
Annexes : TP Microcontrleur
INSA GE
29/39
Annexes : TP Microcontrleur
INSA GE
30/39
Annexes : TP Microcontrleur
INSA GE
31/39
Annexes : TP Microcontrleur
INSA GE
32/39
Annexes : TP Microcontrleur
INSA GE
33/39
Annexes : TP Microcontrleur
INSA GE
34/39
Annexes : TP Microcontrleur
INSA GE
35/39
Annexes : TP Microcontrleur
INSA GE
36/39
INSA GE
; 20 MHz / 4 = 5MHz ; prescale de 8 : 5MHZ /8 = 625kHz soit 625 000 incrmentations = 1 s ; nombre de remplissage du compteur 16 bits : 625000/65536 = 9,53 ..(>9 it) ; pour 9 : 9 * 65536 = 589824 incrmentations ralises ; il manque 625000 - 589824 = 35176 incrmentations ; donc charger le compteur avec 65536 - 35176 = 30359 => 0x7697 ; il faut donc partir de cette valeur puis boucler 9 fois (1+9 = 10 it) Tempo_Ws_B1: movlw 0x0A movwf Tempo_Ws_mem Tempo_Ws_B2: Tempo_Ws_OVFL_WAIT: btfss PIR1, TMR1IF goto Tempo_Ws_OVFL_WAIT ; Timer has overflowed bcf PIR1, TMR1IF ; 9 * decfsz Tempo_Ws_mem, f; s goto Tempo_Ws_B2; Tempo_Wms_Value != 0 decfsz Tempo_Ws_value, f; s
37/39
INSA GE
; ****************************************************************** main: bsf bcf bsf bcf STATUS, RP0; Selection bank 1 TRISD, 0 ; mise 0 du bit 0 de TRISD TRISB, 0 ; mise 1 du bit 0 de TRISB STATUS, RP0 ; Selection bank 0
bcf PORTD, 0 main_prg: ; init tempo clrf tempo; ; touche ? btfsc PORTB, 0 goto main_prg ; allumage bsf
PORTD,0
main_attente: ; attendre 1s movlw .1 call Tempo_Ws ; touche ? btfss PORTB, 0 goto main_eteindre ; incrementer tempo : tempo = tempo + 1 incf tempo, f ; fin tempo ? movf tempo, W sublw .10 btfss STATUS, Z goto main_attente ; Z=0 main_eteindre: ; eteindre LED bcf PORTD, 0 ; attendre 1s movlw .1 call Tempo_Ws ; retour au debut goto main_prg END
; LED eteinte
38/39
INSA GE
39/39