Prosit6 Youssef Lahmadi
Prosit6 Youssef Lahmadi
Prosit6 Youssef Lahmadi
A/ Rôles :
Animateur : Victor
Secrétaire : Kaci
Gestionnaire : Emré
Scribe : Adrien
B/ Mots-clés :
● ALU
● Librairie software
● interruption
● Protocole de communication STI
● Horloge RTC
● Port série
● Port analogique
C/ Contexte :
Capable de récupérer les données des capteurs mais on arrive pas à identifier le
changement de mode
D/ Problèmes :
● Comment gérer le passage entre les différents modes ?
● Comment interrompre l'acquisition de données pour changer de mode ?
● Comment gérer le temps de pression du bouton ?
E/ Contraintes :
● Se baser sur le code donné
● Le microcontrôleur à une seule ALU
F/ Livrable :
● Faire un programme gérant les interruptions
● Un modèle du circuit (Tinkercad ou physique)
G/ Généralisation :
Interruption des microcontrôleurs
I/ Plan d’actions :
I. Définition des mots-clés
II. Ressources :
a. interruptions
b. Registres
III. Etudier le circuit
IV. Analyser comprendre et modifier les différents programmes fournis
V. Validation des hypothèses
VI. Conclusion
Définition des mots clés :
● Librairie software : : En informatique, une bibliothèque logicielle est une collection
de routines, qui peuvent être déjà compilées et prêtes à être utilisées par des
programmes.
● Interruption : Action d'interrompre ; état de ce qui est interrompu. Arrêt, coupure,
suspension
● Protocole de communication STI :
● Horloge RTC : Une horloge en temps réel (RTC) est une horloge d'ordinateur,
généralement sous la forme d'un circuit intégré qui est uniquement conçu pour
garder l'heure.
● Port série : En informatique, un port série est une interface de communication
série à travers laquelle les informations sont transférées dans ou hors de
manière séquentielle, un bit à la fois.
● Port analogique : : Port sur le côté du Arduino, permet de recevoir le signal
analogique en numérique.
Caractéristique Arduino :
Microcontrôleur : Micropuce ATmega328P [7]
Tension de fonctionnement : 5 volts
Tension d'entrée : 7 à 20 volts
Broches d'E/S numériques : 14 (dont 6 peuvent fournir une sortie PWM)
Broches PWM : 6 (Broche n°3, 5, 6, 9, 10 et 11) [9]
UART : 1
I2C : 1
IPS : 1
Broches d'entrée analogique : 6
Courant CC par broche d'E/S : 20 mA
Courant CC pour broche 3,3 V : 50 mA
Mémoire Flash : 32 Ko dont 0,5 Ko utilisé par le bootloader
SRAM : 2 Ko
EEPROM : 1 Ko
Vitesse d'horloge : 16 MHz
Youssef Lahmadi
Longueur : 68,6 mm
Largeur : 53,4 mm
Poids : 25g
En-tête ICSP : Oui
Sources d'alimentation : prise d'alimentation CC et port USB
Les ISR :
Signifie « Interrupt Service Routine ». Un ISR (également appelé gestionnaire
d’interruptions) est un logiciel processus invoqué par une demande d'interruption
d'un matériel dispositif.
Il gère la demande et l'envoie à la CPU, interrompant l'actif processus. Une fois l’ISR
terminé, le processus reprend.
Un exemple de base d'un ISR est une routine qui gère clavier événements, tels que
l'appui ou le relâchement d'une touche. Chaque fois que vous appuyez sur une touche,
l’ISR traite le contribution. Par exemple, si vous maintenez la touche de direction droite
enfoncée dans un fichier texte, l'ISR signalera à la CPU que la touche de direction droite
est enfoncée. La CPU envoie cette information à la personne active traitement de
texte ou un programme d’édition de texte, qui déplacera le curseur à droite. Lorsque
vous relâchez la clé, l'ISR gère l'événement "clé en haut". Ceci interrompt le précédent
état "touche enfoncée", qui indique au programme d'arrêter de déplacer le curseur.
Les interruptions :
L’Arduino exécute son programme en séquence, instruction par instruction, dans l’ordre.
Certaines instructions permettent de rompre cet ordre :
Les instructions conditionnelles comme le if
... else
ou les instructions de boucle comme le for(...) .
Mais l’Arduino reste sur ses rails et respecte les instructions qui lui sont données.
Une interruption, comme son nom l’indique, consiste à interrompre momentanément le
programme que l’Arduino exécute pour qu’il effectue un autre travail. Quand cet autre travail
est terminé, l’Arduino retourne à l’exécution du programme et reprend à l’endroit exact où il
l’avait laissé.
Cet autre travail s’appelle le programme d’interruption ou la routine
d’interruption ou encore une ISR pour (Interrupt Service Routine) en anglais.
Il est très important que les ISR aient un temps d’exécution le plus court possible. On
ne fera donc aucun calcul compliqué et aucun appel à des fonctions longues comme un
affichage sur un écran LCD.
Il existe plusieurs sources d’interruption, on dit également vecteur d’interruption, sur
l’AVR ATmega 328 qui équipe l’Arduino Uno, 26 au total. Nous n’allons pas toutes les
passer en revue. Nous allons seulement nous concentrer sur celles que nous pouvons
utiliser dans nos sketchs. Il s’agit des 5 interruptions liées au changement de la tension
présente sur une broche numérique qui sont donc ce que l’on appelle des interruptions
Youssef Lahmadi
externes. Les interruptions liées au timers, des compteurs internes à l’Arduino qui
permettent de compter le temps de manière précise sont également intéressantes et feront
l’objet d’un autre article.
Une ISR n’est pas interrompue par une nouvelle interruption. La nouvelle interruption ne
sera prise en compte que lorsque l’ISR en cours se terminera.
Le corollaire est qu’il ne faut pas appeler de fonctions qui se mettent en attente d’une
interruption à partir d’une ISR. Comme l’interruption attendue ne peut pas déclencher une
nouvelle ISR, la fonction attendra indéfiniment et tout le système se bloquera. C’est ce que
l’on appelle un deadlock.
Les fonctions de Serial qui permettent d’afficher, via la ligne série et l’USB dans le moniteur
série font exactement cela. Leur appel à partir d’une ISR est donc interdit.
Plusieurs interruptions dans le même temps :
Les Interruptions ont chacune une priorité. Par exemple, les interruptions externes sont plus
prioritaires que les interruptions des Timers. L’Arduino exécutera les ISR dans leur ordre de
priorité. L’ordre de priorité est donné dans la table ci-dessous. La source d’interruption
située la plus en haut de la table est la plus prioritaire.
O
n appellera attachInterrupt de la manière suivante :
Où numero est le numéro d’interruption, 0 ou 1 sur un Arduino Uno, 0 à 5 sur un Arduino
Mega.
Ici aussi, il est préférable d’utiliser digitalPinToInterrupt pour se
dispenser d’avoir à se rappeler de la correspondance broche → numéro d’interruption. Il est
donc recommandé d’appeler detachInterrupt de la manière suivante :
Livrable :
J’ai créé un bascule qui permet de passer le flag a 0 quand il est à 1 et l’inverse . C’est cette
fonction qui fait l ’interruption . Dans le void loop on appelle l’acquisition et également l’allumage
de la LED si le bouton est appuyé5 secondes