Cours:InfoS2 tdInterruptionExterne : Différence entre versions
(Page créée avec « {{Rouge|<big>'''Retour à la liste des Tds/Tps'''</big>}} {{Vert|<big>'''Éléments de correction'''</big>}} Cours... ») |
|||
Ligne 33 : | Ligne 33 : | ||
*allumer la led PB5 à l'appui sur PD2 et l'éteint lors de l'appui sur PD3 | *allumer la led PB5 à l'appui sur PD2 et l'éteint lors de l'appui sur PD3 | ||
*met en route/arrête le clignotement de la led PB1 à chaque appui sur PD2 | *met en route/arrête le clignotement de la led PB1 à chaque appui sur PD2 | ||
+ | |||
+ | |||
+ | =Exercice : observation d'une roue codeuse= | ||
+ | [[Cours:InfoS2_tdRoueCodeuse_corrige|{{Vert|<big>'''Éléments de correction'''</big>}}]] | ||
+ | |||
+ | |||
+ | ==Principe du codeur incrémental== | ||
+ | La figure suivante représente un codeur incrémental : | ||
+ | [[Fichier:Codeur incremental disque.gif]] | ||
+ | |||
+ | L'observation des signaux permet de connaître : | ||
+ | *le sens de rotation | ||
+ | *la vitesse de rotation | ||
+ | *calculer la position angulaire | ||
+ | |||
+ | Vous pouvez consulter le lien suivant sur lequel une animation présente le fonctionnement : http://stephane.genouel.free.fr/FT/0%20Dossier%20technique/1%20Texte/RobotEricc_web2/co/module_Robot_Ericc_13.html | ||
+ | |||
+ | Le codeur utilisé n'a pas de top tour, seulement les 2 voies A et B. | ||
+ | |||
+ | ==Préparation de la simulation== | ||
+ | Nous allons simuler sur simulIde les signaux générés par un codeur incrémental. | ||
+ | #Télécharger les fichiers suivants: | ||
+ | #*[[Media:CodeurIncremental.hex]] | ||
+ | #*[[Media:Microc CodeurIncremental.sim1]] | ||
+ | #charger le programme de l'attiny13 : | ||
+ | #*clic droit sur le composant | ||
+ | #*charger le firmware | ||
+ | #*choisir le fichier CodeurIncremental.hex téléchargé précédemment | ||
+ | #définir l'atmega328 comme "Main cpu" : il doit y avoir un point jaune sur le composant | ||
+ | |||
+ | |||
+ | |||
+ | =Travail à réaliser= | ||
+ | [[Cours:Atmega328p#Interruption_externe |lien pour configurer les interruption INT0/INT1]] | ||
+ | |||
+ | Les signaux des 2 pistes du capteur sont connectées de la façon suivante : | ||
+ | *piste A => PD2 (INT0) | ||
+ | *piste B => PD4 | ||
+ | |||
+ | Nous utiliserons également 2 leds sur les broches PC0 et PC1 | ||
+ | |||
+ | {{Question|Utilisez 2 leds pour visualiser le sens de rotation du moteur}} | ||
+ | |||
+ | '''Remarque :''' Le principe est assez simple | ||
+ | * au front montant sur l'une des voies | ||
+ | * on regarde la valeur de l'autre voie | ||
+ | |||
+ | {{Question|Améliorer la précision en utilisant à la fois le front montant et descendant}} | ||
+ | |||
+ | |||
+ | {{Question|Modifier votre programme pour réaliser un compte tour, on affichera la valeur sur les leds.}} | ||
+ | Il y a 270 impulsions par tour de moteur |
Version du 6 février 2024 à 10:42
Pensez à mettre sur la 1ère ligne de votre code : // Compiler: Avrgcc device: nomDuMicrocontroleur
Sommaire
Exercice : événement d'une entrée par interruption
Soit le système µcontrôleur avec les caractéristiques suivantes :
- atmega328 à 1MHz
- 4 leds sur les broches
- PC4
- PC0
- PB5
- PB1
- 2 boutons sur les broches
- PD2 (INT0) avec résistance de tirage câblée
- PD3 (INT1) sans résistance de tirage
fichier pour simuler avec simulIDE : microc_tdBpsInterruption.sim1
On utilisera les interruptions INT0 et INT1 associées aux broches PD2 et PD3 pour observer les changements d'état des boutons. Se référer à cette page au besoin
- change l'état de la led PC4 à chaque appui sur le bouton PD2
- change l'état de la led PC0 à chaque appui sur le bouton PD3
- allumer la led PB5 à l'appui sur PD2 et l'éteint lors de l'appui sur PD3
- met en route/arrête le clignotement de la led PB1 à chaque appui sur PD2
Exercice : observation d'une roue codeuse
Principe du codeur incrémental
La figure suivante représente un codeur incrémental :
L'observation des signaux permet de connaître :
- le sens de rotation
- la vitesse de rotation
- calculer la position angulaire
Vous pouvez consulter le lien suivant sur lequel une animation présente le fonctionnement : http://stephane.genouel.free.fr/FT/0%20Dossier%20technique/1%20Texte/RobotEricc_web2/co/module_Robot_Ericc_13.html
Le codeur utilisé n'a pas de top tour, seulement les 2 voies A et B.
Préparation de la simulation
Nous allons simuler sur simulIde les signaux générés par un codeur incrémental.
- Télécharger les fichiers suivants:
- charger le programme de l'attiny13 :
- clic droit sur le composant
- charger le firmware
- choisir le fichier CodeurIncremental.hex téléchargé précédemment
- définir l'atmega328 comme "Main cpu" : il doit y avoir un point jaune sur le composant
Travail à réaliser
lien pour configurer les interruption INT0/INT1
Les signaux des 2 pistes du capteur sont connectées de la façon suivante :
- piste A => PD2 (INT0)
- piste B => PD4
Nous utiliserons également 2 leds sur les broches PC0 et PC1
Utilisez 2 leds pour visualiser le sens de rotation du moteur
Remarque : Le principe est assez simple
- au front montant sur l'une des voies
- on regarde la valeur de l'autre voie
Améliorer la précision en utilisant à la fois le front montant et descendant
Modifier votre programme pour réaliser un compte tour, on affichera la valeur sur les leds.
Il y a 270 impulsions par tour de moteur