- Types d'interruptions
- Interruptions dans Arduino
- Utilisation des interruptions dans Arduino
- Composants requis
- Schéma
- Programmation d'interruption Arduino
- Démonstration d'interruption Arduino
Considérez une voiture rapide, si elle est soudainement heurtée par une autre voiture dans la direction opposée, la première chose qui se produit est que, le capteur d'accéléromètre présent dans la voiture détecte une décélération soudaine et déclenche une interruption externe du microcontrôleur présent dans la voiture. Ensuite, sur la base de cette interruption, le microcontrôleur produit un signal électrique pour déployer immédiatement les airbags. Les microcontrôleurs présents dans la voiture surveillent de nombreuses choses simultanément, comme la détection de la vitesse de la voiture, la vérification d'autres capteurs, le contrôle de la température du climatiseur, etc. Alors, qu'est-ce qui fait une ouverture soudaine d'un airbag en quelques secondes? La réponse est les interruptions, un signal d'interruption est utilisé ici qui a la priorité la plus élevée de tous.
Un autre exemple simple d'interruptions est celui des téléphones mobiles à écran tactile qui ont la priorité la plus élevée au sens «Touch». Presque tous les appareils électroniques ont une sorte d'interruption pour «interrompre» le processus normal et faire des choses plus prioritaires sur un événement particulier. Le processus normal reprend après la fin de l'interruption.
Donc, techniquement, les interruptions sont un mécanisme par lequel une E / S ou une instruction peut suspendre l'exécution normale du processeur et se faire entretenir comme si elle avait une priorité plus élevée. Par exemple, un processeur effectuant une exécution normale peut être interrompu par un capteur pour exécuter un processus particulier présent dans ISR (Interrupt Service Routine). Après l'exécution, le processeur ISR peut à nouveau reprendre l'exécution normale.
Types d'interruptions
Il existe deux types d'interruptions:
Interruption matérielle: Cela se produit lorsqu'un événement externe se produit comme une broche d'interruption externe change son état de LOW à HIGH ou HIGH à LOW.
Interruption du logiciel: Cela se produit selon les instructions du logiciel. Par exemple, les interruptions de minuterie sont des interruptions logicielles.
Interruptions dans Arduino
Nous allons maintenant voir comment utiliser les interruptions dans Arduino Board. Il a deux types d'interruptions:
- Interruption externe
- Interruption de changement de broche
Interruption externe:
Ces interruptions sont interprétées par le matériel et sont très rapides. Ces interruptions peuvent être réglées pour se déclencher en cas de niveaux ÉLEVÉ, CHUTE ou BAS.
Carte Arduino |
Broches d'interruption externes: |
UNO, NANO |
2,3 |
Méga |
2,3,18,19,20,21 |
Interruptions de changement de broche:
Les Arduinos peuvent avoir plus de broches d'interruption activées en utilisant des interruptions de changement de broche. Dans les cartes Arduino basées sur ATmega168 / 328, toutes les broches ou toutes les 20 broches de signal peuvent être utilisées comme broches d'interruption. Ils peuvent également être déclenchés à l'aide des arêtes MONTANTES ou CHUTES.
Utilisation des interruptions dans Arduino
Afin d'utiliser les interruptions dans Arduino, les concepts suivants doivent être compris.
Routine de service d'interruption (ISR)
La routine de service d'interruption ou un gestionnaire d'interruption est un événement qui contient un petit ensemble d'instructions. Lorsqu'une interruption externe se produit, le processeur exécute d'abord ce code qui est présent dans ISR et revient à l'état où il a quitté l'exécution normale.
ISR a la syntaxe suivante dans Arduino:
attachInterrupt (digitalPinToInterrupt (broche), ISR, mode);
digitalPinToInterrupt (pin): Dans Arduino Uno, NANO, les broches utilisées pour l'interruption sont 2,3 et en méga 2,3,18,19,20,21. Spécifiez ici la broche d'entrée utilisée pour l'interruption externe.
ISR: C'est une fonction qui est appelée lorsqu'une interruption externe est effectuée.
Mode: Type de transition à déclencher, par exemple en baisse, en hausse, etc.
- RISING: Pour déclencher une interruption lorsque la broche passe de LOW à HIGH.
- FALLING: Pour déclencher une interruption lorsque la broche passe de HIGH à LOW.
- CHANGE: Pour déclencher une interruption lorsque la broche passe de LOW à HIGH ou HIGH à LOW (c'est-à-dire lorsque l'état de la broche change).
Certaines conditions lors de l'utilisation d'interruption
- La fonction de routine de service d'interruption (ISR) doit être aussi courte que possible.
- La fonction Delay () ne fonctionne pas dans ISR et doit être évitée.
Dans ce didacticiel Arduino Interrupt, un nombre est incrémenté de 0 et deux boutons poussoirs sont utilisés pour déclencher une interruption, chacun est connecté à D2 et D3. Une LED est utilisée pour indiquer l'interruption. Si un bouton poussoir est enfoncé, le voyant s'allume et l'écran affiche interruption2 et s'éteint, et lorsqu'un autre bouton-poussoir est enfoncé, le voyant s'éteint et l'écran affiche interruption1 et s'éteint.
Composants requis
- Carte Arduino (dans ce tutoriel, Arduino NANO est utilisé)
- Bouton poussoir - 2
- LED - 1
- Résistance (10K) - 2
- LCD (16x2) - 1
- Planche à pain
- Connexion des fils
Schéma
Connexion du circuit entre Arduino Nano et écran LCD 16x2:
LCD |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Vers le code PIN du centre du potentiomètre Pour contrôler le contraste de l'écran LCD |
RS |
D7 |
RW |
GND |
E |
D8 |
D4 |
D9 |
D5 |
D10 |
D6 |
D11 |
D7 |
D12 |
UNE |
+ 5V |
K |
GND |
Deux boutons poussoirs sont connectés à Arduino Nano aux broches D2 et D3. Ils sont utilisés pour utiliser deux interruptions externes, une pour allumer la LED et une autre pour éteindre une LED. Chaque bouton-poussoir a une résistance de rappel de 10k connectée à la terre. Ainsi, lorsque le bouton-poussoir est enfoncé, il est logique HIGH (1) et lorsqu'il n'est pas enfoncé, il est logique LOW (0). Une résistance Pull down est obligatoire sinon il y aura des valeurs flottantes sur les broches d'entrée D2 et D3.
Une LED est également utilisée pour indiquer qu'une interruption a été déclenchée ou qu'un bouton a été enfoncé.
Programmation d'interruption Arduino
Dans ce didacticiel, un nombre est incrémenté de 0 qui s'affiche en continu sur l'écran LCD (16x2) connecté à l'Arduino Nano, chaque fois que le bouton-poussoir gauche (broche d'interruption D3) est enfoncé, la LED s'allume et l'écran affiche Interruption2, et lorsque le bouton-poussoir droit (broche d'interruption D2) est enfoncée, la LED s'éteint et l'écran affiche Interruption1.
Le code complet avec une vidéo de travail est donné à la fin de ce tutoriel.
1. Tout d'abord, le fichier d'en-tête de l'écran LCD est inclus, puis les broches LCD utilisées pour se connecter à l'Arduino Nano sont définies.
#comprendre
2. Dans la fonction void setup (), affichez d'abord un message d'introduction sur l'écran LCD. En savoir plus sur l'interface LCD avec Arduino ici.
lcd.begin (16,2); lcd.setCursor (0,0); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("ArduinoInterrupt"); retard (3000); lcd.clear ();
3. Ensuite, dans la même fonction void setup (), les broches d'entrée et de sortie doivent être spécifiées. La broche D13 est connectée à l'anode de la LED, cette broche doit donc être définie comme sortie.
pinMode (13, SORTIE);
4. Maintenant, la principale partie importante de la programmation est la fonction attachInterrupt (), elle est également incluse dans void setup ().
attachInterrupt (digitalPinToInterrupt (2), buttonPressed1, RISING); attachInterrupt (digitalPinToInterrupt (3), buttonPressed2, RISING);
Ici, il est spécifié que la broche 2 est pour l'interruption externe et que la fonction buttonPressed1 est appelée lorsqu'il y a RISING (LOW à HIGH) sur la broche D2. Et la broche 3 est également pour l'interruption externe et la fonction buttonPressed2 est appelée lorsqu'il y a RISING à la broche D3.
5. À l'intérieur de la boucle vide (), un nombre (i) est incrémenté à partir de zéro et imprimé sur l'écran LCD (16x2).
lcd.clear (); lcd.print ("COUNTER:"); lcd.print (i); ++ i; retard (1000);
Dans la même boucle vide (), digitalWrite () est utilisé sur la broche D13 où l'anode de la LED est connectée. En fonction de la valeur de la sortie variable, la LED s'allume ou s'éteint
digitalWrite (13, sortie);
6. La partie la plus importante est la création d'une fonction de gestionnaire d'interruption en fonction du nom utilisé dans la fonction attachInterrupt () .
Comme deux broches d'interruption sont utilisées 2 et 3, deux ISR sont nécessaires. Ici, dans cette programmation, les ISR sont utilisés
buttonPressed1 ():
void buttonPressed1 () { output = LOW; lcd.setCursor (0,1); lcd.print ("Interruption 1"); }
Cette fonction s'exécute lorsque le bouton poussoir de la broche D2 est enfoncé (RISING EDGE). Cette fonction modifie l'état de la sortie sur LOW, ce qui fait que la LED s'éteint et imprime «l'interruption1» sur l'écran LCD.
buttonPressed2 ():
bouton videPressed2 () {sortie = HIGH; lcd.setCursor (0,1); lcd.print ("Interruption2"); }
Cette fonction s'exécute lorsque le bouton poussoir de la broche D3 est enfoncé. Cette fonction change l'état de la sortie sur HAUT, ce qui fait que la LED s'allume et imprime «interruption2» sur l'écran LCD.
Démonstration d'interruption Arduino
1. Lorsqu'on appuie sur le BOUTON POUSSOIR sur le côté gauche, la LED s'allume et l'écran LCD affiche Interruption2.
2. Lorsque le BOUTON POUSSOIR sur le côté droit est enfoncé, la LED s'éteint et l'écran LCD affiche Interruption1
C'est ainsi qu'une interruption peut être utile pour déclencher une tâche importante entre l'exécution normale.